Repository navigation
v0.22.0 — the pack is asked for the way, not only for the symbol
Why update. If you are on 0.21.1 and GraphCompose 2.3 is what you build
against, this release is the difference between having its knowledge and being
able to ask for it. 2.3 ships a knowledge bundle — the API split per surface,
a routing table, a claims index — and 0.21.1 can import that bundle and then
not read it: api-query looked only for the flat api-surface.json the local
extractor writes, so a 2.3 pack reported no allow-list while carrying a larger
one than the line had ever had. Two gates went quiet the same way, announcing a
missing file for a pack that was newer than they could read, and the freshness
check could not see that a new minor line had shipped at all — it compared
against its own line only, so 2.3.0 was published and it went on reporting
"current".
What is new rather than repaired: routing. A surface says a symbol exists; it
cannot say which of three ways is right, and that is where wrong-API choices
come from — a skills list in two columns is a row with weights, and nothing in
a signature says so. --task answers that from the pinned line's own table.
To get it: update the plugin, then import the bundle from the GraphCompose
release you build against —
node tools/api-surface/import-bundle.mjs --from graph-compose-knowledge-<version>.zip.
The 2.3.0 pack is already in this release. Nothing in your workspace needs
migrating, and every older line keeps answering exactly as before: 1.6 through
2.2 stay on the flat layout, which is correct — they describe frozen releases
that will never get a bundle.
Added
-
--taskand--tasks: which way, not just what exists. A surface says a
symbol exists; it cannot say which of three ways is right, and that is where
wrong-API choices come from — a skills list in two columns is a row with
weights, and nothing in a signature says so.--taskslists the intents the
pack'srouting/tasks.jsonanswers;--task <id>returns the decision: the
recommended route and why, the alternatives with what each costs, the named
engine constraints, and the symbols to verify. A miss exits 3 with the near
matches, so a caller can branch on it. The route'sdocsanchors are paths in
the GraphCompose repository — the bundle ships knowledge, not prose — and the
answer says so rather than sending a reader after a file this workspace has
never had. A route with noconfirmedBycomes backconfirmed: false, so an
unreviewed recommendation does not read like a reviewed one. -
--surface, and the surface in every answer. A bundle pack splits the API
five ways, and which surface a type sits in decides whether a template may
call it at all.--surface <name>restricts the search; every answer now
carriessurface, andstabilitywhen it is not stable, because "does it
exist" and "is it something I should be calling yet" are the same question
asked twice and an answer omitting the second reads as a green light. It is
refused alongside--task: a route is not a search over surfaces, and a flag
accepted but not honoured makes an answer look filtered when it is not. -
A pack can carry knowledge without prose, and preflight says so. The
GraphCompose 2.3 bundle bringsapi/,routing/andclaims/and zero
pages, where the 2.2 pack has 29. Importing it made 2.3 a supported line —
correctly, its allow-list is the authority for 2.3 — and left the skills block
answeringloadingMap: null, which reads as "nothing to load" rather than
"this pack does not carry that half". A run proceeded without guidance instead
of going to find it.Preflight now reports
knowledgeOnlyand, underguidance, the nearest
older line that has prose: its loading map, its worked starting point for
the document kind, and a note saying the pinned line's allow-list still
decides what exists. Two things it will not do. It never points a line at
newer prose — borrowing downward risks a construction the pinned line has
replaced, which the drift gate polices, while borrowing upward names API the
line does not have at all. And it drops00-api-surface.mdfrom the borrowed
starting point: a worked starting point opens with the allow-list, and that
one file crossing a line is an agent authoring against the wrong closed set
while believing it has the right one.
Fixed
- The query CLI reads all three pack layouts.
api/+manifest.jsonfrom
a bundle import, the flatapi-surface.jsonfrom the local extractor, and
00-api-surface.mdfor packs that predate it — a bundle pack wins where both
are present. An old pack's answer is unchanged byte for byte:surfaceand
stabilityare omitted rather than nulled, so nothing reading these has to
learn a second shape.--surfaceon a flat pack, and--taskon a pack with
no routing table, each say which command would bring what is missing instead
of failing as if the pack were broken.excluded.jsonis never read as a
surface, so a deliberately excluded symbol is not reported as public API. create-3-author.mdasks for the route before choosing a primitive. It
told the agent to grep00-api-surface.md, which is the costapi-query
exists to remove, and said nothing about routing. It now opens with the five
rules — ask routing, takerecommended, honourconstraints, verify
symbolsagainst this line, and treatdocsas an anchor rather than a file
you have — and falls through to--searchwhen the line has no routing table.