Skip to content

docs(reference): reference IA completeness, README truth, and CLI verb coverage - #1541

Merged
rickylabs merged 11 commits into
mainfrom
docs/1377-reference-ia-readme-truth
Aug 12, 2026
Merged

docs(reference): reference IA completeness, README truth, and CLI verb coverage#1541
rickylabs merged 11 commits into
mainfrom
docs/1377-reference-ia-readme-truth

Conversation

@rickylabs

@rickylabs rickylabs commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Summary

The content half of #1377: give every publishable package a reference page, stop the docs asserting
things that are not true (a generator that does not exist, a scaffold file count that is not
authoritative, two deploy commands described as unwired that are implemented), and document six CLI
verbs that had no prose anywhere.

This PR is predominantly documentation, but it is not documentation-only, and the earlier
claim that it changed no source outside README.md was stale. The deliberate non-prose edits, all
of them intentional and each verified:

File Change Why it is here
packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts 5 lines, comment text only — a quality-allow: reason appended to each of five @ts-expect-error directives Remediation for the authoritative IMPL-EVAL FAIL_FIX. Not authored by this PR's content work: the blanket type-fixture exemption was removed on main and reached this branch through the merge that brought in the #1374 compile gate. deno check on the fixture exits 0, which proves every directive is still needed — the negatives still fail to compile, so the markers changed what the scanner reports, not what the compiler does.
docs/site/_data/xref.ts +11/−3 — four registry entries added (32 → 36) plus comment corrections Executable. The four new plugin-*-core pages had no ref: xref keys, so ref:plugin-sagas-core and its siblings would not have resolved. Folder-derived nav had made them visible but not linkable.
docs/site/_data.ts 1 line — reference-lane subtitle "Every symbol, generated""Every published symbol" Rendered site copy, not a comment. It asserted the same false generation provenance this PR removes elsewhere; leaving it would have contradicted the corrected index on the lane header itself.
docs/site/_components/nextPrev.vto 1 line, comment only Same provenance correction inside a template comment.

Everything else is prose, reference pages, two READMEs, and run artifacts. No plugins/** change. No
deno.lock change. No generated asset regenerated here
— the stale MCP agent-docs corpus is #1531
and is deliberately untouched.

Scope

Slices

  • S1 four -core reference pages + reference index truth/convention — e22a2f952
  • S2 packages/sdk/README.md — golden-path query dialect — 68cf6f2e5
  • S3 root README.md — scaffold count and install specifier — 617b74884
  • S4 CLI reference — six verbs, and the deploy surface — f3893df5b

Validation

Baselines captured at cd24e1679 before any edit; both docs gates were already green, so the
deltas below are attributable to this PR.

Gate Command Exit Result
Internal doc links deno task docs:links 0 docs=102 broken-links=0 broken-anchors=0 orphans=0
Docs accuracy deno task docs:accuracy 0 PASS — published source pages 192 → 196, one per new reference page
Docs source format docs/site/_plugins/check-source-format.ts . 0 Docs source format: OK
Code quality deno task quality:gate 0 doctrine readiness FAIL=0 for every package; WARN/INFO all pre-existing, none in a file this PR touches
Publish dry-run deno task publish:dry-run 0 Success Dry run complete
Markdown format deno fmt README.md packages/sdk/README.md 0 reformatted, --check clean, edited passages re-read after the rewrap
Reference-page existence own measurement 31/35 → 35/35 publishable members have a page

#1417 watch — the side effect did not occur. git status --short immediately after
publish:dry-run was empty: no catalog-backed manifest rewritten, nothing to revert, deno.lock
untouched by this PR.

On the deno fmt gate. It splits by path. docs/site/**/*.md exits 1 with
No target files founddocs/site/deno.json fmt.exclude lists **/*.md, and an exclude beats
an explicit path argument; check-source-format.ts is the real authority there. README.md files
are formatted by an explicit path (exit 0) even though the root fmt.include never discovers
them. Recorded as DR-4.

Harness

  • Run dir: .llm/runs/docs-1377-content--leaf/
  • Phase: impl — four [PHASE: IMPL] comments below, one per slice, with pasted exit codes.
  • PLAN-EVAL: N/A. The plan is the orchestrator's slice brief; the decision-heavy questions (path
    convention, gate shape) are explicitly withheld from this slice.
  • Generator only. A separate opposite-family Codex session audits the full changeset, then a Fable
    prose polish. This PR does not self-certify and stays draft.

Drift / Debt

Full log in .llm/runs/docs-1377-content--leaf/drift.md.

  • DR-1 (fixed) — reference/index.md claimed the pages "are generated from the source code with
    deno doc, so they always describe the published surface". Nothing writes into
    docs/site/reference/; every tooling reference to that path reads or checks it. The second half
    was the damaging one — it asserted a currency guarantee nothing provides.
  • DR-2 (not fixed) — the same claim survives in reference/plugin-ai-core/index.md:10 and
    plugin-auth-core/index.md:9. One line each, outside this slice's footprint.
  • DR-3 (not fixed, gate-PR input) — check-accuracy-and-discoverability.ts:126 hardcodes
    docs/site/reference/sagas/index.md, so it is a second gate bound to the short path. docs(reference): publish-readiness paths still disagree with the plugin-core reference IA, and public README drift remains #1377
    names only publish-readiness.ts.
  • DR-4 (not fixed) — deno fmt coverage is split as described above, and no discovery-based
    gate formats README.md at all.
  • DR-5 (not fixed) — maintainer-command-tree.ts:32 reports .version('1.0.0') against
    CLI_PACKAGE_VERSION. Source, not docs.
  • DR-6 (not fixed) — deno task docs:readme:check is red on main: packages/bench/README.md
    missing ## Install. Pre-existing, quality(docs): docs:readme:check is a dead gate — checker/template/house-style three-way divergence #767's scope.
  • DR-7 (not fixed) — emit is unreachable from the public CLI. Advertised and implemented on
    the compose, cloud, and service deploy adapters, and it even has a router description, but it is
    absent from ROUTED_OPERATIONS (target-deploy-command.ts:15-23). So netscript deploy list
    reports an operation nobody can invoke — the inverse of the honesty rule
    service-deploy-target.ts:14-20 states for rollback/secrets. Source change; worth its own
    issue.
  • DR-8 (resolved by measurement) — the brief's second "wrong claim" was not wrong. See below.

One instruction deliberately not followed

The brief named two false deploy claims to correct. Only one was false.

reference/cli/commands.md:209 says the cloud targets share "the same three-verb lifecycle —
plan, up, down". The CLI verb surface is the intersection of an adapter's advertised
operations with the router's ROUTED_OPERATIONS, and emit is absent from the latter — so
AspireCloudDeployTarget's advertised plan · emit · up · down yields exactly three commands. The
sentence is correct and is preserved verbatim; "fixing" it would have shipped a new error in
place of a true statement. The surrounding section is rewritten for coverage (it now names
docker/compose, their two extra verbs, and why the lists differ).

cli-reference.md:246-249 — "deploy docker and deploy compose … are not wired — they only print
help" — was false and is corrected: five working verbs each, routed to an adapter whose handlers
are all implemented. The bare group prints help because every command group does.

By the same measurement, #1377's own "five-verb surface" wording is correct, and the research pass
that corrected it to six was counting advertised operations rather than commands.

Definition of Done

  • Every effective-publish workspace member has docs/site/reference/<segment>/index.md (35/35,
    measured before and after)
  • No page describes a symbol its package does not export — every root-surface table is derived
    from deno doc --json over the package's declared exports and is exhaustive against it
    (41 / 51 / 106 / 32 rows)
  • The reference index no longer claims the pages are generated, and records the page-path
    convention the site follows today as a description rather than a rule
  • packages/sdk/README.md leads with createQueryFactories; createServiceQueryUtils appears
    only as the narrower non-golden-path helper
  • Root README.md carries no hardcoded scaffold file/directory count and no unexplained
    <version> placeholder
  • agent drift, plugin ai, deploy desktop, deploy package-cli, deploy list, and
    config list are documented in the CLI reference
  • The deploy docker / deploy compose surface is documented as what the source actually
    exposes, and the one genuinely false claim (cli-reference.md:246-249) is corrected
  • docs:links, docs:accuracy, check-source-format, quality:gate, and publish:dry-run all
    green on the final tree, with exit codes pasted per slice

Adds the four missing `-core` reference pages so the reference IA covers
35/35 effective-publish workspace members instead of 31/35:
plugin-sagas-core, plugin-streams-core, plugin-triggers-core,
plugin-workers-core. Root-surface symbol tables are exhaustive against
`deno doc --json` for each package's declared exports (41 / 51 / 106 / 32
rows), and every subpath entrypoint carries its measured export count.

Also corrects two claims in the reference index. It said these pages "are
generated from the source code with `deno doc`, so they always describe the
published surface" — nothing in the repository writes into
docs/site/reference/; every tooling reference to that path reads or checks
it. The pages are hand-written, and saying otherwise implied a currency
guarantee that does not exist. The index now says so, and records the page
path convention the site actually follows today: name-exact for 31 members,
with the four deployable plugins dropping the `plugin-` prefix. That is a
description, not a rule — reconciling the two forms is a separate decision.

Refs #1377

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5
@rickylabs rickylabs added this to the 0.0.6 milestone Aug 12, 2026
@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: IMPL] S1 — reference IA completeness + reference index truth

Commit e22a2f95217e0dff429b598e6368a0341ee7dedb. The reference IA now covers every publishable
package, and the index no longer claims a generator that does not exist.

Scope

New pages (hand-written, derived from deno doc --json over each package's declared exports):

  • docs/site/reference/plugin-sagas-core/index.md
  • docs/site/reference/plugin-streams-core/index.md
  • docs/site/reference/plugin-triggers-core/index.md
  • docs/site/reference/plugin-workers-core/index.md

Edited: docs/site/reference/index.md.

The generator question — resolved before authoring

The brief required settling whether a generator writes these pages. It does not. Every tooling
reference to docs/site/reference/ is a reader:

Location Role
.llm/tools/docs/check-exports-drift.ts:17-80 checks 8 hardcoded pages against declared entrypoints
.llm/tools/docs/check-accuracy-and-discoverability.ts:29,:126 reads reference/sdk/ and reference/sagas/
.llm/tools/release/publish-readiness.ts:302 asserts a page path exists
packages/mcp/tests/registry_test.ts:86,:121 reads reference/mcp/index.md
.llm/runs/beta5-impl--supervisor/slices/479-ai-docs/workflow.js:136-138 a past authoring run that hand-wrote three reference pages

The only deno doc consumers in tooling are run-deno-doc-lint.ts (a --lint runner) and
release/surface-diff.ts (--json surface snapshots). Neither emits Markdown.

So the index's claim — pages "are generated from the source code with deno doc, so they always
describe the published surface
" — was false in both halves, and the second half is the damaging
one: it asserts a currency guarantee nothing provides. Corrected rather than left standing under four
new hand-written pages.

Symbol-table completeness

Root-surface tables are exhaustive against deno doc --json for each package's declared exports;
grouped table rows sum to the reported export count:

Package Root exports (deno doc) Rows on page
@netscript/plugin-sagas-core 41 41
@netscript/plugin-streams-core 51 51
@netscript/plugin-triggers-core 106 106
@netscript/plugin-workers-core 32 32

Each page also carries an Entrypoints table with the measured export count for all 19 / 4 / 12 / 17
declared subpaths.

Path convention — described, not decided

Measured across the workspace: 35 effective-publish members; 31 pages at the name-exact
segment (@netscript/<x>/reference/<x>/); 4 exceptions, all deployable plugins dropping
the plugin- prefix (@netscript/plugin-sagas/reference/sagas/, likewise streams / triggers /
workers). Their -core counterparts are name-exact — which is what makes the IA internally
inconsistent rather than uniformly divergent.

The index records exactly that and states it is a description of today's site, not a rule to follow
when the two forms disagree. The alias-vs-move decision is untouched.

Gates

Baselines were captured at cd24e1679 before any edit, so the deltas are attributable.

Gate Command Exit Before After
Internal doc links deno task docs:links 0 broken-links=0 broken-anchors=0 orphans=0 unchanged, docs=102
Docs accuracy deno task docs:accuracy 0 PASS (… 192 published source pages …) PASS (… 196 published source pages …)
Docs source format docs/site/_plugins/check-source-format.ts . 0 Docs source format: OK Docs source format: OK
Reference-page existence own measurement 35 members, 4 missing 35 members, 0 missing
$ deno task docs:accuracy
docs accuracy: PASS (4 saga pages, 196 published source pages, one query dialect exception page,
storefront worker boundary, spawn contract, 8 preferred paths, 18 CLI mutation families,
3 valid @netscript/fresh root imports checked)
$ echo $?
0

deno fmt on the five touched files exits 1 with error: No target files found
docs/site/deno.json excludes **/*.md from fmt, and the root fmt.include covers only
packages/** / plugins/** TypeScript. The docs-site source-format checker is the real authority
here and is run in its place; recorded as DR-4.

Next

S2 packages/sdk/README.md, then S3 root README.md, then S4 the CLI reference.

rickylabs and others added 2 commits August 12, 2026 11:06
jsr-package-settings.json sets readmeSource: "readme", so this file is
what a consumer sees on JSR — and it led with the dialect #1373 demoted.
`createQueryFactories` appeared only in the export table, never in prose,
while the "Why teams use it" bullets front-loaded `createQueryFactory`
(the single-resource form) and listed `createServiceQueryUtils` as an
equal peer of `createNetScriptQueryClient`.

Leads with `createQueryFactories` and its `queryOptions(input)` shape.
`createServiceQueryUtils` stays documented, because `defineServices`
returns `queryUtils.*` built from it, but as the narrower helper it is:
`queryOptions({ input })`, no server KV tier. The new section states the
distinction the way docs/site/reference/sdk/index.md:111 states it,
rather than inventing a second framing.

Refs #1377

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5
…n count

The quickstart asserted "The scaffold reports 183 files, 44 directories"
while docs/site/quickstart.vto:51 tells readers the opposite — that the
totals vary with the database, service, editor, and agent-tooling options
and that the printed result, not a static number in a guide, is the
authority. A number frozen in a README is wrong for every reader who
picked different options, and silently wrong for everyone once the
scaffold changes. Removed; the README now says the scaffold prints its
own totals and why they vary.

Also resolves the dangling `jsr:@netscript/cli@<version>` in the install
line. The site derives its specifier from packages/cli/deno.json
(_data.ts:30-33); a static README cannot, so it now says explicitly what
the reader substitutes and where to find it, and notes that bare
`jsr:@netscript/*` specifiers do not resolve on the pre-release line.

Refs #1377

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5
@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: IMPL] S2 + S3 — README truth (packages/sdk/README.md, root README.md)

Commits 68cf6f2e5c (S2) and 617b74884 (S3). Pushed together; gated together because
quality:gate and publish:dry-run are whole-workspace verdicts.

S2 — packages/sdk/README.md

jsr-package-settings.json:6 sets readmeSource: "readme", so this file is the JSR landing
page. It taught the demoted dialect: the "Why teams use it" bullets front-loaded createQueryFactory
and listed createServiceQueryUtils as an equal peer of createNetScriptQueryClient, while
createQueryFactories appeared only in the export table at :158 and never in prose.

On the brief's "check whether that symbol name is even right": it is.
createQueryFactory is a real export (packages/sdk/src/query/query-factory.ts:41) — it is the
single-resource form, and createQueryFactories (:192) is the map form. The README's defect was
emphasis, not a wrong name. Both are still named; the golden path now leads.

createServiceQueryUtils is not removed, and removing it would have been wrong:
defineServices builds its returned queryUtils.* from it
(packages/sdk/src/presets/define-services.ts:9,:120), so the README's own Quick example already
uses both dialects. It is now framed as the narrower helper it is, in a new "Two query dialects"
section that matches docs/site/reference/sdk/index.md:111queryOptions({ input }) versus the
golden-path queryOptions(input), no server KV tier.

Call shapes verified against source rather than copied: the factory action is
queryOptions(props, options?) with key [resource, action, { input: props }]
(query-factory.ts:140-146).

The docs-accuracy gate requires createServiceQueryUtils to appear in exactly one page under
docs/site/ (check-accuracy-and-discoverability.ts:63-74). packages/sdk/README.md is outside
that walk root, so this section does not contend with the exception page — confirmed by the gate
still passing.

S3 — root README.md

  • :42 asserted "The scaffold reports 183 files, 44 directories" while quickstart.vto:51 says
    the totals vary with the database, service, editor, and agent-tooling options and that the
    printed result, not a static number in a guide, is the authority. The count is gone; the README
    now says the scaffold prints its own totals and why they vary. (:78-80 already described
    --dry-run as reporting the counts it would create — the two statements now agree.)
  • :36 printed a dangling jsr:@netscript/cli@<version>. The site derives its specifier from
    packages/cli/deno.json via _data.ts:30-33; a static README cannot, so it now states explicitly
    what the reader substitutes and where to find it, and notes that bare jsr:@netscript/* specifiers
    do not resolve on the pre-release line. Left as a placeholder deliberately rather than pinned to
    0.0.5 — a hardcoded version is the same defect as a hardcoded file count, one release later.

Not changed: :148 "29 packages and 6 first-party plugins". Re-measured — 35 effective-publish
members, of which 6 live under plugins/. The claim is correct.

Gates

Gate Command Exit Result
Code quality deno task quality:gate 0 pass; doctrine readiness reports FAIL=0 for every package, WARN/INFO only (all pre-existing, none in a file this PR touches)
Publish dry-run deno task publish:dry-run 0 Success Dry run complete
Markdown format deno fmt README.md packages/sdk/README.md 0 reformatted, then --check clean
Internal doc links deno task docs:links 0 broken-links=0 broken-anchors=0 orphans=0
Docs accuracy deno task docs:accuracy 0 PASS

#1417 watch — the side effect did not occur. git status --short immediately after
publish:dry-run was empty: no catalog-backed manifest was rewritten, nothing to revert, and
deno.lock is untouched by this PR.

Correction to a claim in this PR's own S1 comment

S1 reported that deno fmt does not govern the touched files. That is right for docs/site/**/*.md
(docs/site/deno.json fmt.exclude lists **/*.md, and an exclude beats an explicit path argument)
but wrong for README.md: an explicit path is formatted even though the root fmt.include does
not discover it. Both READMEs in this slice were formatted with deno fmt and re-verified with
--check (exit 0), and the edited text was re-read after the rewrap. drift.md DR-4 is corrected to
match.

Found, not fixed

deno task docs:readme:check fails at exit 1 on main and still does:
packages/bench/README.md is missing its ## Install section (1/36 non-conformant). Pre-existing,
not a file this PR touches, and README-standard conformance is #767's scope — recorded as DR-6 rather
than swept in.

Next

S4 — the CLI reference: six undocumented verbs and the two contradicted deploy claims.

…face

`agent drift`, `plugin ai`, `deploy desktop`, `deploy package-cli`,
`deploy list`, and `config list` had no prose anywhere under docs/site
(`plugin ai` had one incidental line in the plugin-ai page and appeared
in neither command reference). All six are now in the exhaustive command
reference; five also reach the curated CLI reference.

Corrects `cli-reference.md`'s claim that `deploy docker` and `deploy
compose` "are not wired — they only print help". They are wired: each
exposes plan/up/down/status/logs routed to AspireComposeDeployTarget,
whose handlers are all implemented. The bare group prints help because
every command group does, `deploy` itself included.

Deliberately does NOT change `commands.md`'s "three-verb lifecycle —
plan, up, down" for the five cloud targets, which the slice brief flagged
as a second wrong claim. It is right. The CLI verb surface is the
intersection of an adapter's advertised `operations` with the router's
ROUTED_OPERATIONS, and `emit` is absent from the latter
(target-deploy-command.ts:15-23) — so the cloud targets really do expose
three verbs. The section is rewritten to cover docker/compose and to
explain why the verb lists differ, but the true sentence is kept. See
drift.md DR-8; the unreachable `emit` is DR-7.

Two behaviours are documented from source rather than from a description
string: `agent drift record` refuses without a successful diagnostic
receipt under 15 minutes old, and `plugin ai` forwards raw arguments to
the installed plugin's own CLI, so its verbs are that plugin's to
document.

Refs #1377

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5
@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: IMPL] S4 — CLI reference: six verbs, and one of the two "wrong claims" turns out to be right

Commit f3893df5b.

The deploy verb surface, measured

The brief said to verify the operations array myself and not to copy #1377's wording. Doing so
contradicts the research correction I was given, so here is the full measurement.

There are two arrays, and only their intersection reaches the CLI.

1 — each adapter advertises operations:

Target(s) Source Advertised
compose, docker aspire-compose-deploy-target.ts:64-71 plan · emit · up · down · status · logs
kubernetes, azure-aca, azure-app-service, azure-aks, cloud-run aspire-cloud-deploy-target.ts:125 plan · emit · up · down
deno-deploy deno-deploy-target.ts:57-63 plan · up · down · status · logs
windows-service, linux-service service-deploy-target.ts:21-29 plan · emit · up · down · status · logs (+rollback/secrets when the ports are wired)

2 — the router walks a fixed candidate list and skips anything the adapter does not advertise
(target-deploy-command.ts:15-23, gate at :59):

const ROUTED_OPERATIONS: readonly DeployOperation[] = [
  'plan', 'up', 'down', 'status', 'logs', 'rollback', 'secrets',
];

emit is not in that list. So the CLI verb surface is the intersection:

Group CLI verbs Count
deploy docker, deploy compose plan · up · down · status · logs 5
deploy kubernetes · azure-aca · azure-app-service · azure-aks · cloud-run plan · up · down 3

What that means for the two claims

  • cli-reference.md:246-249 — false, corrected. "deploy docker and deploy compose … are not
    wired — they only print help" is wrong: five working verbs each, routed to
    AspireComposeDeployTarget, whose plan/emit/up/down/status/logs are all implemented
    (:91:152). The bare group does print help — but so does every command group in the CLI,
    deploy itself included. That is the default action, not a stub signal. The page now says so
    explicitly, so the same misreading does not recur.

  • reference/cli/commands.md:209 — CORRECT. Deliberately not "fixed". "the same three-verb
    lifecycle — plan, up, down" describes the five cloud targets, and three is exactly what
    they expose, because their advertised emit is never routed. The brief listed this as a second
    wrong claim to fix; applying that instruction would have replaced a true statement with a false
    one. The section is rewritten for coverage — it now names docker/compose, their two extra
    verbs, and why the verb lists differ — but the three-verb sentence for the cloud targets is
    preserved because it is true.

  • docs(reference): publish-readiness paths still disagree with the plugin-core reference IA, and public README drift remains #1377's "five-verb surface" for docker/compose is also correct, at the CLI level. The research's
    "it is six" counts the adapter's advertised operations. Both numbers describe real arrays; the
    disagreement was about which one a user types.

DR-7 — a real defect found on the way

emit is advertised and implemented on three adapters (compose/docker :96, cloud :162,
service SERVICE_DEPLOY_OPERATIONS), carries a router description
(OPERATION_DESCRIPTIONS.emit, :28), and is unreachable from the public CLI — the only other
'emit' under packages/cli/src/public/ is in a test. So deploy list reports an operation nobody
can invoke, which is the inverse of the honesty rule service-deploy-target.ts:14-20 states for
rollback/secrets ("LD-4: omit rather than silent no-op"). Either it belongs in
ROUTED_OPERATIONS or it should stop being advertised — a source change, out of scope here. The docs
written in this slice describe only the reachable surface.

Six verbs documented

Verb cli-reference.md reference/cli/commands.md
agent drift (+ drift record) yes yes, with the receipt gate
plugin ai yes yes, framed as a pass-through
deploy list yes yes, with the ten default targets
deploy desktop (+ package, release) yes yes
deploy package-cli yes yes, all four flags with defaults
config list — (the curated page has no config section) yes, incl. the (not read by the generator) marker

Two behaviours are documented from source rather than paraphrased from a description string, because
the description alone would mislead:

  • agent drift record refuses unless a diagnostic receipt for --resource exists, exited 0,
    and is under DIAGNOSTIC_RECEIPT_TTL_MS = 15 minutes (record-drift-flow.ts:5,:31-42). The
    same gate backs the MCP record_drift tool, so both surfaces refuse identically. A command
    described only as "record drift" reads as a note-taking verb; it is a gate.
  • plugin ai uses .useRawArgs(), consumes only --project-root, and forwards the rest to the
    installed @netscript/plugin-ai CLI in a child deno run (ai-plugin-command.ts:49-68,:92-113).
    Its verb vocabulary belongs to that plugin's release, so the reference points at
    netscript plugin ai --help rather than enumerating verbs that would go stale on someone else's
    schedule.

Gates

Gate Command Exit Result
Internal doc links deno task docs:links 0 docs=102 broken-links=0 broken-anchors=0 orphans=0
Docs accuracy deno task docs:accuracy 0 PASS (… 18 CLI mutation families …) — the mutation-map guard still green after the deploy-section rewrite
Docs source format docs/site/_plugins/check-source-format.ts . 0 Docs source format: OK
Six-verb coverage own grep over docs/site/ all six present
Stale-claim removal own grep over docs/site/ not wired / only print help gone

quality:gate and publish:dry-run are unchanged from S2/S3 — this slice touches no
packages/** file.

Next

Slice checklist complete. Handing to the opposite-family Codex audit. Staying draft; not marking
ready for review.

rickylabs commented Aug 12, 2026

Copy link
Copy Markdown
Owner Author

[LANE: docs_audit] [VERDICT: PASS]

Opposite-family, full-changeset audit of cd24e1679..HEAD for PR #1541.

Gate 9 follow-up decision

Selected (a): the separately published plugin-*-core pages are canonical for their exported
APIs. This follows #1377's one-reference-page-per-publishable-package premise and gives each
exhaustive symbol claim one maintenance location. The four deployable-plugin pages retain manifest
and integration coverage plus focused cross-package examples, but now link to their core pages
instead of duplicating the exhaustive core tables. The rule and rationale are recorded in the
reference index.

The Group F / T1 descriptions in plugin-triggers-core remain unchanged because they match
the authoritative published JSDoc; source cleanup is tracked separately in #1554.

Verdict

PASS after in-place documentation corrections.

This was the opposite-family docs_audit pass over cd24e1679..f3893df5b as one changeset,
followed by a complete rerun with the audit fixes applied and focused reruns after the
orchestrator's xref-registry and plugin/core canonical-location findings. The generator's worklog
and PR claims were treated as input only. Evidence below came from this Codex session's commands
against the checked-out public package, CLI, and documentation wiring surfaces.

Gate log

Gate Command(s) Scope Result Findings Proceeded
1. Links rtk proxy deno task docs:links Full documentation tree with the complete PR-C changeset and audit fixes applied PASS — exit 0; docs=102 broken-links=0 broken-anchors=0 orphans=0 No dangling links, anchors, or reported orphans. Yes — continued to the remaining gates.
2. Site build (cd docs/site && rtk proxy deno task build) Full Lume site, including all four new core-reference routes and changed navigation copy PASS — exit 0; source format OK; Lume generated 630 files; rendered-output check passed for 224 HTML files with four documented syntax allowances The recurring warning that docs/site/deno.json is outside the root workspace is non-fatal and pre-existing. Yes — no build fix required.
3. Internal wording git diff --unified=0 cd24e1679 -- README.md packages/sdk/README.md docs/site; changed-line extraction with sed; internal-term scan with rg Changed public lines only, including audit corrections PASS after fix — no internal identifier/process leak remains; the sole final lexical hit is public phrase “test harness” Found (US-2) and “tracked separately” in the changed reference index. The whole-site comparison also exposed legacy US-2/US-8 wording on reference claims touched while reconciling Gate 9. Yes — removed internal story/process wording in place.
4. Versioned specifiers Changed-line and whole-changed-file rg scans for bare jsr:@netscript/<package>; rg 'releaseSpecifier' docs/site/cli-reference.md; (cd /tmp && deno info jsr:@netscript/cli@0.0.5) All original public files in the PR-C changeset, plus root install instructions PASS — no newly introduced bare pinnable package specifier; site commands concatenate releaseSpecifier; root README explicitly requires substituting <version>; registry resolution of current 0.0.5 succeeded The root README is static Markdown, so <version> cannot use the site data variable; its substitution instruction and live release/JSR links make the placeholder explicit. Yes — no specifier correction required; retained the explicit placeholder.
5. Command/API accuracy deno run --no-lock --allow-read --allow-run=deno .llm/tmp/1377-doc-surface-audit.ts; fresh deno doc --json for every declared subpath and deno doc --filter checks for the described root semantics; live deno run -A packages/cli/bin/netscript.ts … --help matrix; deploy list --json; router-source inspection; targeted CLI tests (10 passed); SDK query-factory tests (3 passed); rtk proxy deno task docs:accuracy Every subpath/count and root table on the four exhaustive pages; all six newly documented CLI verbs, seven routed deploy families, deploy registry/router intersection, SDK query dialect, root README install target PASS after fixes — exact package results: sagas 19/19 entrypoints and 41/41 root symbols; streams 4/4 and 51/51; triggers 12/12 and 106/106; workers 17/17 and 32/32; zero missing/extra entrypoints or symbols, count mismatches, or kind mismatches. CLI behavior tests: 10/10; SDK query tests: 3/3; docs accuracy PASS. Found five documentation defects: nonexistent host-level plugin ai --help; deploy list advertised operations described as callable operations; desktop package target/default and release flags incomplete; jobs/tasks falsely split into handler-only versus entrypoint-only; root createWorkersRuntime falsely described as dependency-injected. Re-derived deploy surface as router intersection: Docker/Compose five verbs; five cloud targets three; emit advertised but unrouted. Yes — fixed all five in place, including exact desktop flags/defaults and the root-versus-/runtime workers distinction. Source defect emit remains out of scope.
6. Template/generated drift rtk proxy deno task check:assets-barrel; immediate git diff of generated barrels and rtk git status --short Repo-owned generated asset barrels affected by documentation/README assets PASS — exit 0 and no generated-barrel diff The gate did not alter any generated assets. A later targeted CLI invocation added one incidental deno.lock integrity row. Yes — removed the incidental lock entry and retained no cache/lock change.
7. Nav/front matter Front-matter inspection for the four new pages; publishable-page inventory; _config.ts/_data.ts nav-source inspection; deno eval comparison of docs/site/reference/ directories with exported ref: keys; Gates 1–2 rerun after the registry fix New core pages, folder-derived navigation, xref registry, front matter, and path convention PASS after follow-up fix — all four pages have layout: layouts/base.vto and exact package titles; Lume rendered all four; 35 publishable workspace members have pages; all 36 reference directories have exactly 36 registered ref: keys, with zero missing or extra entries The initial audit verified folder-derived nav but missed the separate hand-maintained REFERENCE_UNITS registry. The four new plugin-*-core pages lacked xref keys. _data.ts no longer contains a mirrored executable list; it explicitly delegates ref: keys to _data/xref.ts. Two comments in xref.ts also carried stale counts (32 and 28) and one retained false “generated” provenance. Yes — registered all four missing units, corrected both counts to 36, and documented that nav is independently folder-derived while the xref registry must stay aligned with docs/site/reference/.
8. Prose quality deno run --no-lock --allow-read docs/site/_plugins/check-source-format.ts .; heading-level Deno scan; deno fmt --check README.md packages/sdk/README.md; git diff --check cd24e1679; changed-line filler/callout/command scans; live command checks from Gate 5 All changed public prose, headings, tables, callouts, and shown commands PASS after fixes — source formatting OK; 45 changed Markdown files, zero heading jumps; both READMEs formatted; diff check clean The shown netscript plugin ai --help command failed because the host pass-through does not own --help. Root README still contained separate hardcoded plugin-file/helper totals. Desktop wording omitted explicit-target behavior. Yes — removed the invalid shown command, removed all hardcoded root-README file/directory/helper totals, qualified host targeting as the default, and added exact release setup flags.
9. Cross-page contradiction Whole-tree rg for generated-reference claims, deploy verb claims, SDK query shapes, scaffold totals, internal identifiers, and obsolete plugin/core convention statements; focused repo search for a reference writer; comparison to live surfaces from Gate 5; rtk proxy deno task docs:accuracy Every changed claim against the rest of the public documentation tree PASS after follow-up fixes — no obsolete “not a separate top-level reference entry,” “single-page internals convention,” or “not part of the public plugin contract” claim remains; docs accuracy exits 0 The rewritten index said reference pages are hand-written, while many existing public pages still called them generated. A later polish pass found a second contradiction the initial audit missed: the four deployable-plugin pages duplicated their core packages' exhaustive surfaces, and the sagas/streams pages denied those separate core references should exist. Historical _plan/ files retain their original planning language and are not public documentation. Yes — selected one publishable package/one canonical reference page, retained focused cross-package examples, replaced four duplicated core tables with links to the canonical plugin-*-core pages, recorded the rule and rationale in the index, and retained the saga spawn(...): never contract required by the accuracy gate. The Group F/T1 descriptions remain unchanged because they match authoritative published JSDoc and are tracked in #1554.

Fix disposition

Fixed in place:

  • removed internal (US-2) / process wording from the changed reference index;
  • corrected the CLI reference for the plugin ai pass-through, deploy registry versus routed verbs,
    desktop package/release flags and defaults, and five-versus-three routed deploy surface;
  • corrected workers builder and runtime-composition claims against deno doc and the live types;
  • removed all hardcoded file/directory/helper totals from the root README;
  • reconciled public “generated reference” wording with the verified hand-maintained Markdown model;
  • changed the public Reference-lane subtitle to “Every published symbol”; and
  • registered the four new core-reference pages in the hand-maintained ref: xref surface, verified
    exact 36-directory/36-key parity, and corrected its stale count/provenance comments;
  • made each separately published plugin-*-core page canonical for its own exports, replacing the
    four deployable-plugin pages' duplicated exhaustive tables with links and recording the convention
    in the reference index; and
  • removed incidental deno.lock churn.

Flagged but not fixed: none. The unrouted adapter emit operation remains the separately owned
source defect and was not changed. Historical files under docs/site/_plan/ are retained as records,
not treated as current public claims. The published-JSDoc terms Group F and T1 remain in the
triggers-core page pending the separately filed source correction #1554.

Audit-fix commits: 077a75716, 13b6d118a, ef2b05670, and eed51045f.

PR remains draft. This comment is the docs_audit lane record, not IMPL-EVAL; it does not mark the
PR ready and does not authorize merge.

@rickylabs

Copy link
Copy Markdown
Owner Author

Label correction: that audit is docs_audit, not IMPL-EVAL

The comment above is headed [PHASE: IMPL-EVAL] [VERDICT: PASS]. It is not an IMPL-EVAL. It is the docs_audit lane from .llm/harness/workflow/doc-audit.md — the opposite-family single-pass audit in the generate → audit → fix → polish pipeline, bound separately from formal_impl_evaluation in lane-policy.md.

The distinction is load-bearing, not pedantic:

  1. agentic:gh-pr merge gates on an IMPL/PLAN-EVAL PASS by default. A docs_audit comment wearing an IMPL-EVAL header could satisfy that gate with an artifact that is not what the gate is asking for — a false green in the merge tool, which is the defect class this milestone exists to end.
  2. Under the owner automation policy (2026-08-12), the initial IMPL-EVAL fires automatically on the draft → ready transition. This PR is still a draft, so no IMPL-EVAL has been triggered yet and none has run. Manual OpenHands dispatch is prohibited.

So the record for this PR is: docs_audit PASS (this pass), IMPL-EVAL not yet run. It will run automatically when the orchestrator flips the PR to ready, after the docs_polish pass.

Nothing about the audit's findings or evidence is in question — the gate log stands, and the five in-place corrections it made are exactly what the profile asks for. Only the header is wrong.

For the record, the audit's own work confirmed two things worth naming:

  • The author's root-README fix was incomplete. It removed the 183 files, 44 directories claim but left separate hardcoded plugin-file and helper totals. Same defect, same file, missed by the acceptance row's wording.
  • A shown command did not work: netscript plugin ai --help fails because the host pass-through does not own --help. That is a docs gate catching something no compile gate would — the command exists, the page was wrong about how to ask it for help.

Edit-only prose pass after the opposite-family audit (no technical claims
changed):

- unify the provenance sentence on the four new plugin-*-core pages with
  the template used across the 33 corrected pages
- remove three remaining internal (US-8) tokens from public reference
  prose (plugin-ai, sagas, streams)
- align two "generated" stragglers the audit's harmonization missed
  (cli-reference featureGrid body, commands.md intro) with the verified
  "API reference / written against deno doc" wording
- fix a garbled clause in the reference lane intro
- smooth the two audit-patched root-README sentences (scaffold totals,
  plugin-install output) and normalize "Substitute" to "Replace"

Refs #1377

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5
@rickylabs

Copy link
Copy Markdown
Owner Author

docs_polish — edit-only prose pass (commit 232daf0)

Final polish lane after the opposite-family audit. No technical claim, number, symbol, command, flag, path, or count was changed. 11 files, +16/−17 lines.

What changed

  • Provenance-sentence voice: the four new plugin-*-core pages used a second template ("written against the package's published exports and its deno doc surface") while the 33 corrected pages use "written against the package's public surface reported by deno doc". Unified the four new pages to the majority template — the mechanical corrections themselves read naturally in each page's flow and were left alone.
  • (US-8) internal tokens: removed the three remaining instances in public reference prose (plugin-ai, sagas, streams internals notes) — same class the audit's Gate 3 removed from changed lines.
  • "generated" stragglers: two instances the audit's Gate 9 harmonization missed — the cli-reference.md featureGrid body ("The generated package reference") and the commands.md intro ("the generated package API surface") — aligned with the verified "API reference / written against deno doc" wording.
  • Reference lane intro: fixed the garbled clause "reporting one that has is a bug worth filing" → "one that has is a bug worth filing".
  • Root README: smoothed the two audit-patched sentences (scaffold-totals paragraph restored to a single flowing sentence ending in "Follow them:"; plugin-install line now "every scaffolded plugin file and regenerated Aspire helper is itemized in its output"); "Substitute <version>" → "Replace <version>" to match the later "replace <port>".
  • packages/sdk/README.md: read in full; no edits — it is the strongest prose in the changeset and was left untouched (fmt-clean).

Deliberately left alone

Doubts returned to the audit lane (not fixed here)

  1. Cross-page contradiction: reference/sagas/index.md still says the core package "is not a separate top-level reference entry", and reference/streams/index.md cites "the single-page internals convention" — but this changeset adds dedicated /reference/plugin-{sagas,streams,triggers,workers}-core/ pages and registers them in xref. None of the four deployable-plugin pages link to their new core page. Whether the internals sections should now defer/link is an audit-lane fact decision.
  2. Internal codenames in symbol descriptions: plugin-triggers-core/index.md tables carry "Group F" (4×) and "T1" (2×) — internal work-group jargon opaque to a cold reader. These appear to mirror the verified deno doc JSDoc descriptions, so the fix belongs at framework source (out of this docs lane), not in the page.

Gates (final state)

Gate Result
rtk proxy deno task docs:links exit 0 — docs=102, 0 broken links/anchors
rtk proxy deno task docs:accuracy exit 0 — PASS
check-source-format.ts (docs/site scope) exit 0 — "Docs source format: OK"
deno fmt --check README.md packages/sdk/README.md exit 0
git status clean, no deno.lock churn

Note: running check-source-format.ts . from the repo root fails on three pre-existing .llm/runs/** artifacts (beta.10-era, e.g. beta10--orchestrator/slices/canvas-p1/HOLD.md) untouched by this changeset; scoped to the docs site tree — its intended domain and what the Lume build enforces — it passes.

PR stays draft; ready-for-review flip belongs to the orchestrator.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5

@rickylabs

Copy link
Copy Markdown
Owner Author

OPENHANDS_VERDICT: FAIL_FIX

IMPL-EVAL — PR #1541 (docs(reference): reference IA completeness, README truth, CLI verb coverage)

Evaluator session over trusted base e67c1ba… → head 0503991a… (immutable). No files edited,
nothing pushed. Findings are severity-ranked; the documentation work itself is accurate, but the
changeset carries one reproducible gate-breaking regression that must be fixed before merge.

FIND-1 (HIGH) — type-fixture exemption removal leaves the repo-wide quality gate red

.llm/tools/quality/scan-code-quality.ts deletes isTypeFixture(), but only the two fixtures this
PR touched were migrated to // quality-allow: markers (sdk-assignability_type.ts,
desktop-consumer_type.ts). The third previously-exempt fixture
packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts was left with 5 unflagged
negative-compile @ts-expect-error lines (lines 349, 365, 445, 465, 502).

  • Repro: deno task quality:scan:repo (packages + plugins) → ok:false, 5 ts-error-suppression
    findings in that file, exit 1.
  • Base control: running the base scanner over the same tree → exit 0. Clear regression.
  • Gate impact: .github/workflows/code-quality.yml code-quality-repo runs exactly this scan on
    push-to-main and the weekly schedule, so the first post-merge push (and each weekly scan)
    fails. The PR's own code-quality changed-file job passes only because this file is not in
    the PR's changed set — a false-done state: green on the PR, red on main.
  • Required action (implementer, not evaluator): add a reasoned // quality-allow: marker to each of
    the 5 negative-compile lines in sdk-client-contributions-rfc_type.ts (consistent with its two
    sibling fixtures), then re-run deno task quality:scan:repo (expect ok:true) and re-bundle
    agent-tools.generated.ts if the scanner itself changes.

FIND-2 (LOW) — no blocking documentation defects

Reference IA structure, deployable-plugin → -core page split (workers page: −553 lines, content
moved to plugin-workers-core/index.md), CLI verb/flags/defaults (package-cli, serve, list,
DEFAULT_DEPLOY_TARGETS = 10, routed verb sets, plugin ai pass-through), README truth (removed
fabricated 183 files / 44 directories, 4 plugin files, 12 Aspire helpers; version-pin note),
and sdk query-dialect claims (createQueryFactories, createServiceQueryUtils,
createNetScriptQueryClient, toClientKeyPrefix, bridgeInvalidation) all verified against
source. No dead links in sampled pages, no leftover US- markers.

Summary

Deliverable and verdict written to OPENHANDS_SUMMARY_PATH. Merge is blocked by FIND-1 (breaks
quality:scan:repo / code-quality-repo on main).

Copy link
Copy Markdown
Owner Author

[PHASE: IMPL]

Fixed the sole authoritative IMPL-EVAL blocker at head 0503991ab in commit 8376bd1bd.

Scope

Only the five existing @ts-expect-error directive lines in
packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts changed. Each now carries
a same-line, assertion-specific quality-allow reason. No assertion, scanner, blanket exemption,
docs content, lockfile, label, or evaluator state changed.

The five negative cases still compile as intended: the direct fixture check exits 0, which also
proves none of the @ts-expect-error directives became unused (TypeScript would report TS2578 if a
negative case stopped producing an error).

Raw gate output

rtk proxy deno task quality:scan:repo — exit 0
Task quality:scan:repo deno run --allow-read .llm/tools/quality/scan-code-quality.ts --root packages --root plugins
{"ok":true,"mode":"repository","scanned":["packages","plugins"],"findings":[],"allowCount":15,"allowances":[{"file":"packages/cli/src/public/features/root/public-command-dependencies.ts","line":363,"reason":"service manifest loader resolves a runtime module whose structural service contract is wider than the public loader port"},{"file":"packages/cli/src/public/public-api.ts","line":135,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/cli/src/public/public-api.ts","line":136,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/cli/src/public/public-api.ts","line":158,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/cli/src/public/public-api.ts","line":275,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/cli/src/public/public-api.ts","line":276,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/sdk/tests/type-fixtures/desktop-consumer_type.ts","line":42,"reason":"negative compile fixture proves contract input remains enforced without bindings.d.ts"},{"file":"packages/sdk/tests/type-fixtures/sdk-assignability_type.ts","line":62,"reason":"negative compile fixture requires TypeScript's expect-error directive to prove string input remains rejected"},{"file":"packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts","line":349,"reason":"negative compile fixture proves CreateDesktopServiceClientOptions rejects RFC HTTP contributions on the MessagePort transport"},{"file":"packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts","line":365,"reason":"negative compile fixture proves tuple validation rejects two contributions that both claim the auth context key"},{"file":"packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts","line":445,"reason":"negative compile fixture proves a generated client call rejects omission of options when contribution context contains a required key"},{"file":"packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts","line":465,"reason":"negative compile fixture proves mapped query-utils keys exclude a service whose contribution declares direct-only response caching"},{"file":"packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts","line":502,"reason":"negative compile fixture proves tuple validation rejects a seventeenth contribution while accepting sixteen"},{"file":"packages/fresh/src/application/builders/define-page/builder/route-support.ts","line":96,"reason":"DefinePageWithRouteContract preserves prior path/search output when either optional schema is omitted, but BoundRouteContract maps an omitted schema to EmptyRecord; TypeScript cannot equate those conditional states without presence-specific legacy builder overloads"},{"file":"plugins/workers/streams/producer.ts","line":52,"reason":"durable-stream mutation hook upstream type omits the worker execution extension fields"}]}
rtk proxy deno task quality:gate — exit 0
Task quality:gate deno task quality:scan && deno task arch:check
Task quality:scan deno run --allow-read .llm/tools/quality/scan-code-quality.ts
{"ok":true,"mode":"repository","scanned":["packages/cli/src","plugins"],"findings":[],"allowCount":7,"allowances":[{"file":"packages/cli/src/public/features/root/public-command-dependencies.ts","line":363,"reason":"service manifest loader resolves a runtime module whose structural service contract is wider than the public loader port"},{"file":"packages/cli/src/public/public-api.ts","line":135,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/cli/src/public/public-api.ts","line":136,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/cli/src/public/public-api.ts","line":158,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/cli/src/public/public-api.ts","line":275,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"packages/cli/src/public/public-api.ts","line":276,"reason":"public facade bridges duplicated internal and exported plugin port identities pending package-boundary unification"},{"file":"plugins/workers/streams/producer.ts","line":52,"reason":"durable-stream mutation hook upstream type omits the worker execution extension fields"}]}
Task arch:check deno task deps:check && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/plugin-auth-core && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/auth-workos && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/auth-better-auth && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/auth-kv-oauth && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root plugins/auth && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/plugin && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root plugins/workers && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root plugins/sagas && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root plugins/triggers && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root plugins/streams && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/plugin-sagas-core && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/plugin-triggers-core && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/plugin-workers-core && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/plugin-ai-core && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root packages/ai && deno run --allow-read .llm/tools/fitness/check-doctrine.ts --root plugins/ai
Task deps:check deno run --allow-read .llm/tools/deps/scan-jsr-centralization.ts --fail-on-violation && deno run --allow-read .llm/tools/deps/audit-file-link.ts --fail-on-violation && deno run --allow-read .llm/tools/deps/scan-npm-catalog-compliance.ts && deno task deps:check:zod
WARN DEPS-NPM-CATALOG packages/ai/deno.json:31 packages/ai uses npm:@tanstack/ai@^0.39.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/ai/deno.json:32 packages/ai uses npm:@tanstack/ai-anthropic@^0.15.13 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/ai/deno.json:33 packages/ai uses npm:@tanstack/ai-mcp@0.2.1 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/ai/deno.json:34 packages/ai uses npm:@tanstack/ai-openai@^0.15.10 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/bench/deno.json:15 packages/bench uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/cli/e2e/deno.json:14 packages/cli/e2e uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/cli/e2e/fixtures/desktop-native/src/router.ts:2 packages/cli uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/cli/e2e/fixtures/desktop-native/src/router.ts:2 packages/cli/e2e uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/cli/e2e/src/application/gates/scaffold/consume-flow-b-stream.ts:10 packages/cli uses npm:@opentelemetry/api@^1.9.0 outside package.json catalog: (catalog has ^1.9.1, inline use has ^1.9.0)
WARN DEPS-NPM-CATALOG packages/cli/e2e/src/application/gates/scaffold/consume-flow-b-stream.ts:10 packages/cli/e2e uses npm:@opentelemetry/api@^1.9.0 outside package.json catalog: (catalog has ^1.9.1, inline use has ^1.9.0)
WARN DEPS-NPM-CATALOG packages/cli/e2e/src/application/gates/scaffold/consume-flow-b-stream.ts:11 packages/cli uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/cli/e2e/src/application/gates/scaffold/consume-flow-b-stream.ts:11 packages/cli/e2e uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/cli/e2e/src/application/gates/scaffold/ui-ai-gates.ts:140 packages/cli uses npm:preact-render-to-string@^6.7.0 outside package.json catalog: (catalog has ^6.7.0)
WARN DEPS-NPM-CATALOG packages/cli/e2e/src/application/gates/scaffold/ui-ai-gates.ts:140 packages/cli/e2e uses npm:preact-render-to-string@^6.7.0 outside package.json catalog: (catalog has ^6.7.0)
WARN DEPS-NPM-CATALOG packages/cli/e2e/src/application/gates/scaffold/ui-ai-gates.ts:174 packages/cli uses npm:preact-render-to-string@^6.7.0 outside package.json catalog: (catalog has ^6.7.0)
WARN DEPS-NPM-CATALOG packages/cli/e2e/src/application/gates/scaffold/ui-ai-gates.ts:174 packages/cli/e2e uses npm:preact-render-to-string@^6.7.0 outside package.json catalog: (catalog has ^6.7.0)
WARN DEPS-NPM-CATALOG packages/contracts/deno.json:13 packages/contracts uses npm:@orpc/contract@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/fresh-ui/deno.json:19 packages/fresh-ui uses npm:preact@^10.29.2 outside package.json catalog: (catalog has ^10.29.2)
WARN DEPS-NPM-CATALOG packages/fresh-ui/scripts/build-tokens.ts:1 packages/fresh-ui uses npm:style-dictionary@5.4.4 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/fresh-ui/tests/registry/components/ui/desktop.test.tsx:2 packages/fresh-ui uses npm:preact-render-to-string@^6.7.0 outside package.json catalog: (catalog has ^6.7.0)
WARN DEPS-NPM-CATALOG packages/fresh-ui/tests/registry/islands/desktop-only.test.tsx:3 packages/fresh-ui uses npm:preact-render-to-string@^6.7.0 outside package.json catalog: (catalog has ^6.7.0)
WARN DEPS-NPM-CATALOG packages/fresh-ui/tests/runtime/accordion/accordion-render.test.tsx:2 packages/fresh-ui uses npm:preact-render-to-string@^6.7.0 outside package.json catalog: (catalog has ^6.7.0)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:39 packages/fresh uses npm:preact@^10.29.2 outside package.json catalog: (catalog has ^10.29.2)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:40 packages/fresh uses npm:preact-render-to-string@^6.7.0 outside package.json catalog: (catalog has ^6.7.0)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:42 packages/fresh uses npm:@durable-streams/state@^0.3.1 outside package.json catalog: (catalog has ^0.3.1)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:43 packages/fresh uses npm:@durable-streams/tanstack-ai-transport@^0.0.8 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:49 packages/fresh uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:50 packages/fresh uses npm:@preact/signals@2.9.2 outside package.json catalog: (catalog has 2.9.2)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:51 packages/fresh uses npm:@tanstack/ai@^0.39.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:52 packages/fresh uses npm:@tanstack/ai-preact@^0.10.1 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:53 packages/fresh uses npm:@tanstack/preact-query@^5.101.0 outside package.json catalog: (catalog has ^5.101.0)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:54 packages/fresh uses npm:@tanstack/query-core@^5.101.0 outside package.json catalog: (catalog has ^5.101.0)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:55 packages/fresh uses npm:@tanstack/react-db@^0.1.95 outside package.json catalog: (catalog has ^0.1.95)
WARN DEPS-NPM-CATALOG packages/fresh/deno.json:56 packages/fresh uses npm:vite@7.2.2 outside package.json catalog: (catalog has 7.2.2)
WARN DEPS-NPM-CATALOG packages/fresh/src/application/vite/vite.test.ts:367 packages/fresh uses npm:/preact@10.29.7/hooks outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/logger/deno.json:20 packages/logger uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/plugin-ai-core/deno.json:11 packages/plugin-ai-core uses npm:@orpc/contract@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/plugin-ai-core/deno.json:12 packages/plugin-ai-core uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/plugin-auth-core/deno.json:18 packages/plugin-auth-core uses npm:@orpc/contract@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/plugin-auth-core/deno.json:19 packages/plugin-auth-core uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/plugin-sagas-core/src/stores/prisma-saga-store_integration_test.ts:2 packages/plugin-sagas-core uses npm:@prisma/adapter-pg@7.8.0 outside package.json catalog: (catalog has ^7.8.0, inline use has 7.8.0)
WARN DEPS-NPM-CATALOG packages/plugin-workers-core/deno.json:34 packages/plugin-workers-core uses npm:@orpc/contract@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/plugin-workers-core/deno.json:35 packages/plugin-workers-core uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/plugin-workers-core/tests/executor/multi-runtime-task-executor_test.ts:1 packages/plugin-workers-core uses npm:@opentelemetry/api@^1.9.1 outside package.json catalog: (catalog has ^1.9.1)
WARN DEPS-NPM-CATALOG packages/plugin-workers-core/tests/executor/multi-runtime-task-executor_test.ts:2 packages/plugin-workers-core uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/plugin-workers-core/tests/streams/workers-streams_test.ts:1 packages/plugin-workers-core uses npm:@opentelemetry/api@^1.9.1 outside package.json catalog: (catalog has ^1.9.1)
WARN DEPS-NPM-CATALOG packages/plugin-workers-core/tests/streams/workers-streams_test.ts:2 packages/plugin-workers-core uses npm:@opentelemetry/context-async-hooks@^2.9.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/plugin-workers-core/tests/streams/workers-streams_test.ts:3 packages/plugin-workers-core uses npm:@opentelemetry/core@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/plugin-workers-core/tests/streams/workers-streams_test.ts:4 packages/plugin-workers-core uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/plugin/deno.json:28 packages/plugin uses npm:@orpc/contract@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/plugin/deno.json:29 packages/plugin uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/queue/adapters/amqp.adapter.ts:10 packages/queue uses npm:amqplib@^0.10.3 outside package.json catalog: (catalog has ^2.0.1, inline use has ^0.10.3)
WARN DEPS-NPM-CATALOG packages/queue/adapters/amqp.adapter.ts:11 packages/queue uses npm:amqplib@^0.10.3 outside package.json catalog: (catalog has ^2.0.1, inline use has ^0.10.3)
WARN DEPS-NPM-CATALOG packages/queue/adapters/postgres.adapter.ts:9 packages/queue uses npm:pg@^8.21.0 outside package.json catalog: (catalog has ^8.21.0)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:31 packages/sdk uses npm:@orpc/client@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:32 packages/sdk uses npm:@orpc/contract@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:33 packages/sdk uses npm:@orpc/openapi@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:34 packages/sdk uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:35 packages/sdk uses npm:@orpc/tanstack-query@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:36 packages/sdk uses npm:@orpc/zod@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:37 packages/sdk uses npm:@tanstack/db@^0.6.8 outside package.json catalog: (catalog has ^0.6.8)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:38 packages/sdk uses npm:@tanstack/query-core@^5.101.0 outside package.json catalog: (catalog has ^5.101.0)
WARN DEPS-NPM-CATALOG packages/sdk/deno.json:39 packages/sdk uses npm:@tanstack/query-db-collection@^1.2.1 outside package.json catalog: (catalog has ^1.2.1)
WARN DEPS-NPM-CATALOG packages/sdk/tests/type-fixtures/service-query-utils-upstream_type.ts:1 packages/sdk uses npm:@orpc/client@1.14.6 outside package.json catalog: (catalog has ^1.14.6, inline use has 1.14.6)
WARN DEPS-NPM-CATALOG packages/sdk/tests/type-fixtures/service-query-utils-upstream_type.ts:2 packages/sdk uses npm:@orpc/tanstack-query@1.14.6 outside package.json catalog: (catalog has ^1.14.6, inline use has 1.14.6)
WARN DEPS-NPM-CATALOG packages/service/deno.json:22 packages/service uses npm:@orpc/server@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/service/deno.json:23 packages/service uses npm:@orpc/openapi@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/service/deno.json:24 packages/service uses npm:@orpc/client@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/service/deno.json:25 packages/service uses npm:@orpc/zod@^1.14.6 outside package.json catalog: (catalog has ^1.14.6)
WARN DEPS-NPM-CATALOG packages/service/tests/hono-tracing_test.ts:2 packages/service uses npm:@opentelemetry/api@^1.9.1 outside package.json catalog: (catalog has ^1.9.1)
WARN DEPS-NPM-CATALOG packages/service/tests/hono-tracing_test.ts:3 packages/service uses npm:@opentelemetry/core@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/service/tests/hono-tracing_test.ts:4 packages/service uses npm:@opentelemetry/context-async-hooks@^2.9.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/service/tests/hono-tracing_test.ts:5 packages/service uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/telemetry/deno.json:28 packages/telemetry uses npm:@opentelemetry/semantic-conventions@1.41.1 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/telemetry/tests/adapters/otel_ai_telemetry_test.ts:2 packages/telemetry uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/telemetry/tests/adapters/otel_ai_telemetry_test.ts:6 packages/telemetry uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/telemetry/tests/hono/otel_middleware_test.ts:4 packages/telemetry uses npm:@opentelemetry/core@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/telemetry/tests/hono/otel_middleware_test.ts:5 packages/telemetry uses npm:@opentelemetry/context-async-hooks@^2.9.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG packages/telemetry/tests/hono/otel_middleware_test.ts:6 packages/telemetry uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG plugins/workers/jobs/job-tools_test.ts:2 plugins/workers uses npm:@opentelemetry/api@^1.9.1 outside package.json catalog: (catalog has ^1.9.1)
WARN DEPS-NPM-CATALOG plugins/workers/jobs/job-tools_test.ts:3 plugins/workers uses npm:@opentelemetry/context-async-hooks@^2.9.0 outside package.json catalog: (no root catalog entry exists)
WARN DEPS-NPM-CATALOG plugins/workers/jobs/job-tools_test.ts:4 plugins/workers uses npm:@opentelemetry/sdk-trace-base@^2.5.0 outside package.json catalog: (no root catalog entry exists)
Task deps:check:zod deno run --allow-read .llm/tools/deps/check-zod-alignment.ts
zod-alignment PASS instances=zod@3.25.76,zod@4.4.3 residual-v3=@ag-ui/core@0.0.52,@olli/kvdex@3.6.7
# Doctrine readiness — plugin-auth-core
  FAIL=0 WARN=2 INFO=1
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  WARN A8/AP-1/F-1: file is 519 lines (cap 500) — split into smaller single-reason files (src/contracts/v1/auth.contract.ts)
  INFO A9: docs/architecture.md missing — required when public symbols > 25
# Doctrine readiness — auth-workos
  FAIL=0 WARN=1 INFO=1
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  INFO A9: docs/architecture.md missing — required when public symbols > 25
# Doctrine readiness — auth-better-auth
  FAIL=0 WARN=1 INFO=1
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  INFO A9: docs/architecture.md missing — required when public symbols > 25
# Doctrine readiness — auth-kv-oauth
  FAIL=0 WARN=1 INFO=1
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  INFO A9: docs/architecture.md missing — required when public symbols > 25
# Doctrine readiness — auth
  FAIL=0 WARN=5 INFO=1
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  WARN F-16: directory has 13 immediate children; doctrine cap is 12
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (services/src/main.ts:54)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (scaffold.ts:23)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (cli.ts:18)
# Doctrine readiness — plugin
  FAIL=0 WARN=3 INFO=1
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  WARN F-16: directory has 17 immediate children; doctrine cap is 12 (src)
  WARN F-16: directory has 15 immediate children; doctrine cap is 12 (src/config/domain)
  INFO A9: docs/architecture.md missing — required when public symbols > 25
# Doctrine readiness — workers
  FAIL=0 WARN=9 INFO=2
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  WARN F-16: directory has 19 immediate children; doctrine cap is 12
  WARN F-16: directory has 19 immediate children; doctrine cap is 12 (worker)
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  INFO A12: package implements durable workflow concepts — verify state machine model is documented in docs/architecture.md
  WARN A13: Deno.exit/process.exit outside bin/ — crash boundaries must be explicit, throw a typed error instead (test-api.ts)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (services/src/main.ts:45)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/cli/official-sample-configuration.ts:409)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (jobs/health-check.ts:246)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (scaffold.ts:23)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (cli.ts:18)
# Doctrine readiness — sagas
  FAIL=0 WARN=8 INFO=2
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  WARN A8/AP-1/F-1: file is 374 lines (cap 300) — split into smaller single-reason files (services/src/routers/v1-types.ts)
  WARN F-16: directory has 15 immediate children; doctrine cap is 12
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  INFO A12: package implements durable workflow concepts — verify state machine model is documented in docs/architecture.md
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (services/src/main.ts:46)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/saga/saga.stub.ts:60)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/saga/saga.stub.ts:95)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (scaffold.ts:23)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (cli.ts:18)
# Doctrine readiness — triggers
  FAIL=0 WARN=13 INFO=2
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  WARN F-16: directory has 17 immediate children; doctrine cap is 12
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  INFO A12: package implements durable workflow concepts — verify state machine model is documented in docs/architecture.md
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/scheduled/scheduled.stub.ts:43)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/file-watch/file-watch.stub.ts:43)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/webhook/webhook.stub.ts:46)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/webhook/webhook.stub.ts:109)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (jobs/file-relay.ts:167)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (jobs/staged-cleanup.ts:72)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (jobs/file-import.ts:177)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (generic-webhook.ts:44)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (webhook-validate-data.ts:35)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (scaffold.ts:23)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (cli.ts:18)
# Doctrine readiness — streams
  FAIL=0 WARN=5 INFO=1
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/stream/stream.stub.ts:84)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/consumer/consumer.stub.ts:78)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (scaffold.ts:23)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (cli.ts:18)
# Doctrine readiness — plugin-sagas-core
  FAIL=0 WARN=2 INFO=2
  WARN A8/AP-1/F-1: file is 739 lines (cap 500) — split into smaller single-reason files (src/contracts/v1/sagas.contract.ts)
  WARN F-16: directory has 19 immediate children; doctrine cap is 12 (src)
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  INFO A12: package implements durable workflow concepts — verify state machine model is documented in docs/architecture.md
# Doctrine readiness — plugin-triggers-core
  FAIL=0 WARN=3 INFO=2
  WARN A8/AP-1/F-1: file is 722 lines (cap 500) — split into smaller single-reason files (src/contracts/v1/triggers.contract.ts)
  WARN F-16: directory has 13 immediate children; doctrine cap is 12 (src/ports)
  WARN F-16: directory has 15 immediate children; doctrine cap is 12 (src/runtime)
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  INFO A12: package implements durable workflow concepts — verify state machine model is documented in docs/architecture.md
# Doctrine readiness — plugin-workers-core
  FAIL=0 WARN=5 INFO=2
  WARN A8/AP-1/F-1: file is 305 lines (cap 300) — split into smaller single-reason files (src/domain/job-spec.ts)
  WARN A8/AP-1/F-1: file is 426 lines (cap 300) — split into smaller single-reason files (src/domain/task.ts)
  WARN A8/AP-1/F-1: file is 574 lines (cap 500) — split into smaller single-reason files (src/contracts/v1/workers.contract-definition.ts)
  WARN F-16: directory has 18 immediate children; doctrine cap is 12 (src)
  WARN F-16: directory has 15 immediate children; doctrine cap is 12 (src/executor/adapters)
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  INFO A12: package implements durable workflow concepts — verify state machine model is documented in docs/architecture.md
# Doctrine readiness — plugin-ai-core
  FAIL=0 WARN=1 INFO=0
  WARN A8/AP-1/F-1: file is 310 lines (cap 300) — split into smaller single-reason files (src/contracts/v1/ai.contract-schemas.ts)
# Doctrine readiness — ai
  FAIL=0 WARN=1 INFO=0
  WARN F-16: directory has 13 immediate children; doctrine cap is 12 (src/ports)
# Doctrine readiness — ai
  FAIL=0 WARN=5 INFO=1
  WARN A3: README has only 1 TS code fences — needs ≥ 2 (basic + advanced) for the 80% path
  INFO A9: docs/architecture.md missing — required when public symbols > 25
  WARN A13: Deno.exit/process.exit outside bin/ — crash boundaries must be explicit, throw a typed error instead (cli.ts)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (src/adapter/resources/chat-route/chat-route.stub.ts:41)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (scaffold.ts:40)
  WARN F-5/F-6: `export default` — JSR penalises (no auto-doc); use named exports (cli.ts:25)
deno run --allow-read --allow-run .llm/tools/run-deno-check.ts --root packages/sdk --ext ts,tsx — exit 0
{"source":{"mode":"selection","cwd":"/home/codex/repos/ns006-1377-content"},"command":"deno check --unstable-kv <files>","selection":{"filesSelected":78,"batches":1,"failedBatches":0},"summary":{"totalOccurrences":0,"uniqueOccurrences":0,"uniqueCodes":0,"uniquePaths":0},"groups":[]}
deno run --allow-read --allow-run .llm/tools/run-deno-lint.ts --root packages/sdk --ext ts,tsx — exit 0
{"source":{"mode":"command","cwd":"/home/codex/repos/ns006-1377-content","exitCode":0},"selection":{"filesSelected":78,"batches":1},"summary":{"totalOccurrences":0,"uniqueOccurrences":0,"uniqueRules":0,"uniquePaths":0},"groups":[]}
deno run --allow-read --allow-run .llm/tools/run-deno-fmt.ts --root packages/sdk --ext ts,tsx — exit 0
{"command":"deno fmt --check","cwd":"/home/codex/repos/ns006-1377-content","mode":"check","summary":{"filesSelected":78,"batches":1,"failedBatches":0,"findings":0,"ignoredFindings":0},"findings":[]}
rtk proxy deno task docs:links — exit 0
Task docs:links deno run --no-lock --allow-read .llm/tools/validation/check-internal-doc-links.ts --pretty
# Internal-doc link / anchor / orphan check
  docs=102 broken-links=0 broken-anchors=0 orphans=0 (orphans informational; pass --check-orphans to enforce)
  OK - no broken links, anchors, or orphans.
rtk proxy deno task docs:accuracy — exit 0
Task docs:accuracy deno run --no-lock --allow-read --allow-env --allow-run=deno .llm/tools/docs/check-accuracy-and-discoverability.ts
docs accuracy: PASS (4 saga pages checked for stale claims, 196 published source pages, one query dialect exception page, mutation-map columns, 3 valid @netscript/fresh root imports checked)
rtk proxy deno task docs:snippets — exit 0
Task docs:snippets deno run --allow-read --allow-write --allow-run .llm/tools/docs/check-snippets.ts
docs snippets: PASS scanned=578 ts=211 tsx=77 typescript=7 ts_like=295 tier1=35 checked=21 exempt=14 outside_floor=260 malformed=0
web-layer/examples.md:90 — uses cached values supplied by the surrounding page loader
web-layer/form.md:29 — counter-example intentionally omits bare Fresh setup
web-layer/form.md:279 — partial field-array fragment uses the surrounding form state
web-layer/form.md:353 — partial JSX fragment uses the surrounding form state
web-layer/query-bridge.md:29 — counter-example intentionally omits bare Fresh setup
web-layer/query-bridge.md:42 — counter-example intentionally omits bare TanStack setup
web-layer/query-bridge.md:108 — pseudocode compares key shapes rather than defining runnable values
web-layer/query-bridge.md:124 — partial invalidation fragment uses surrounding query utilities
web-layer/query-bridge.md:139 — partial invalidation fragment uses surrounding cache values
web-layer/query-bridge.md:164 — partial builder chain uses page-local declarations omitted here
web-layer/query-bridge.md:198 — object-shape pseudocode documents generated query options
web-layer/query-bridge.md:208 — partial component uses page-local types and view components
web-layer/query-bridge.md:257 — partial builder chain continues from surrounding page code
web-layer/query.md:71 — uses cache entries defined earlier in the surrounding application
deno check --unstable-kv packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts — exit 0

Result

  • quality:scan:repo: "ok":true, zero findings, allowCount:15
  • scoped check/lint/format: 78 SDK files, zero failures/findings
  • docs unchanged gates: all PASS; snippet floor tier1=35 checked=21 exempt=14 outside_floor=260 malformed=0
  • worktree/lock hygiene: only the intended fixture was committed; no deno.lock churn

No labels were changed and no evaluator was retriggered.

@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: FAIL_FIX VERIFICATION] [VERDICT: gates green] — orchestrator, head 8376bd1bd

Independently re-run, not read from the repair commit.

Gate Result
quality:scan:repothe blocker ok:true, 0 findings, allowCount 10 → 15
Fixture still asserts deno check --unstable-kv on the fixture — exit 0
Scoped check / lint / fmt (packages/sdk) exit 0 / 0 / 0
docs:snippets PASS, tier1=35 checked=21 exempt=14 outside_floor=260 malformed=0 — byte-identical to the pre-repair census
docs:links · docs:accuracy · quality:gate exit 0 / 0 / 0
Tree · lock clean · no deno.lock in the changeset

The check that mattered more than the blocker

A quality-allow marker changes what the scanner says, not what the compiler does. If any of the five assertions had quietly stopped failing, the marker would have hidden it and the scan would still go green.

TypeScript reports an unused @ts-expect-error directive as an error, so deno check on the fixture exiting 0 is positive proof that all five directives are still needed — the negative cases still fail to compile, exactly as they must. The repair changed reporting, not behaviour.

The five reasons are derived, not templated

Each states what its assertion actually proves:

  • :349CreateDesktopServiceClientOptions rejects RFC HTTP contributions on the MessagePort transport
  • :365 — tuple validation rejects two contributions that both claim the auth context key
  • :445 — a generated client call rejects omission of options when contribution context contains a required key
  • :465 — mapped query-utils keys exclude a service whose contribution declares direct-only response caching
  • :502 — tuple validation rejects a seventeenth contribution while accepting sixteen

Five copies of "negative compile fixture" would have satisfied the scanner and told a future reader nothing. These match the specificity of the sibling allowances already accepted in desktop-consumer_type.ts and sdk-assignability_type.ts.

Recorded boundary exception

This PR now carries one packages/** file beyond README.mdpackages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts, 5 lines changed, comment text only. The docs-lane pre-merge gate (check 6) treats any packages/** change beyond README as a hard stop, so it is recorded rather than waived:

Re-trigger lifecycle now runs on the new immutable head 8376bd1bd: status:impl, then one generation flip. No manual trigger, no Fable.

@rickylabs

Copy link
Copy Markdown
Owner Author

@openhands-agent model=openrouter/deepseek/deepseek-v4-flash-0731 output=pr-comment iterations=800 phase=impl head=8376bd1bdf1d57529351bf40b9b3d4058ab2089e

Trusted base SHA: 3c9dc1f
Evaluated head SHA: 8376bd1

use harness

SKILL

  • netscript-harness — apply the formal IMPL-EVAL protocol and verdict vocabulary.
  • openhands-handoff — publish one machine-readable OpenHands verdict.
  • netscript-tools — run the smallest decisive repository-native gates without mutating source.
  • netscript-doctrine — apply package/plugin doctrine when the changed surface requires it.

Act as the formal IMPL-EVAL session for this pull request. Do not edit files, create commits, push,
or repair findings. The trigger metadata supplies the trusted base SHA and immutable head SHA: read
the evaluator protocol, verdict definitions, and selected profiles from that base commit, then
evaluate the PR body, linked issues, run artifacts, final diff, review threads, and architecture
debt at the immutable head. Verify the approved plan or recorded PLAN-EVAL: N/A, design
checkpoint, acceptance criteria, static/runtime/consumer gates, public surface, lock hygiene, and
false-done states. For documentation changes, also read every changed document fully and hand-test
representative executable claims.

Return concise, severity-ranked findings with exact evidence and required action. End with exactly
one supported verdict line using OPENHANDS_VERDICT: PASS, OPENHANDS_VERDICT: FAIL_FIX,
OPENHANDS_VERDICT: FAIL_RESCOPE, OPENHANDS_VERDICT: FAIL_DEBT, or
OPENHANDS_VERDICT: FAIL_PLAN. Write the same verdict to OPENHANDS_SUMMARY_PATH.

@rickylabs

rickylabs commented Aug 12, 2026

Copy link
Copy Markdown
Owner Author

OpenHands Agent — Completed

OPENHANDS_VERDICT: PASS

Model: openrouter/deepseek/deepseek-v4-flash-0731
Provider: OPENROUTER
Job status: success
Verdict source: summary-file
Verdict comment: #1541 (comment)
Summary source: agent
Housekeeping: ack=success trace=success commit-artifacts=skipped replies=skipped draft-pr=skipped
Trace: .llm/tmp/run/openhands/pr-1541/run-31599236878-1 (in the Actions artifact)
Artifact: openhands-agent-31599236878-1

IMPL-EVAL — PR #1541 (docs(reference): reference IA completeness, README truth, CLI verb coverage)

Evaluator session, isolated from the generator. Trusted base 3c9dc1f → head 8376bd1bd
(immutable). No files edited, nothing pushed. All decisive gates independently re-run.

Summary

This is the content half of issue #1377. A prior IMPL-EVAL at head 0503991a returned
FAIL_FIX on a single HIGH blocker: the removal of the isTypeFixture() scan exemption left 5
unflagged negative-compile @ts-expect-error lines in
packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts, turning quality:scan:repo
red on main (a false-done state: green on the PR, red post-merge). The repair commit 8376bd1bd
added a reasoned // quality-allow: marker to each of those 5 lines. That blocker is now resolved
and verified.

Changes

Head 8376bd1bd = repair commit adding // quality-allow: markers to all 5 negative-compile
@ts-expect-error lines in sdk-client-contributions-rfc_type.ts (lines 349/365/445/465/502),
excluding the full changeset (69 files; four new plugin-*-core reference pages, reference index
truth/convention, root + sdk README truth, CLI verb coverage; removed fabricated US-/process
markers and scaffold-file-count/generator claims; .llm/tools/quality/scan-code-quality.ts
dropped isTypeFixture(); agent-tools.generated.ts re-bundled with updated hash; no deno.lock
change in the changeset).

Validation (independent, head 8376bd1bd)

Gate Result
deno task quality:scan:repo ok:true, 0 findings, allowCount 15 (the 5 new allowances present)
deno check --unstable-kv on the rfc fixture exit 0 — all 5 @ts-expect-error are still needed (unused directive would error)
deno task docs:links PASSdocs=102 broken-links=0 broken-anchors=0 orphans=0
deno task docs:accuracy PASS — 196 published source pages
Root-surface exhaustiveness sagas 41/41, streams 51/51, triggers 106/106, workers 32/32 vs deno doc; no fabricated/omitted root symbols
Entrypoint counts streams root 51 / sse 33 / telemetry 33 / testing 4; workers root 32 each match deno doc
Lock hygiene no deno.lock, no cache, no scratch in changeset

Deploy-surface claims (three-verb cloud targets, five-verb docker/compose, emit advertised but
unrouted), README truth (no fabricated file counts/4 plugin files/12 Aspire helpers; version-pin),
and CLI verbs/coverage were re-checked against source and match. PLAN-EVAL: N/A recorded per the
orchestrator brief; DESIGN/worklog (D-1..D-8) reconcile the source-vs-doc decisions.

Findings (severity-ranked)

  • LOW-1 — PR body "documentation only" claim is now stale. The body states it "changes no
    source under packages/** or plugins/** except README.md files." The final changeset adds
    source edits to packages/sdk/tests/type-fixtures/ (3 files), regenerates
    packages/cli/src/kernel/assets/agent-tools.generated.ts, and edits
    .llm/tools/quality/scan-code-quality.ts. These are deliberate, fully gated-green, and recorded
    as a documented boundary exception by the orchestrator — not a correctness defect — but the PR
    body should be corrected to reflect the actual changeset before merge.
  • LOW-2 — partial subpath coverage on the streams-core page. plugin-streams-core/index.md
    documents the sse subpath 12/33, telemetry 5/33, testing 2/4 while the entrypoints table
    reports the true counts; it claims no subpath exhaustiveness and fabricates no symbols, but it is
    less complete than the sagas-core page, which documents its subpaths exhaustively. Minor asymmetry
    for a PR whose headline is "reference IA completeness"; suggest a one-line note or completion.

Neither finding blocks merge.

Responses to review/issue comments

The prior FAIL_FIX thread (comment 5266764152) is fully addressed at head 8376bd1bd; verified, not
assumed. No new unanswered review threads exist on the PR (0 thread comments).

Remaining risks

  • LOW-1/LOW-2 as above (non-blocking).
  • Source defects deliberately out of scope and carried in drift: unrouted adapter emit,
    version('1.0.0'), docs:accuracy hardcoded reference path (DR-3/DR-7/DR-5). None introduced by
    this PR.

OPENHANDS_VERDICT: PASS

Run: https://github.com/rickylabs/netscript/actions/runs/31599236878

rickylabs added a commit that referenced this pull request Aug 12, 2026
…PR-E/PR-F

Lane ownership confirmed as exactly #1377, #1531, #1554, #1565. PR-G is a
lane deliverable and must appear in closeout, not just as a filing.

Placement reasoning recorded: PR-G does not compete with #1541 on files,
but head immutability is the binding constraint -- PR-C is mid-evaluation
on an immutable head, and anything inviting a re-merge costs another eval
cycle. So PR-G waits for PR-C to merge rather than merely using a
different worktree.

Placed before PR-E and PR-F because both run docs:snippets locally and
the doc-audit profile requires a site build, so each would otherwise
poison its own worktree and hit a false red on unmodified content.
Landing PR-G first means each pays that tax zero times instead of once.

Records the constraint that matters: the census must stay byte-identical.
An over-broad exclusion silently shrinks coverage, which is the defect
class #1374 exists to end, and the issue already carries the negative
test for it.

Refs #1565

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5
@rickylabs

Copy link
Copy Markdown
Owner Author

OPENHANDS_VERDICT: PASS

IMPL-EVAL — PR #1541 (docs(reference): reference IA completeness, README truth, CLI verb coverage)

Evaluator session over trusted base 3c9dc1f → head 8376bd1bd (immutable). No files edited,
nothing pushed. All decisive gates independently re-run.

Sole prior blocker — resolved and verified

The previous IMPL-EVAL at head 0503991a returned FAIL_FIX on one HIGH blocker (FIND-1): the
removal of the isTypeFixture() scan exemption left 5 unflagged negative-compile
@ts-expect-error lines in packages/sdk/tests/type-fixtures/sdk-client-contributions-rfc_type.ts
(lines 349/365/445/465/502), turning quality:scan:repo red on main (a false-done state). Repair
commit 8376bd1bd added a reasoned // quality-allow: marker to each. Verified independently:

  • deno task quality:scan:repook:true, 0 findings, allowCount 15 (5 new allowances).
  • deno check --unstable-kv on the fixture → exit 0, positive proof all 5 directives are still
    needed (an unused @ts-expect-error is a compile error) — the marker therefore cannot hide a
    silently-passing assertion.

Documentation accuracy — verified against source

  • Root-surface exhaustiveness (no fabricated/omitted symbols vs deno doc): sagas 41/41,
    streams 51/51, triggers 106/106, workers 32/32.
  • Entrypoint counts accurate: streams root 51 / sse 33 / telemetry 33 / testing 4; workers root
    32.
  • Gates: docs:links PASS (102 docs, 0 broken/anchor/orphan), docs:accuracy PASS (196
    published pages).
  • CLI/deploy/README truth re-checked against source: deploy surface (three-verb cloud targets,
    five-verb docker/compose, emit advertised but unrouted), no fabricated scaffold file
    counts/4 plugin files/12 Aspire helpers, version-pin note.
  • Lock hygiene: no deno.lock change; no scratch/cache artifacts in the changeset.

Findings (severity-ranked, non-blocking)

  • LOW-1 — PR body "documentation only" claim is now stale. Body states it "changes no source
    under packages/** or plugins/** except README.md files," but the final changeset also edits
    3 type-fixtures under packages/sdk/tests/, regenerates
    packages/cli/src/kernel/assets/agent-tools.generated.ts, and edits
    .llm/tools/quality/scan-code-quality.ts. Deliberate, fully gated-green, and recorded as a
    documented boundary exception by the orchestrator — not a correctness defect — but the body should
    be corrected to reflect the actual changeset before merge.
  • LOW-2 — partial subpath coverage on the streams-core page. plugin-streams-core/index.md
    documents sse 12/33, telemetry 5/33, testing 2/4 while its entrypoints table reports true
    counts; it claims no subpath exhaustiveness and fabricates no symbols, but it is less complete
    than the sagas-core page. Suggested, not required: a one-line note or completion.

Neither finding blocks merge. Source defects outside this PR's scope are accurately carried in
drift (unrouted emit, version('1.0.0'), DR-3 hardcoded reference path).

@rickylabs rickylabs added status:augment-review Advisory augment/review pass and removed status:impl-eval labels Aug 12, 2026
@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: PRE-MERGE GATE] [VERDICT: PASS] — 0.0.6 docs-lane orchestrator, head 8376bd1bd

Terminal automatic IMPL-EVAL: run 31599236878, PASS at immutable 8376bd1bd (DeepSeek V4 Flash 0731). Both LOW findings addressed below.

LOW-1 — corrected, and it was wrong in three ways, not one

The body claimed "documentation only … no source under packages/** or plugins/** except README.md". That was stale. It now lists every deliberate non-prose edit:

  • packages/sdk/tests/type-fixtures/…_type.ts — 5 lines, comment text only
  • docs/site/_data/xref.tsexecutable: four registry entries (32 → 36), without which ref:plugin-sagas-core and its siblings would not resolve
  • docs/site/_data.tsrendered site copy, the reference-lane subtitle
  • docs/site/_components/nextPrev.vto — comment only

Two of those are not comments. A body asserting "documentation only" over a rendered subtitle and a live registry is the same class of false claim this PR exists to remove from the docs themselves.

LOW-2 — assessed, not inflated: the asymmetry is in the package, not the page

plugin-streams-core declares 4 exports (., ./sse, ./telemetry, ./testing) against siblings' 12–19 (sagas-core 19, workers-core 17, triggers-core 12). The new page documents 4/4, which the audit independently verified.

So the page is correct and the asymmetry lives in the package's own declared surface. Either it is a deliberately narrow public surface — no defect — or it under-exports relative to its siblings, which is a packaging question owned by whoever owns that surface, not by a docs PR. Editing the page to "balance" it would make it disagree with deno doc, which is the authority the reference index now claims. No change made. Non-blocking, correctly classified.

Current-main checks — the interesting one

main moved to 5705aeb19 since this branch's merge-base (d558f9ab2), bringing #1560, #1539 and #1558.

File overlap with this PR: zero. But #1560"stop scanning negative type fixtures as production source"semantically overlaps this PR's own FAIL_FIX remediation. Rather than assume the combination was fine, I test-merged this branch onto current main in a scratch worktree and ran the gates there, without moving this PR's evaluated head:

Gate on the combined tree Result
quality:scan:repo ok:true, 0 findings, allowCount 15 → 8
docs:snippets PASS, tier1=35 checked=21 exempt=14 outside_floor=260 — byte-identical
docs:links · docs:accuracy · quality:gate 0 / 0 / 0
Fixture still asserts (deno check) exit 0

allowCount falls because #1560 now exempts type fixtures wholesale, so the five markers added here — and the two pre-existing sibling allowances — are no longer counted. The markers are redundant, not conflicting. They remain accurate statements of why each @ts-expect-error is legitimate, and removing them would cost a full evaluation cycle on a new head to delete correct comment text. Recorded rather than churned.

The fixture check is the one that still matters: exit 0 proves all five @ts-expect-error directives are still needed, so the negatives still fail to compile under the new scanner behaviour too.

Merging.

@rickylabs rickylabs added status:ready-merge and removed status:augment-review Advisory augment/review pass labels Aug 12, 2026
rickylabs added a commit that referenced this pull request Aug 12, 2026
* chore(harness): bootstrap the PR-F phase-eval label-race slice

The cleanup step removes status labels read from an event-payload snapshot, so a
concurrent dispatch 404s and reds a run whose evaluation succeeded. Reproduced on
PR #1541 at head 0503991 across runs 31596291515 and 31596293364, with
exactly-once verified intact.

Refs #1566

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R1uTFgh4emCPxSs7m72Pqf

* chore(harness): activate PR-F slice

* test(agentic): prove phase-eval cleanup race red

* fix(agentic): make phase-eval status cleanup race-safe

* fix(agentic): keep evaluator dispatch independent

* chore(harness): close PR-F review fix

* fix(agentic): inline phase-eval status transition

* chore(harness): record self-contained gate proof

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@rickylabs
rickylabs merged commit db1d79c into main Aug 12, 2026
34 of 37 checks passed
rickylabs added a commit that referenced this pull request Aug 12, 2026
Third merge: db1d79c, PR #1541, closing nothing by design. #1377
remains OPEN with 8 of 13 acceptance rows ticked -- the four gate rows
and the post-merge JSR row are PR-D's and cannot be truthfully ticked
yet. Normalized to status:plan rather than status:shipped, because
marking it shipped would assert work that does not exist and would
contradict the reason the issue was split.

The split earned its keep at the gate: close-gate initially failed
because the parser read a Closes keyword out of prose describing a
different PR, and had the body actually carried one, merging would have
auto-closed #1377 with four rows undone and stranded PR-D.

Refs #1377 #1374

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5
rickylabs added a commit that referenced this pull request Aug 12, 2026
main advanced 2 commits past the failed canary source, adding #1541's 46
docs/site files and the rewritten packages/sdk/README.md -- the public JSR
landing page. The re-cut is a different payload, so its note must be
re-measured at the re-cut SHA rather than copied from the failed attempt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
@github-actions github-actions Bot added the canary:0.0.6-canary.3 Published NetScript prerelease 0.0.6-canary.3 label Aug 12, 2026
rickylabs added a commit that referenced this pull request Aug 12, 2026
Measured the scope at dispatch rather than trusting the filing: "Group
[A-Z]" spans 6 files across 3 packages (cli, plugin-sagas-core,
plugin-triggers-core), not the one the issue was filed from.

Names the one way this slice can do real damage: the T[0-9] pattern also
matches legitimate TypeScript generic type parameters, so a blanket
replace would corrupt type signatures. The brief requires reading each
occurrence and reporting the deliberate exclusions.

Source first, page second -- the reference page mirrors deno doc, and
PR #1541's contribution was making that claim honest, so editing the page
independently would undo it.

Refs #1554

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGrdeXR3yuCZt78FxtpMy5
@rickylabs
rickylabs deleted the docs/1377-reference-ia-readme-truth branch August 13, 2026 13:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:docs area:packages canary:0.0.6-canary.3 Published NetScript prerelease 0.0.6-canary.3 ci:skip-e2e ci:skip-scaffold Skip the scaffold-static (deno-only) scaffold gate priority:p2 Medium status:shipped type:docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant