Skip to content

feat(pack): knowledge-explorer — the vault is obligatory, the graph enriches it - #95

Merged
arozumenko merged 6 commits into
mainfrom
feat/knowledge-explorer-skill
Aug 13, 2026
Merged

feat(pack): knowledge-explorer — the vault is obligatory, the graph enriches it#95
arozumenko merged 6 commits into
mainfrom
feat/knowledge-explorer-skill

Conversation

@arozumenko

Copy link
Copy Markdown
Collaborator

A fifth Octobots pack skill for the question every role hits before acting on code it did not write: what do we already know about this area?

The premise

Two sources, and they are not equal.

.agents/knowledge/    the committed, verified vault     OBLIGATORY   read it, always
octograph             the co-change graph from git      OPTIONAL     use it where installed

The vault is the source of record. octograph is an instrument — it produces evidence the vault cannot hold (which files actually move together, who owns a path, whether a decomposition is clean). Where it is absent or its history is too thin, the answer is still valid, just thinner, and the skill says so rather than pretending.

They belong in one skill because of the loop between them: the graph is how the vault grows. A verified, durable, cross-role finding is promoted into the vault, so nobody pays for the discovery twice.

What the skill adds that docs/octograph.md cannot

The doc says what each command answers. The skill carries the discipline:

  • doctor before believing any zero. This repo reports degraded — 31 analysable commits, squash-merged — which makes an empty impact missing evidence, not evidence of absence.
  • Reading a zero. (no coupled files) has three indistinguishable causes: an excluded path, an untracked path, or support below minSupport. The skill gives the two commands that discriminate them, and the rule that an excluded path should be re-queried at its unexcluded twin.
  • Verify before reporting. The graph proposes; opening the file proves. support/nPMI travel with every claim.
  • Report your blind spots. Part 3 of the output contract — excluded paths, degraded history, absent instrument — is not optional. An answer that silently omits what it could not see reads as complete.

Measured against issue #60

Full record: docs/superpowers/spikes/2026-08-13-knowledge-explorer-vs-issue-60.md. Both pass conditions were tested, and the result is not the one the design predicted — it is recorded as it happened.

Issue #60 names four files. The true change set is seven. Of the three it misses:

Miss grep graph
packages/board/src/validate.ts:321 — the same rule in TypeScript, which the issue explicitly claims does not exist found found, rank 1, npmi=0.857
packages/board/test/validate.test.ts:210 — the test pinning it found missed
the pack version-bump cohort — 6 files obliged by editing any pack SKILL.md not found found, support=19–20

Grep wins on the textual rule sites; the graph wins on the process cohort. Its unique contribution is not "find the other file that says the same thing" — a good grep does that more cheaply. It is "changing this kind of file obliges this ritual", a coupling that exists only in commit history and shares no token with the change. That is the class of miss that ships a red CI run.

Pass condition 2 passed outright, and exercised a cause the design had not anticipated: impact on add-workflow.js returned zero, and the three-cause rule correctly classified it as a support-floor zero (3 commits, tracked, not excluded) rather than an exclusion.

The spec has been corrected where the run disproved it: .claude/ copies are gitignored install output in this repo, not change targets. The doubling is real only in a repo that vendors the pack — which is where #60 was originally hit.

Also filed

#94(no coupled files) meaning three different things is a defect in packages/graph/src/cli.ts, kept out of this change deliberately. On the board as octograph-code-architecture-graph/bugs/bug-impact-reports-an-excluded-path-as-uncoupled.

Wiring

  • OCTOBOTS_SKILLS gains "knowledge-explorer"; the four parameterised convention tests apply to it automatically.
  • Pack version 49 → 50 as one unit: five SKILL.md frontmatter lines, three hand-edited banners, the regenerated graph/octograph.mjs, and its hash in graph-payload-versions.json.
  • Each of the four sibling skills names it at the moment it hits the question — pointers, not gates — pinned by a new test, so a future skill cannot go unreferenced the way this one nearly did.

Verification

pnpm build && pnpm typecheck && pnpm lint && pnpm test — all green. 1,278 tests: graph 565, extension 401, board 269, tokenomics 43.

🤖 Generated with Claude Code

arozumenko and others added 6 commits August 13, 2026 09:25
…nriches it

Design for a pack skill that makes "what do we already know about this area"
a discipline rather than thirty greps: .agents/knowledge/ as the mandatory
tier, octograph as an optional instrument, and the promotion loop that lets
graph findings grow the vault.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…nriches it

A fifth pack skill for the question every role hits before acting on code it
did not write: what do we already know about this area?

Two tiers, and they are not equal. .agents/knowledge/ is the source of record
and is never skipped. octograph is an instrument — it produces evidence the
vault cannot hold (which files actually move together, who owns a path,
whether a decomposition is clean), and where it is absent the answer is still
valid, just thinner, and the skill says so.

The discipline is the part docs/octograph.md cannot carry: run doctor before
believing any zero, and know that `(no coupled files)` has three
indistinguishable causes — an excluded path, an untracked path, or support
below minSupport. Measured here, `impact` on the .claude/ copy of validate.js
returns nothing while the pack copy of the same file returns its whole change
set, because .claude/ is excluded by default.

Pack version 49 -> 50 across all five SKILL.md files, the primer, both
tokenomics markers, and the regenerated graph payload with its hash.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A skill nothing points at is a skill nothing invokes. Each sibling names it at
the moment it hits the question: mission-planner before decomposing,
workflow-designer before parallelising, mission-execution before the first
edit, the gate at the QA phase. Pointers, not gates — the reader still decides
whether the question is worth a query.

Pinned by a test, so a fifth skill cannot go unreferenced the way this one
nearly did.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The result is not the one the design predicted, so it is recorded as it
happened. Grep beats the graph on #60's textual rule sites — including
packages/board/src/validate.ts, the fifth site the issue itself missed, which
grep reaches only because the doctrine phrase was copied verbatim. The graph's
sole unique contribution is the pack version-bump cohort at support=19-20: six
files sharing no token with the change, invisible to any search term, and the
class of miss that ships a red CI run.

Also corrects the spec: .claude/ copies are gitignored install output here,
not change targets. The doubling is real only in a repo that vendors the pack.

Bug filed on the board and mirrored to #94: `(no coupled files)` means three
different things and the CLI distinguishes none of them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…r gap it exposed

Two follow-ups from the #60 spike, both of which the skill itself asked for.

The vault gains the finding the graph was uniquely able to produce: editing
any pack payload obliges nine version markers, a regenerated bundle and a
recorded hash, because packStatus accepts no partial state. The pieces were
each documented; the obligation as a whole was not, which is why it gets
rediscovered per author. That is the skill's own loop closing — the next
reader gets it from tier 1 without spending a query.

And the query ladder now says to run impact on the doctrine file as well as
the code file. Process obligations attach to a KIND of file, so they are
reachable only from that file and never from the change that triggers them —
which is exactly how the cohort stayed invisible to grep.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@arozumenko

Copy link
Copy Markdown
Collaborator Author

Two follow-ups added, both of which the skill itself asked for.

The vault gains the finding only the graph could produce. .agents/knowledge/architecture/pack-version-is-one-unit.md records the version cohort as one obligation: nine markers, a regenerated bundle, a recorded hash, and no partial state accepted by packStatus. The individual pieces were each already documented — in graph-payload-versions.json's _why, in graph-payload.test.ts's regression comment — but nothing stated the obligation as a whole, which is why it gets rediscovered per author. This closes the skill's own loop: the next reader gets it from tier 1 without spending a graph query.

The query ladder gained the rule the spike exposed. Run impact on the doctrine file as well as the code file. Process obligations attach to a kind of file, so they are reachable only from that file and never from the change that triggers them — which is precisely how the cohort stayed invisible to grep. A sample of one, but the mechanism is not accidental.

No version re-bump: v50 is unreleased on this branch, and the payload hash covers octograph.mjs only, not SKILL.md content. Extension suite still 401 passing.

@arozumenko
arozumenko merged commit a23bcfb into main Aug 13, 2026
2 of 3 checks passed
arozumenko added a commit that referenced this pull request Aug 13, 2026
… fired

The 2026-08-12 decision was mitigate-don't-chase, with an explicit trigger:
escalate if a `failed TWICE` ever lands. One landed, on PR #95, a pack/docs
diff touching no packages/graph source.

The mitigation did its job and the evidence it captured undermines it. The
before and after state dumps are byte-identical, so nothing changed between
attempts — the repo is left persistently broken, not momentarily inconsistent,
and no retry budget can help. `error: bad tree object HEAD` is a fourth shape,
and with status and rev-list both dead while HEAD, refs and .git are intact,
every shape so far points at the object store rather than the refs.

The title's premise is also now wrong: a second, one-commit fixture broke in
the same run. Whatever this is, it is not specific to the heaviest fixture.

Escalation itself is left to whoever owns packages/graph — it is a decision
about several hundred CI runs, not a call for the session that tripped it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant