agenthropic

PROJECT STATE — 2026-07-06 (start here)

Purpose: the single entry point for a context-free future session (any model — written explicitly so an Opus-class reader with zero chat history can reconstruct the entire project state, know what is authoritative, and act correctly on the first try). Everything here is links + status; the substance lives in the linked documents. This file supersedes nothing — it navigates.

As of: 2026-07-06, end of the roadmap session (the third working session that day, after audit/red-team and cleanup/reorganization). First action for any future session: check today’s date against the KC calendar (top of TODO.md; source: roadmap-v1-v2-2026-07-06.md §4) — the correct behavior depends on which checkpoint window you are in, and a passed-unfulfilled checkpoint has its own playbook in §6 below. If you are reading this much later, also check DONE.md and WORKLOG.md for entries newer than this date before trusting the snapshot in §4–§5.

Update — 2026-07-07 (the snapshot below remains accurate; nothing is superseded): the roadmap §8 analysis freeze was exercised for the first time — in the 07-06 evening chat session Ivan asked for a merciless “what is missing” analysis (i.e. #10); the session declined per the §6 playbook and answered with the KC table plus a digest of already-catalogued findings (Gate A unsigned · friction log not started · no rival installed · 0 commits · OPEN-1…9 · EMP-1…3 · LOST-1…8 — full digest preserved in the WORKLOG.md 2026-07-07 entry). No analysis document #10 was created; the freeze held. A 2026-07-07 state check found the repo unchanged since the 07-06 close: all five Step-0 boxes unchecked, 0 commits. KC-0 (2026-07-13) is 6 days away.

⚠️ Update — 2026-07-30 (read this before acting on §1, §4 or §5). This file is a navigator, and its 07-06 snapshot has been overtaken by events. Three things in it are now factually wrong, and a fresh session that trusts them will act incorrectly:

  1. “Zero application code. Zero git commits” is false. Implementation began 2026-07-11. What runs today: the loopback-bound token-gated Fastify server, the SQLite/WAL substrate with migrations and an append-only events_raw enforced by triggers, JSONL corpus ingest with replay-on-startup, the persisted subagent DAG, the cost engine, the hook receiver, the SSE hub, the read API, and all four SPA views. 72 test files / 879 tests pass, coverage gated >90% in every shipped package. The three P0 moat proofs and the 12-scenario negative catalogue are green.
  2. “No production code until Gate A + WP-S7 GO — CD-8 is still binding” no longer describes the operating reality. CD-8 was overridden by the owner in chat on 2026-07-11 (“пускай агенти и започвай да имплементираш”), and again on 2026-07-18 to keep dispatching past a failed checkpoint. The override covers dispatching only — it does not relax the security invariants, the LABEL-ME ratification (Phase-0 numbers stay PROVISIONAL), Ivan’s two physical KC acts, or no-commit-without-an-explicit-ask. Record it as an override, never as a pass.
  3. KC-0 (2026-07-13) and KC-1 (2026-07-27) both passed UNMET. KC-0 closed with 2 of 5 boxes open. KC-1’s clauses 1 and 2 were green, but clause 3 — “the friction log has not crowned a rival” — was unsatisfiable by construction, because the friction log was never opened. A checkpoint whose condition cannot be evaluated has not been passed; it was skipped. The next real checkpoint is KC-2, 2026-09-14.

Still true and still binding: the security invariants (§ everywhere), the analysis freeze (9 of 9 — decline #10), the immovable KC-4 date of 2026-12-01, and the rule that at a failed checkpoint you report and stop rather than archiving anything yourself. Newest truth lives in ../../DONE.md Milestone 1, ../../TODO.md and WORKLOG.md — prefer them over §4–§5 below.

⚠️ Update — 2026-08-15 (the current-truth snapshot; supersedes the 07-30 numbers).

  1. v1.0 is code-complete; what remains is not code. Four feature commits are pushed to main: 9b6c6b3 (waves 1–4), 2f8d103 (hardening waves), 71f6878 (the review-remediation waves — ingest correctness, O(new bytes) polling, boot honesty) and ac5d53b (ingest-side status reconciliations onto the SSE stream; cross-session usage collisions counted on /api/health). Measured on the 2026-08-15 working tree, not estimated: typecheck · lint · prettier · the no-spawner gate (235 files) · the web production build · the license scan (412 packages) all green, and 106 test files / 1554 tests with 100% statements, branches, functions and lines in all five packages, with zero coverage-ignore pragmas in apps/server/src. The coverage bar in §4–§5 below reads “>90%”; that was the historical gate and it has since been pinned to 100 in every package, with guard tests proving the figure cannot be faked — though not uniformly: apps/web asserts only the pragma sweep, because it legitimately carries a coverage exclude, so widening that list or lowering its four thresholds would pass CI silently (closed 2026-09-26: the web guard now pins the exact thresholds and exclude list). See ../site/contributing/testing.md.
  2. All 14 items of the parser gate are IMPLEMENTED — but “implemented” is not “measured”. #7 (legacy bare-Explore) and N1 (<task-notification>) fire zero times on the real corpus and exist only as defensive fallbacks exercised by synthetic fixtures; #11 is amended (sibling order is wave-partial, never total). Any future session reporting “14/14 green” is overstating the corpus evidence. See parser-spec.md §3.
  3. Three remaining v1.0 blockers are Ivan’s, and none is a programming task — down from five on 2026-08-25, when the two GitHub-settings items were done. Still open: the LABEL-ME corpus (≥52 hand-labelled agents — until then the hierarchy ≥95% gate reports NOT CERTIFIED and every Phase-0 number stays PROVISIONAL); the unmeasured “<30s to understand a session” claim; and the retention policy values (OPEN-1/2/3 — the mechanism is built and tested, the default NO_RETENTION is a byte-identical no-op). Closed 2026-08-25 — branch protection on main. It requires the ci status check (that is the job id; the workflow’s display name CI is not the context) and refuses force-pushes and deletion, so CD-7’s “coverage blocks merges” is physically enforced — against a contributor. enforce_admins is deliberately off, because a single maintainer whose normal mode is a direct push to main would otherwise be locked out of their own repository; read every “merge-blocking” claim in this corpus with that exemption attached. Verify: gh api repos/IvanBBaev/agenthropic/branches/main/protection --jq '{contexts: .required_status_checks.contexts, enforce_admins: .enforce_admins.enabled}' → {"contexts":["ci"],"enforce_admins":false}. Closed 2026-08-25 — GitHub Pages, and the reason it took an owner is worth keeping. An earlier revision of this snapshot said the workflow “should now self-enable on push” because it passes enablement: true to configure-pages. It cannot. pages: write authorises deploying to an existing Pages site, never creating one; creation needs repo administration rights that the default GITHUB_TOKEN deliberately lacks. Three runs died in configure-pages to prove it: 30528892265 (Get Pages site failed … Not Found), then 31318246506 and 31879212583 (Create Pages site failed. Error: Resource not accessible by integration). Pages was created by gh api -X POST repos/IvanBBaev/agenthropic/pages -f build_type=workflow; run 32863218759 was then re-run and succeeded, and the site is live at https://ivanbbaev.github.io/agenthropic/ (HTTP 200, as is /site/).
  4. KC-2 (2026-09-14, “Phases 1–2 complete”) is met well ahead of its window. The next real checkpoint is KC-3, 2026-10-12, and it turns on items in (3) that no agent can perform. KC-4 (v1.0, 2026-12-01) is unchanged and immovable.
  5. The public documentation corpus was re-synced with the code on 2026-08-15 (six path-disjoint lanes plus a link check and an adversarial honesty pass). Where a doc and the code now disagree, the code is the truth and the disagreement is a bug in the doc — report it.

Unchanged and still binding: every security invariant, the analysis freeze (9 of 9), the PROVISIONAL status of all unratified numbers, and the rules that nothing is committed, pushed, archived or deleted without an explicit owner instruction.

⚠️ Update — 2026-09-18 (the current-truth snapshot; supersedes the 08-15 numbers).

  1. The schedule of record is now the closing plan, closing-plan-2026-09-08.md (schedule record #3, written inside the analysis freeze as a schedule, not an analysis). It defines “100%” as v1.0.0 tagged by KC-4 with every RELEASE.md box ticked, and lays the remaining work out as Waves 0–5 on the TODO.md closing board. Its eight-decision batch D1–D8 was taken by Ivan on 2026-09-09 (every recommended default, in chat), and D1 was consumed by commit 39e565a the same day — the eleventh and newest commit on main, CI success. Everything since (the 2026-09-10 Wave 2 close with migration 18, the 2026-09-18 truth pass) sits in the working tree — 84 modified and 12 new files on this date; committing it needs a new explicit ask, as always.
  2. KC-2 (2026-09-14) is MET, ticked on 2026-09-18 — four days after its date. The session that owns the tick was inactive 2026-09-10 → 09-18; the tree did not change in between, the Phase 1 and Phase 2 exit gates were re-verified green on the date’s tree, and zero velocity rebases were used. Record it as a late tick of a met condition, not as a failed checkpoint. The KC-0/KC-1 record above is unchanged. The next checkpoint is KC-3, 2026-10-12: its preconditions already hold (main requires the ci check; the P0 proofs are green) and need ticking on the date, not work. KC-4 (2026-12-01) is unchanged and immovable.
  3. Schema 18. Migrations 14–18 canonicalize the two timestamp operands of the dated-rate comparison, install the token_usage_rollup the cost summary reads, add agents.outcome_cause, and seed the ten model_pricing rows (two model ids × five buckets) the real corpus exposed as missing (ADR-0006’s 2026-09-18 update). The pricing halt gate is real and was exercised: the first boot over the owner’s real corpus (2026-09-09, schema 17) refused 52 of 60 sessions on unknown model id; migration 18 cured it by adding rows, never by relaxing the gate, and the 2026-09-18 rerun at schema 18 admitted 54 of 54 (docs/measurement/time-to-understand-log.md §0.4–§0.5). It happened a second time on 2026-09-26: the corpus had moved to claude-opus-5-5, a boot at schema 18 refused 27 of 61 (§0.6), and migration 19 adds that id’s five rows, so the schema is now 19. Dollars stay PROVISIONAL until LABEL-ME; the Sonnet 5 rate question (D10) is open and Ivan’s. Later on 2026-09-26: D10 answered by Ivan’s go-ahead in chat; migration 20 rewrites the seeded claude-sonnet-5 rows to the official 2 / 10 (pricing page re-read that day: the scheduled 3 / 15 never took effect), so the schema is now 20. The WP-C1 ratification tick is still Ivan’s.
  4. Measured on the 2026-09-18 working tree, not estimated: the eight local gates — gate:node, gate:spawner, typecheck, lint, prettier, the web production build, test, gate:licenses — all green; 131 test files / 2428 tests, 100% statements, branches, functions and lines in all five packages; the spawner allowlist holds the policy file only; 412 packages under the license gate with one documented exception. The scriptable half of RELEASE.md (§1–§3, §5 automated proof, §6 dollar trace and Pages) was rehearsed end to end the same day with every exit code 0 and no box ticked — Wave 4 R1; the record is on the TODO.md Wave 4 row and the boxes are ticked on the release commit only.
  5. What remains is Ivan’s, not code. Wave 3 (from 2026-10-13): the 60 LABEL-ME claims, the stopwatch run, the 14-day friction log (also the KC-5 evidence), one rival dashboard. Then the [HUMAN] release boxes, the §5 live backup→restore drill on the real database, the L8 BENCH-SHAPE ratification tick, the open decisions D9/D10 on the board, and the release commit + v1.0.0 tag by 2026-12-01. Every package.json reads 0.3.0; the 0.3.0 → 1.0.0 bump, the CHANGELOG [1.0.0] section and the DONE.md v1.0 entry are acts of the release commit. Agents take only defects the friction log raises — no new features in Wave 3.

Unchanged and still binding: every security invariant, the analysis freeze (9 of 9 — the closing plan is a schedule, and a tenth analysis is still declined), the PROVISIONAL label on every unratified number, and the rules that nothing is committed, pushed, archived or deleted without an explicit owner instruction.


1. What this project is

agenthropic — a self-hosted, local-first dashboard for observing Claude Code agent/subagent activity on Ivan Baev’s Mac Mini M4. Differentiator (the “moat”, per the ruling strategy memo): persistent cross-session subagent DAG + dollar-accurate cost attribution — only those two. Greenfield clean build (ports & adapters, in the spirit of Ivan’s kiko project), decided over forking any of six audited rival dashboards.

Facts about the repository as it stood on 2026-07-06, kept as the baseline this document was written against. Three of the four are superseded — read them as the starting state, not as today’s, and see the 2026-09-18 banner above for what is true now:

2. Complete timeline (what happened, in order)

Every entry below has a fuller record in DONE.md and WORKLOG.md.

Date Milestone Primary artifact
07-03 Repo bootstrap; two vendor due-diligence .docx digested; greenfield decision docs/ai/DESIGN.md (git-excluded, readable locally)
07-03 Independent due-diligence dossier — 6 rival deep dives with file:line evidence; vendor’s self-contradiction documented ../due-diligence/
07-03 Concept analysis v1 (4 lenses + gap + holistic) + v1 implementation plan (D1–D7) concept-analysis.md, implementation-plan.md
07-03 Adversarial review of two externally-produced reports (BASE + EXPANDED) external-docs-review.md
07-04 v2 consolidation — LB1/LB2 + the ten canonical decisions CD-1…CD-10 concept-analysis-v2.md
07-04 Development plan — 75 work packages, 8 tracks, 17 waves, 7 phases, verified DAG development-plan.md
07-04 Best-path strategy memo (sits above the plan; §6 orders plan amendments) + empirical Phase-0 probe of the real ~/.claude/projects corpus → CD-1 pre-answered CONDITIONAL-GO, confidence 85, 11-item parser gate best-path-decision.md, phase0-probe.md
07-04 Public docs site authored: 44 pages, 13 ADRs, 603 internal links, 0 broken (the DONE.md gap — finding PROC-3 — was backfilled 2026-07-06) ../site/, ../DOCS-PLAN.md
07-06 Propagation workflow (parallel session, 50 agents): the four probe corrections carried corpus-wide (spawn tool Agent/Workflow not Task; layout by directory shape; outbox → YAGNI; CD-1 verdict), zero residuals DONE.md entry
07-06 Full-corpus audit (six-part analysis persisted, self-contained) + red-team counter-analysis (deliberately merciless) corpus-audit-2026-07-06.md, red-team-audit-2026-07-06.md
07-06 Corpus cleanup & reorganization — AMEND-1…6 applied to the plan (dev-plan §2b) · supersession banners (v1 analysis/plan, due-diligence recommendation) · README.md/CLAUDE.md refreshed (PROC-1/2) · docs/site C-fixes · coverage bar normalized to >90% (OPEN-8 closed) · TODO.md rebuilt as the parallel-agent assignment board with disjoint lane ownership ../../TODO.md, DONE.md entry
07-06 v1/v2 roadmap — the last analysis (#9 of 9), authored on explicit owner instruction overriding red-team §11: kill checkpoints KC-0…KC-5 with default-death (Gate A sign-or-archive by 2026-07-13; v1.0 hard date 2026-12-01), phase-by-phase v1.0 schedule (Exit B absorbed into Phase 0 inside CD-8), earned-not-scheduled v2.0 alerts track, and the analysis freeze roadmap-v1-v2-2026-07-06.md
07-07 Analysis freeze exercised (request for #10 declined per playbook, answered with the KC table + existing-findings digest); state check: repo unchanged, Step 0 unsigned, 6 days to KC-0 WORKLOG.md 2026-07-07 entry

3. Document map — what to trust, in what order

Authority order when documents disagree (full reasoning: corpus-audit §2):

  1. phase0-probe.md — empirical measurements. Trust its numbers over any citation of them elsewhere (stale citations have already been caught, e.g. “18 nested” vs the true ~849).
  2. best-path-decision.md §6 — ruling strategy. Its six plan amendments (AMEND-1…6) were applied 2026-07-06 as dated strikethrough edits citing §6 (see development-plan §2b). If an un-updated copy elsewhere still conflicts, §6 wins.
  3. concept-analysis-v2.md — CD-1…CD-10 + LB1/LB2.
  4. development-plan.md — the 75-WP decomposition.
  5. TODO.md — live tracker.

Role of everything else: docs/ai/DESIGN.md = design basis (amended 07-06, now consistent); README.md here = index of the analysis chain; ../site/ = public-facing docs (44 pages; the 19 cross-page inconsistencies catalogued as C1–C19 in corpus-audit §6 — substantive ones fixed 2026-07-06, the rest were wording-level); ../due-diligence/ = rival evidence (its recommendation.md is obsolete — “fork simple10” was superseded by greenfield; bannered 2026-07-06, closing PROC-7); WORKLOG.md, CLAUDE.md, docs/ai/, *.docx = git-excluded but present on disk — read them, just never commit them.

The three closing documents from 2026-07-06 are the distilled current picture:

Post-freeze records (added after this snapshot; not analyses — permitted by roadmap §8):

4. Current truth snapshot

Decided and consistent corpus-wide: security posture (loopback-only · no browser-driven spawner · mandatory DASHBOARD_TOKEN

Effectively decided but formally unsigned (Gate A open): CD-1…CD-10, LB1 (JSONL-primary ingest), LB2 (personal-first/commercial-clean), and the stack: Fastify + TypeBox · better-sqlite3 (single driver) · React/Vite/D3 · pnpm monorepo (apps/server, apps/web, packages/shared, packages/core, packages/test-fixtures, hooks/) · Node 22.

Ruled and applied 2026-07-06 (was the biggest debt — corpus-audit AMEND-1…6): best-path §6 is now materialized in development-plan.md (§2b lists every edit), concept-analysis-v2.md (CD-9 dual-driver struck) and TODO.md: alerts off the v1.0 critical path (Phases 5–6 → post-1.0); WP-A8/A9 cut, A10 kept; WP-X11 deleted; single better-sqlite3 driver in WP-D2; WP-S1 slimmed / WP-S4 demoted to liveness-only; packages/core in the WP-F1 scaffold.

Scheduled with teeth (2026-07-06, pending Ivan’s two-line signature — roadmap §8): the KC-0…KC-5 kill-checkpoint calendar (roadmap §4, mirrored at the top of TODO.md), the 63-WP v1.0 committed path with per-phase dates + descope ladder + forbidden descopes (roadmap §5, Exit B absorbed into Phase 0 inside CD-8), and the KC-5-gated v2.0 alerts track (roadmap §6). Until signed, the dates are décor by the document’s own admission — but the analysis freeze (roadmap §8) binds sessions immediately: it was authored on the owner’s explicit order and only his explicit chat instruction overrides it.

Open with no owner (OPEN-1…9, corpus-audit §4.2): retention-TTL vs events_raw immutability (recommended: projection-only deletes + segment archival) · 'unknown' missing from agents.status CHECK · redaction Phase 1-vs-2 · browser token transport · hook-POST auth mechanism · pricing data source · app port · define-or-drop “OPCⁿ”. (OPEN-8, the ≥90/>90 coverage boundary, was closed 2026-07-06: the bar is >90%, per Ivan’s standing delivery bar; normalized corpus-wide.)

Formerly-stale files, all fixed 2026-07-06 — a fresh session can now take them at face value: project CLAUDE.md (stack-decided wording + SSE — PROC-2; the do-not-scaffold rule remains binding), root README.md (rewritten JSONL-primary — PROC-1), docs/due-diligence/recommendation.md (supersession banner — PROC-7), docs/DOCS-PLAN.md §5 X11 line (AMEND-3).

5. The pending decision — everything funnels through Ivan

Nothing below can be decided by an agent. As of 2026-07-06 Ivan owes the project exactly one choice; until he makes it, the correct agent behavior is §6.

6. Playbooks — “if Ivan says X, do Y”

Session rules that bind you regardless of the ask: chat with Ivan in Bulgarian; everything in the repo in English; never commit/push unasked; git-excluded files stay excluded; WORKLOG entry per meaningful task; run typecheck/lint/tests once code exists and report real results; the security invariants in §4 are non-negotiable in any code you ever write here.

7. Where this session’s full reasoning lives

The 2026-07-06 session delivered its analyses in Bulgarian in chat (ephemeral) and persisted everything substantive in English: the fair audit → corpus-audit-2026-07-06.md, the merciless pass → red-team-audit-2026-07-06.md, the narrative → WORKLOG.md (2026-07-06 entries), the milestone log → DONE.md. The three subagent sweeps behind the audit (44-page site digest; docx source-vs-digest diff; 33-decision consistency ledger) were session-scratchpad work — their conclusions are fully folded into the audit’s §5, §6 and appendices; no external artifact needs recovering. Nothing was committed; nothing in the plan of record was altered by the audits themselves except: the two audit files, this file, index/staleness fixes in README.md, and the DONE.md/ WORKLOG.md entries.