due-diligence/ Docs — Adversarial ReviewCross-check of the two externally-produced reports in the top-level due-diligence/
directory against this project’s ground truth. Those two docs are an independently
produced parallel version of the exact deliverable this project already authored in
concept-analysis.md + implementation-plan.md
— a conceptual brief + gap + holistic + implementation plan. Their strong convergence
with the internal analysis validates it; this document records where they are
sharper, where they are softer, and where they are simply wrong.
agenthropic_ideen_doklad_gap_holistic_implementation.docx (~3.7k words, 11 sections)agenthropic_ideen_doklad_gap_holistic_implementation_EXPANDED.docx (~7.7k words, 26 sections; a superset)A five-lens adversarial workflow (5 parallel senior reviewers, Opus, high effort,
~361k subagent tokens) cross-checked every claim against: docs/ai/DESIGN.md,
CLAUDE.md, ../independent-due-diligence.md,
the six per-project deep dives in ../due-diligence/projects/,
../due-diligence/security.md, and the internal
concept-analysis.md / implementation-plan.md.
The lenses: factual accuracy on the six rivals · internal consistency & document defects · completeness vs the internal analysis · security correctness · implementation-plan soundness.
Both docs are factually sound and materially better than the vendor report they digest. They pass the two decision-critical tripwires:
buildAgentTree() + real tests, and correctly note the remaining real gap (edges are
event-derived / session-scoped, not a persisted global DAG).claude spawner
exposing permission-mode / bypassPermissions with opt-in / no-op-when-unset auth —
not the vendor’s “concurrency cap 10,000” red herring. Both also flag its DAG as
“oversold” (a type-aggregated 3–4 layer diagram).But the two are not interchangeable: BASE is more precise, EXPANDED is more formalized — and EXPANDED carries real generation defects. Neither, on its own, is a superset of the internal analysis.
| # | Doc | Finding | Ground truth |
|---|---|---|---|
| H1 | EXPANDED | §10.1–10.7 “holistic analysis”: all seven sub-tables are byte-identical. The row "Да се гони feature richness преди data/security foundation." repeats verbatim at lines 938/952/966/980/994/1008/1022. Security-holism answers a data question; ~95 lines are duplicated filler presented as analysis. |
Seven distinct holistic dimensions each promise dimension-specific analysis; six are copy-paste duplicates of the first. |
| H2 | EXPANDED | Security hardening sequenced to Phase 6 of 8 (loopback enforcement, same-origin WS, no-spawner audit), while the WS/SSE realtime layer ships at Phase 4 — two phases of a cross-origin-vulnerable endpoint. Directly contradicts its own §9.3: “трябва да са първи в backlog-а, не последни”. Backup deferred further, to Phase 8. | CLAUDE.md security invariants are non-negotiable from the first listening socket; the internal plan folds them into Phase 1 CI “from commit one — never retrofitted”. |
| H3 | EXPANDED | Phase 0 is a paperwork “decision lock” (write ADRs, freeze scope), not a feasibility spike. The make-or-break question — does the real hook/JSONL stream carry subagent parent→child linkage? — is only validated at the Phase-4 UI, after scaffold + ingest + the full normalizer are already built on the assumption. BASE does this correctly (Phase 0 spike + explicit stop condition). | Internal Gate G0 exists “to answer R1 (can JSONL rebuild the tree?) before any architecture is poured”, with a hard ❌ stop. DESIGN §9 Phase 0 = go/no-go gate. |
| H4 | Both | The reconciliation / ingest source-of-truth join is only implicitly acknowledged, never framed as make-or-break. EXPANDED marks token_usage.agent_id “nullable” and FR-05 says JSONL usage is linked “където е възможно” — a symptom-level nod — but neither states which source wins on disagreement, designs the join key, or asks whether the DAG survives an outage. Both silently default to hooks-primary with no durability/replay contract. |
Internal analysis §2.2/§6.1 makes this THE highest-risk unknown: two ingest sources with different durability/coverage and no reconciliation contract; the persistent DAG (the moat) may have permanent holes if only hooks carry linkage. |
| Theme | BASE | EXPANDED |
|---|---|---|
| Licensing | “license неяснота” | “license ambiguity”; copied-code legal risk rated only “Low-medium” |
| nirdiamant shape | “Config/prompt logic visualization” ✗ | “config/prompt/snapshot observability… не е agent monitor” ✗; command-injection hedged to a “possible risk” |
| SSRF | ✅ covered (“no URL fetch from browser”, lines 113/423) | ✗ absent — and its disler harvest recommends reusing disler’s ingest loop without flagging the payload-driven WebSocket dial-out |
| Payload redaction | ✗ missing (though it stores payload_json) |
✅ covered (NFR-PRIV-01) |
| Schema | single events table — cannot satisfy its own “raw events immutable” acceptance criterion |
events_raw immutable + events (sounder) |
| Letter grades | ✅ keeps all six (all match the dossier) | ✗ dropped for vaguer “Adoptability/Usefulness” prose |
Shared, medium severity (both docs):
private:true, “MIT” is a README badge only), stricter
than “ambiguous”. Only simple10 + hoangsonww ship a real LICENSE and are copyable.
Copying even ~73 LOC of cast’s controlGate is infringement; patterns must be
clean-room reimplemented.instance/host_id missing from the schema of both, though both gap analyses demand
it from v1 — a near-zero-cost hedge turned into a future forced migration.token_usage too coarse — no service_tier / speed / inference_geo buckets, no
compaction-baseline preservation across PreCompact; historical totals will misprice
after a context rewrite (despite EXPANDED’s own FR-08 “reprice” requirement).SubagentStart assumed without verification. DESIGN itself
hedges SubagentStart; if it doesn’t fire, both normalizers rest on a wrong premise.| Doc | Defect | Location |
|---|---|---|
| EXPANDED | §9.1–9.5 gap sections each close with a byte-identical “Извод:” paragraph, repeated five times | lines 772/806/840/874/908 |
| EXPANDED | Numeric contradiction on the core KPI: exec summary sets “100% correctly reconstructed hierarchy”; MVP metrics table sets ≥95% | line 63 vs line 244 |
| EXPANDED | TOC collapses six appendix sections (21–26) into one unnumbered “21. Appendices” entry | TOC lines 22–42 vs body 1509–1716 |
| BASE | Devanagari word mid-sentence: "Не се правят अनुमानения за tokens" (intended: “предположения”) |
§3.1, line 87 |
| BASE | “OPCn” — meaningless token used twice as if a product-line name | lines 120, 287 |
| BASE | Lists “SSE stream” as a cast strength (unsupported by the deep dive) | §5, line 190 |
| BASE | Omits orchestration_edges from the “Core entities” list, though it calls that table the #1 moat |
line 58 vs schema line 401 |
| Both | BASE vs EXPANDED disagree with each other on schema (events vs events_raw+events; webhook_targets vs alert_deliveries), monorepo layout (packages/* vs apps/*), and phase count/semantics (6 dated phases vs 9 narrative phases; “Phase 2” = Alerts in BASE, = Ingestion in EXPANDED) |
— |
SubagentStart).instance/host_id in the first migration as a cheap commercial hedge (D2).| BASE | EXPANDED | |
|---|---|---|
| Accuracy | higher (grades kept, security framing, SSRF) | lower (dropped grades, SSRF absent, duplicated tables) |
| Formalism | lower | higher (FR/NFR/ADR/traceability) |
| Sequencing | correct (Phase 0 spike, security in Phase 1) | defective (security → Phase 6, backup → Phase 8, Phase 0 = paperwork) |
| Artifacts | Devanagari + “OPCn” | duplicated §10 + §9 conclusions |
The two together ≈ the internal deliverable, but neither alone is a superset of it.
The right synthesis for the plan going forward is: BASE’s sequencing and accuracy +
EXPANDED’s formal apparatus (FR/NFR/ADR/traceability) + the internal analysis’s eleven
missed items above. That synthesis is carried into
concept-analysis-v2.md and
development-plan.md.
Reviewed against the design of record in docs/ai/DESIGN.md and the
independent audit in ../independent-due-diligence.md.