Files
ng-eventually/.tasks/todo/T01.g-adversarial-review-of-the-published-surface.md
T

3.6 KiB

id, title, parent, depends_on, created, claimed_by, claimed_at, blocked
id title parent depends_on created claimed_by claimed_at blocked
T01.g Adversarial review of the whole published surface T01
T01.a
T01.b
T01.c
T01.d
T01.e
T01.f
T01.h
T01.i
T01.j
T01.k
T01.l
2026-09-16 null null false

Description

An adversarial pass over the whole published surface — every symbol exported from packages/polyfill/src/index.ts, not only the ones this batch touched — trying to refute the parent task's success criterion: every published symbol either mirrors an SDK symbol in name, parameters and return, or carries a justified annotation.

Method, in this order. For each published symbol ask the two questions of .project/rules/nextgraph/no-divergence-from-nextgraph.md in their stated order: does the target do this? first, verified in nextgraph-rs or stated by its author; would an application have to unlearn it? second, and only to rank severity — never to authorise a divergence. Then, for the name and the shape (.project/rules/nextgraph/surface-mirrors-the-sdk.md): is this the target's own name, does the verb belong to something else upstream, is the parameter passed through or translated, is the return the SDK's.

Check every @provenance line against the CLAIM, not just against the tree. Same granularity on both sides: a function may cite a function; a composition, a pipeline or a policy cites nothing at level 2 and must say so. "The reference resolves" is not "the annotation is true" — that is precisely how readUnion survived. Use the mechanism as T01.a left it, including whatever the new kind for an announced-but-unwritten target requires as evidence.

Known, and not findings. The three open bug_ leaves in .project/concepts/app-contract/: bug_useshape-live-read-needs-a-newer-broker (MAJOR), bug_a-lost-inbox-watch-is-never-retried (MAJOR), bug_an-empty-inbox-list-can-mean-a-failure. Do not re-report them as new. Do report it if a change in this batch altered their status, or invalidated a workaround they or the contract publish — the useShape bug leaf and the contract's ## Non-guarantees both name watchShape and readUnion as the unaffected paths, and both were changed here.

Check the contract as delivered, since three children edited it in sequence: ## Surface matches the actual exports symbol for symbol; ## Change policy records a version whose bump level follows the contract's own rules for what actually changed; no section was half-edited or edited twice for the same change; nothing published is left described by a sentence that is no longer true.

Findings are leads, not mandates, and this child fixes nothing. A finding without a reproducible failure scenario or a checkable citation does not count. Report symptom, precise location (file:line, the failing assertion, the offending extract) and, where it is already known, the cause — but do not instrument, bisect or repair. Each fix is a new task.

Deliverable. In ## Result: findings by severity (blocking / major / minor), atomic, numbered 1.1, 1.2, … so they can be answered precisely. Neutral tone, no first or second person. One line of verdict on the test suites, not a list of what passes.

Pass condition for this child (it writes no code): run bun test, bunx tsc --noEmit -p packages/polyfill/tsconfig.json, bunx tsc --noEmit -p packages/polyfill/e2e/tsconfig.json and python3 ~/.claude/skills/concept/lint.py to establish the delivered state and report it verbatim; the review covers every symbol exported from packages/polyfill/src/index.ts, with the ones found clean stated as a count rather than an inventory.

Progress

Result