RFC: NetScript DevTools contribution architecture — plugins that ship developer tooling - #1450
Conversation
Proves the run is activated with a recorded operating identity and a verified baseline before any evidence claim is made. - supervisor.md written first (Opus 5 high, this session, Remote Control on), per seed-run.md's hard invariant that a run dir without it is not activated - baseline verified against live origin/main (2256a67) rather than taken from the charter on trust; no divergence, no rebase - planning-only mutation boundary recorded explicitly: the branch and its draft PR are writable, the board is not until owner ratification - twelve charter questions seeded as the open-decision docket in plan.md, each marked "must resolve now" - drift D-1/D-2/D-3 pre-registered: GLM major-UI/UX lane reactivated from dormant, IMPL-EVAL N/A by run shape, and GLM's no-reasoning-trace transport limit recorded before its output exists - charter committed to the branch so the run is reconstructible without chat history Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
|
[PHASE: RESEARCH] [STAGE: A — BOOTSTRAP] Seed run activated. Supervisor identity recorded, baseline verified against live Charter read-backRead
Baseline
Identity and routes in forceFull table in
No OpenHands. OpenRouter is confined to the GLM design lane, the conditional Kimi lane, and an authorized fallback. Evaluation posture
CI lane — intentional, not incidentalThe changeset is Markdown only: no TypeScript, no Drift pre-registered at bootstrap
Stage A artifacts — commit
|
Proves the run is reviewable from GitHub alone: draft PR #1450 carries the charter read-back, the verified baseline, the routes in force, and the evaluation posture, so no stage-B evidence rests on chat history. - phase-registry: stage A done (ccc4c0a, PR #1450, opening comment), stage B active - worklog: PR/label/comment evidence recorded per the commit-trail contract - context-pack: resumable state advanced to stage B Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves stage-B provenance: seed-run.md's Tier-C hard rule is that an uncommitted workflow does not run, and a corpus produced by one does not count as stage-B proof. This commit is that precondition. The script embeds its inputs as consts rather than relying on `args` (seed-run landmine), fans 14 agents across repo surfaces, the three prior RFCs, the dashboard board, doctrine, and a primary-source market study, and binds every agent to the citation law: an uncited claim is not a finding, and an inference may not be dressed as an observation. Agents are read-only on source and on GitHub; `gh` is reads only. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the run's validation plan against repo configuration instead of assumption — an unexamined gate list is how a run reports false-green evidence. deno.json's fmt.include is packages/**/*.ts(x) and plugins/**/*.ts(x) only, so `deno task fmt:check` never inspects Markdown. The stage-A plan named a scoped `deno fmt` pass as its format gate; running it manufactured 29 findings no repo gate asks for, and would have rewritten the verbatim upstream artifacts under research/sources/ — corrupting the evidence the corpus cites. Those files are designated evidence and are never formatted. Real gates recorded: docs:links (needs an explicit --root, since its defaults cover .llm/harness and docs/architecture/doctrine but not a new RFC dir), docs:accuracy, and the CI quality job gated on needs_docs. Also verified the OpenHands docs-accuracy workflow dispatches only on ready_for_review, so a permanently-draft PR satisfies the charter's no-OpenHands boundary structurally. Deliberately not applying docs-eval:skip: a label silencing a gate that was never going to fire would be misleading evidence. Drift D-4 (significant) and D-5 recorded. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves every downstream design claim can be traced to evidence rather than to the supervisor's priors. 14 agents returned, 0 errors: 5 repo surfaces (fresh host, fresh-ui pipeline, plugin contribution axes, CLI plugin flows, observability boundary), 3 prior RFCs re-baselined against 2256a67 (#890, #1446, #1390), the dashboard board (#400 + children) and doctrine/live-board, and 4 primary-source market teardowns (Nuxt/Vite, TanStack/Grafana, admin consoles, Aspire/Scalar). 6,327 corpus lines plus 78 saved upstream artifacts under research/sources/ — including Nuxt devtools-kit type definitions and the full Vite DevTools kit docs — so a market claim is verifiable without re-fetching the web. Those artifacts are verbatim evidence and are never reformatted (drift D-4). Verified the fan-out wrote nothing outside the run dir: the read-only constraint on packages/, plugins/, docs/, and GitHub held. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…s files
Proves the corpus was read by the supervisor rather than skimmed, and
makes the analysis durable independent of session context.
Five findings reshape the charter's framing:
S-1 There is no plugin->UI channel of any kind at this baseline.
capabilities.hasRoutes means service endpoints; no registry kind emits
routes/pages/islands; the real mechanism is three hardcoded Vite
aliases. The RFC defines the first extension point, it does not
extend one.
S-2 RFC #890's envelope is merged design text with ZERO implementation --
32 files, all under .llm/runs/ plus labels.yml; all 24 children and
the epic still OPEN at status:plan. "Preserve its pattern" therefore
describes a co-dependency on unbuilt work, not reuse of a shipped
surface. This is the run's largest plan-defect risk and becomes an
owner fork.
S-3 #1446 gives DevTools a quotable mandate (P-6) and a decision sentence
separating production management from developer diagnostics -- which
answers charter Q4 with authority, and imposes a reciprocal duty not
to annex Surface-1 territory.
S-4 The RFC home is contested: docs/architecture/rfc/ does not exist on
main and is claimed by unmerged #1446, while rfcs/ ships today.
Escalated as an owner fork; this run takes rfc-0002- so the only
overlap is directory creation.
S-5 DevTools has a ready-made data plane to consume: TelemetryQueryPort,
22 typed MCP tools with input+output schemas, a pure OpenAPI
projection entrypoint, and netscript.correlation.id as the journey
join key -- but MCP is stdio-only, so a browser client cannot reach
it, and no Aspire/Scalar deep-link helper exists.
Also carried: the arbitrary-write finding in resolveTarget, which is
inert only while the registry is first-party, and the evidence that
#890's transactional replace-set fixes a real shipped defect class rather
than gold-plating.
Refs #1450
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…ine legs Proves the supervisor read the board/doctrine corpus, not just the repo and prior-RFC legs. Eight further findings, the load-bearing ones: S-6 Epic #400's ownership thesis exists verbatim and is already operationalized into three ENFORCEABLE acceptance lines, including 'every merged panel must answer why this cannot just deep-link to Aspire/Scalar'. The RFC should adopt these as normative criteria rather than restate the thesis as prose. S-7 Board authority is uneven: #685 merged ANALYSIS with committed provenance but never advanced past status:research; #780 is an unlabelled stale draft with nothing on main; the last owner-ratified board event is the 2026-07-06 rescope. A map treating #685 as ratified architecture would be wrong. S-8 THREE competing seams already claim the same contribution axis (#427 vs #890's pointer axis vs #734's manifest axis), and two epics claim dashboard-zone panels at different milestones (#428-431 vs #933/#944). S-9/S-10 The archetype question has two conflicting in-repo precedents and doctrine's own table contradicts the merged design on whether fresh is A3 or A4 -- which changes the gate set. And arch:check gates only 16 of 36 units, so a new package is UNGATED unless the RFC names adding it to deno.json:156 as a slice. S-12 The RFC-home fork is three-way and PRE-EMPTS scheduled issue #1380. S-13 createServiceClient cannot send Authorization or x-api-key today, so DevTools auth propagation is blocked on RFC-A/#1348 -- and bypassing the SDK is the duplication the charter forbids. Owner-fork list grown from 7 to 13. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the data-plane and build-mechanics questions were answered from
evidence rather than from the charter's phrasing.
S-14 RFC-A does NOT close the loop DevTools needs. Its chain terminates
at a statically generated services map plus a caller-supplied
context; it explicitly rejects a registry, a locator, and any
ambient client, and contains zero occurrences of 'devtool'. So 'a
plugin panel obtains a typed client' is unsolved -- and RFC-A's own
sentence that UI contributions and SDK request contributions are
separate named extension axes is the licence to define the
host->panel seam without duplicating #1390. Also recorded: no
response hook, absolute redaction even in debug mode, HTTP-only, and
an FCP deadline four days out with implementation gated behind an
unfiled metadata child.
S-15 does not exist anywhere in the CLI. Charter Q8 is
therefore not 'how does DevTools fit the dev loop' but 'must
DevTools invent one' -- a materially larger question.
S-16 Two divergent registry generators write to different paths; the
walker's AstExtractor is regex, not AST; and walker-emitted
registries leak on plugin remove. Generated-surface drift detection
is not currently reliable, which independently confirms #890's
transactional replace-set is a fix rather than gold-plating.
S-17 Adding a contribution kind today costs six framework file edits, and
plugin doctor already runs contributed checks under a read-only
dryRun context -- a real reuse target for the diagnosis taxonomy.
Owner forks now 16.
Refs #1450
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the data-plane and build-mechanics questions were answered from
evidence rather than from the charter's phrasing.
S-14 RFC-A does NOT close the loop DevTools needs. Its chain terminates
at a statically generated services map plus a caller-supplied
context; it explicitly rejects a registry, a locator, and any
ambient client, and contains zero occurrences of "devtool". So "a
plugin panel obtains a typed client" is unsolved -- and RFC-A's own
sentence that UI contributions and SDK request contributions are
separate named extension axes is the licence to define the
host->panel seam without duplicating #1390. Also recorded: no
response hook, absolute redaction even in debug mode, HTTP-only, and
an FCP deadline four days out with implementation gated behind an
unfiled metadata child.
S-15 "plugin dev" does not exist anywhere in the CLI. Charter Q8 is
therefore not "how does DevTools fit the dev loop" but "must
DevTools invent one" -- a materially larger question.
S-16 Two divergent registry generators write to different paths; the
walker's AstExtractor is regex, not AST; and walker-emitted
registries leak on plugin remove. Generated-surface drift detection
is not currently reliable, which independently confirms #890's
transactional replace-set is a fix rather than gold-plating.
S-17 Adding a contribution kind today costs six framework file edits, and
"plugin doctor" already runs contributed checks under a read-only
dryRun context -- a real reuse target for the diagnosis taxonomy.
Owner forks now 16.
Refs #1450
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
cbef6e8 to
2b06418
Compare
…spire/Scalar legs
Proves the market study produced decision-grade evidence rather than a
feature survey.
S-18 The closest analogue deleted its own shell. Nuxt DevTools v4 removed
the floating panel and became a dock entry inside Vite DevTools;
vite-plugin-inspect v12 did the same. Nuxt built five bespoke things
-- shell, RPC namespacing, subprocess/terminal system, editor
integration, global install -- and deprecated or deleted all five.
But the thing they consolidated onto is Vite-8-bound and NetScript
pins Vite 7.2.2, so adopting the kit is not buildable at this
baseline: imitate the contract shapes, implement natively.
Three assumptions overturned: devtools are NOT stripped in
production upstream (build mode is a supported target with client
auth disabled by construction); iframe does NOT mean sandboxed (Nuxt
injects live app access into same-origin contributed iframes); and
transformIndexHtml injection silently no-ops for apps that render
their own HTML -- which Fresh 2 does.
S-19 The Aspire/Scalar boundary is now a table backed by fetched .razor
sources. Resource, console-log, structured-log, trace/span and
metric deep links all exist and are cheap; the log-to-trace
correlation query is the highest-value jump. Filtered views are NOT
externally constructible. Aspire has no panel/plugin extension point
at all -- only resource commands, which vanish when deployed -- and
it removed its in-dashboard Copilot UI in 13.3, redirecting agents
to CLI/MCP. That is a direct precedent for DevTools = human UI, MCP
= agent surface.
NetScript currently discards nearly all of Scalar's surface, and its
pinned bundle predates pluginUrls, so "contribute into Scalar" is
blocked. No deep-link helper exists anywhere in packages/ for either
upstream -- the hand-off thesis has no implementation seam today,
which makes a typed deep-link helper an obvious first slice.
Owner forks now 20.
Refs #1450
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…nsion-model legs Proves the full corpus was read by the supervisor, and corrects a premise carried by RFC #890 itself. S-20 "Inspired by Medusa zones" is factually wrong about Medusa. Medusa's zones are a CLOSED core-owned vocabulary that plugins cannot mint; validity is an AST check at build time and an invalid zone is silently dropped. The plugin-minted namespaced model is STRAPI's. Two consequences: in a closed vocabulary name collision is impossible by construction, so Q2's collision-policy budget should move to ordering -- and NOBODY solved ordering (Grafana concats in load order, TanStack identity is positional, Medusa documents none, and Medusa deprecated positional .before/.after suffixes). #890's deterministic (order, mountId, id) sort is ahead of the market rather than derivative. S-21 The Q4 separation verdict is now evidence-backed: admin consoles pay for untrusted third-party code in a long-lived RBAC-governed production-data surface, and sandboxing, manifest host ranges, per-contribution permissions and runtime module federation are all costs of that ONE condition. A dev diagnostics tool satisfies none of the antecedents, so the RFC can decline each with a citation rather than an assertion. What transfers is cheap: declarative target id validated at build time, host-owned typed data flow to the contributed component, and a shared component kit. What does NOT stretch: no admin console surveyed models a push/stream contract to contributed UI -- that is net-new design. S-22 Two tiny mechanisms are worth near-verbatim adoption: Grafana's per-contribution error boundary (loud in dev, null in prod -- which TanStack lacks entirely, its most obvious gap) and version-suffixed contribution ids, from which Grafana got its whole compatibility story. Plus: use TWO independent production-exclusion mechanisms, because TanStack explicitly distrusted one signal after hosting providers set build command and mode inconsistently. Owner forks now 24. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the supervisor read the full corpus and converted it into decisions, not a summary. research.md now carries 26 cited findings ordered by how much they constrain the RFC, the final evidence-register status, five supervisor-delegated resolutions, and the finalized stage-D topic set. Three carried-in assumptions did not survive the re-baseline and are recorded rather than quietly corrected: #890's envelope is unbuilt, this run's own stage-A gate list named a gate that does not exist, and "inspired by Medusa zones" is wrong about Medusa. Two charter questions are now ANSWERED by evidence rather than left open -- Q4 by #1446's decision sentence plus the market separation verdict, and Q5 by fetched Aspire .razor sources that make the deep-link boundary a table instead of a thesis. The eleven provisional stage-D topics collapse to eight: the corpus closed the boundary topic outright, and the staging question folds into the information-architecture pack. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
|
[PHASE: RESEARCH] [STAGE: B+C — DISCOVERY CORPUS + SYNTHESIS] 14 discovery agents returned, 0 errors. Full corpus read by the supervisor. Five findings change what this RFC has to be. Stage B — the corpus6,327 corpus lines and 78 saved upstream artifacts under The five that reshaped the run1. There is no plugin→UI channel at all. Not a weak one — none. 2. RFC #890's envelope is merged design text with zero implementation. 32 files, all under What is reusable is the pattern, and the corpus splits it carefully: ten payload-agnostic mechanisms worth taking versus nine app-family-specific payloads that must not be copied. 3. #1446 answers charter Q4 with authority, so it stops being an open question. P-6 is a verbatim row, and §8.2 is a decision sentence, not a preference: "production operator management and developer diagnostics are two distinct hosts and two distinct contribution surfaces — not one ambiguous 'cockpit.'" Slice A7 deliberately excludes diagnostics so as not to pre-empt DevTools — which imposes the reciprocal duty that DevTools must not annex Surface-1 territory. 4. RFC-A (#1390) does not close the loop DevTools needs. Its chain terminates at a statically generated services map plus a caller-supplied context; it explicitly rejects a runtime registry, a locator, and any ambient client, and contains zero occurrences of "devtool". So "a plugin-contributed panel obtains a typed client" is unsolved. Its own sentence — "UI contributions and SDK request contributions are separate named extension axes, not one universal envelope" — is the licence to define a host→panel seam without duplicating #1390. 5. Charter Q5's ownership thesis is now a table, not a thesis. Fetching Aspire's actual dashboard The market study earned its placeThe most useful evidence is a competitor's regret. Nuxt DevTools deleted its own shell in v4 — it is now a dock entry inside Vite DevTools, with all five of its bespoke subsystems (shell, RPC namespacing, subprocess/terminal, editor integration, global install) deprecated or removed. But the thing they consolidated onto requires Vite 8, and NetScript pins 7.2.2 — so adopting Three widely-held assumptions turned out false, each with a citation:
And one correction to a premise carried by #890 itself: "inspired by Medusa zones" is wrong about Medusa. Medusa's zones are a closed, core-owned vocabulary plugins cannot mint, AST-validated at build time. The plugin-minted namespaced model is Strapi's. In a closed vocabulary, name collision is impossible by construction — so the design budget moves from collision to ordering, which no surveyed system solved (Grafana concats in load order; TanStack's identity is positional; Medusa deprecated its positional suffixes). #890's deterministic What the market says to decline — with citations, not assertionsThe admin consoles (Medusa/Directus/Strapi/Backstage) pay for untrusted third-party code in a long-lived, RBAC-governed, production-data surface. Sandboxing, manifest host ranges, per-contribution RBAC and runtime module federation are all costs of that one condition — which a developer diagnostics tool does not satisfy. Backstage's cost is documented: plugin install became a rebuild-and-redeploy event, which is exactly why Red Hat bolted on module federation. Two mechanisms are worth near-verbatim adoption, and both are tiny: Grafana's per-contribution error boundary (loud in dev, Things that will surprise a reviewer
Stage C output
Eleven provisional stage-D topics collapse to eight — the corpus closed the boundary topic outright (Q4 and Q5 are now answered constraints, not forks) and folded staging into the IA pack. Owner forks now number 24, up from the charter's implied set. They are accumulating in Next — Stage DEight Fable 5 · medium deep-dive packs, plus the charter-mandated GLM 5.2 · xhigh design pass (transport fact of record: tools + streaming, no reasoning trace — pre-registered as drift D-3 before the pass runs, so no artifact can later cite it as reasoning evidence). |
…inding Proves the topic set was derived from the corpus rather than carried from the bootstrap guess. Eleven provisional topics collapse to eight. T4-boundaries closed outright: charter Q4 is answered by #1446's decision sentence and Q5 by the fetched Aspire .razor deep-link evidence, so both become constraints carried into T1/T8 rather than open topics. T11 folds into T8, and Q11 is the supervisor's stage-E integration output, not a delegated topic. The superseded set is kept inline for provenance instead of deleted. D2 lane corrected from major_ui_ux_design to major_ui_ux_adversarial_review: lane-policy binds the first when GLM LEADS the design and the second as the minimum when another lane leads, and here the Opus supervisor plus the Fable packs lead. Consequence recorded -- the pass is sequenced after the stage-E draft, because an adversarial design review needs a design to review, and running it now would produce generic advice while misrepresenting the lane. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…at baseline Proves a stage-D agent finding by supervisor verification rather than relaying it, and escalates a defect that belongs to another epic's plan. RFC #890 contract C8 asserts older CLIs ignore an unknown manifest pointer block, so adding one is safely additive. But PluginInstallerManifestSchema ends in .strict() (packages/plugin/src/protocol/manifest.ts:282) with schemaVersion: z.literal(1) at :271, so zod HARD-REJECTS any unknown top-level key: an older CLI fails manifest parsing outright and takes the plugin down rather than degrading. The stage-B corpus had independently recorded the same property from the other direction (r3 F5), which is what made the agent's claim worth checking rather than dismissing. Significant, and not scoped to this run -- epic #922 slice #929 plans to implement exactly that pointer axis on the false assumption. Action is split: this RFC requires an explicit schema-evolution precondition slice before any manifest-visible pointer lands, and the finding is escalated to the owner as a cross-RFC issue. This run does not edit another epic's board; recording and escalating is the whole permitted action before ratification. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…s pure UI/UX Proves stage D2 is now two complementary passes rather than one overloaded reviewer. The owner refined the D-15 override: architecture and contracts go to Qwen 3.8 Max at max, and the pure UI/UX review goes to Kimi K3 at high -- which is what lane-policy already envisages, since adversarial_design_eval is defined as COMPLEMENTING the design lane rather than replacing it. Each prompt tells its reviewer to stay in its lane and skip the other's findings, so the passes do not duplicate. Recorded honestly rather than glossed: Kimi is the vision-capable lane, but this run is planning-only and there are NO screenshots, mockups, or rendered artifacts, because nothing is implemented. Kimi reviews the information architecture as text and its vision capability is unused. Its prompt says so explicitly so that no downstream artifact can imply a visual review took place -- and if the IA is ever prototyped, a follow-up Kimi pass with images would be materially different evidence. Both passes run on separate fresh read-only worktrees, both are findings-only with no edit rights, and both are advisory. The Codex PLAN-EVAL remains the sole verdict of record. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the identity file stays accurate after a lane change rather than carrying superseded text -- the staleness class PLAN-EVAL already failed this run for once. Three corrections. The OpenRouter prohibition still described the GLM pass as required and Kimi as merely conditional; it now names the actual active lanes, Qwen for architecture and Kimi for UI/UX, and states that no stage-D2 reviewer is ever the formal evaluator -- a PASS-shaped statement from a design lane carries no gate authority. The stage-F rationale listed GLM 5.2 as one of the authoring lanes Sonnet had to be distinct from. GLM NEVER RAN, so it authored nothing; the note now says so rather than implying a pass happened. The review chain is corrected to Opus -> Fable -> Sonnet -> Codex Sol, with Qwen and Kimi named as advisory passes that authored nothing. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves an evidence-loss mistake by the supervisor rather than hiding it behind a clean re-run. Both stage-D2 launches were piped through tail -40. Kimi K3 completed and returned 1 critical, 5 major and 4 minor findings, but only the last 40 lines survived: the captured file starts mid-finding and five of the ten findings are gone. No OpenCode session store exists to recover from. This is evidence loss on the exact deliverable the owner declined to waive, and the cause is mine -- tail was habit from reading noisy launcher output, which is the wrong tool the moment the command's stdout IS the artifact. The stage-B corpus escaped this only because those agents wrote their own files. Both passes are re-run with full redirection. The truncated tail is KEPT as kimi-findings-PARTIAL-tail.md rather than deleted, because it is evidence that the first run happened and what it concluded; deleting it would tidy away the mistake. Rule recorded: when a lane's stdout is the artifact, redirect to a file and never pipe through head or tail. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the drift log states what happened rather than what was intended. D-17's action line said 'both passes re-run with output redirected'; at the time of writing only Kimi had been. Qwen was still on its original truncating invocation and had not returned, and killing a long reasoning pass to fix the capture would have cost more than letting it finish. Corrected to a staged action with each lane's real status, and pointing at the receipt as the tracker rather than asserting a state here. A drift entry that overstates its own remedy is the same defect it was written to record. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…feed Proves the owner-mandated design pass changed the design rather than decorating it. Kimi K3 returned 1 critical, 5 major, 5 minor; every finding is dispositioned and every anchor was verified in source before being accepted. CRITICAL, fixed. Home could not distinguish "nothing is broken" from "DevTools is blind" -- a ranked problem feed rendering empty had two meanings and no way to tell them apart. For a tool whose whole thesis is diagnostics, that fails silently at the most important moment. Section 11.3.1 now specifies a closed FeedSource set, a per-source status, and the rule that all-clear is reachable ONLY when every source reported; otherwise the feed renders partial and names the gap. not-configured stays distinct from unreachable so a missing automation plugin does not cry wolf and a real outage is not hidden. MAJOR, fixed. DevToolsUiNode tables were string-only, so the canonical devtools table -- id, status badge, trace link -- was inexpressible while the RFC claimed most panels are key/value plus table plus list. Cells are now nodes. And there was no code element at all, which made AC-2's required CLI-equivalent line unsatisfiable by the RFC's own vocabulary. Both were cases of the document contradicting its own stated goals. MINOR, fixed. Section 5's route sketch promised a traces/ surface that section 11.1 explicitly killed. Seven findings are ACCEPTED-DEFERRED into one state-and-DX amendment pass, with the reason recorded: they share a single root -- two panel state vocabularies and no worked data-access example -- and patching them separately would create a third vocabulary, which is exactly the defect PLAN-EVAL cycle 2 caught with identity and ordering. Gates: docs:links PASS, docs:accuracy PASS. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the gate was cleared by owner authority rather than by an evaluator verdict, and corrects a premise in the grant rather than accepting it silently. plan-gate.md allows a Plan-Gate to clear on PASS or an owner waiver in writing; this is the waiver. The premise correction matters. The owner wrote 'if both eval passed separately', but neither stage-D2 pass returned a PASS and neither was an evaluation -- Kimi returned 1 critical, 5 major, 5 minor and Qwen returned 1 critical, 5 major, 5 minor, both advisory by construction because their prompts forbade emitting a verdict. So the waiver is read as 'apply the amendments and do not open a third Codex cycle', NOT as 'the design passes found nothing'. Letting the looser reading stand would put a false clean bill of health in the record. Scope recorded explicitly: the waiver covers the eval cycle and the Plan-Gate, not board filing, and not owner forks F-1 and F-3, which are architecture decisions rather than eval verdicts and remain unratified. The record will never imply Codex returned PASS -- it returned FAIL_PLAN twice, and the owner has cleared the gate over its owner-gated remainder. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
… antecedent
Proves the second stage-D2 lane changed the design too, and that its
critical finding was verified rather than deferred.
CRITICAL, fixed. Section 9's decline rationale rested on the claim that
contributions are workspace packages the developer already runs. That is
FALSE by this RFC's own pipeline: section 10 pins installs to
source={kind:'jsr'} and emits import('jsr:@acme/plugin-trace@1.4.2/...'),
section 6's worked example is @acme/plugin-crons, and section 6 states
the generator imports the pointed-to export IN-PROCESS. Third-party code
both exists and executes.
The antecedent now splits. The decline survives for panel rendering,
where a contribution is a UiNode data tree and no contributed code
reaches the browser in v1. It does NOT survive for generate-time import,
which is arbitrary third-party code running in the generator's own
process with no subprocess boundary at all -- weaker than the T-2 path
INV-2 scopes. Added T-10, INV-9 (read the envelope without executing
contributor code in-process) and gate G-10. The restated justification is
narrower and true: installing a plugin already grants server code and a
whole-filesystem scaffolder before DevTools exists.
MAJOR, fixed. Anchors were keyed '<pluginKind>/<contributionId>' while
identity produces '<mountId>/<id>/v<apiMajor>', so no anchor could ever
match and the entire anchor tier of my ordering rule was silently dead.
An unmatched anchor is now a generate-time warning.
MINOR, fixed. DevToolsPanelId was referenced but never defined -- more
residue from my own identity fix. And "8 trigger kinds" was simply wrong:
verified at plugin-triggers-core constants, the canonical set is six.
Three findings arrived independently from BOTH lanes -- the string-only
table, the traces/ contradiction, and the under-specified feed. That
convergence is the strongest evidence either pass produced.
Gates: docs:links PASS, docs:accuracy PASS, lock clean.
Refs #1450
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…filing F-1 ratified: self-contained DevTools family and spine built first in packages/devtools-core, not serialized behind #890's 24 unimplemented children. Closes the run's highest-risk fork and unblocks W1-a. F-3 ratified: manifest schema-evolution precondition via .passthrough() before any manifest-visible pointer, with explicit old/new CLI behavior and tests. Closes the D-6 defect where #890's additive-manifest claim was false against a .strict() schema. Board filing authorized once from the committed manifest, preserving the 2026-07-19 milestone train and not duplicating existing issues. This is the stage-H ratification the seed-run profile gates on; the mutation boundary opens for the first time in this run. Standing instruction recorded: no re-asking about F-1/F-3 or accepted findings; stop only for a genuinely new architecture fork or an authorization boundary. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the owner-approved substitute route ran as authorized, with identity confirmed from the transcripts rather than assumed. Observed matches requested on both lanes: qwen/qwen3.8-max and moonshotai/kimi-k3. Recorded honestly that OpenCode's header reports the bare vendor/model while the request carries the openrouter/ transport prefix -- a transport-prefix difference, not a model difference -- and that variant is not echoed in the header, so it is marked requested-only rather than claimed as observed. The receipt now also records the outcome plainly: neither pass returned a PASS and neither was asked to, each found a critical that changed the RFC, and three findings arrived independently from both lanes. The truncated first captures are listed alongside the full ones as preserved evidence of D-17. Amendment C also landed: #412 moves AMEND to SUPERSEDE now that contracts live in packages/devtools-core, every #890-dependency hedge is rewritten under ratified F-1, #922's children stay untouched, and a live-board re-read corrected the child count from 28 to 29. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…e union Proves the state-and-DX amendment is a single coherent pass rather than piecemeal patches. Sections 6 and 7 only; 213 insertions, 95 deletions. F-3 RATIFIED and specified normatively. The O-5 fork is replaced by the .passthrough() precondition: the exact change at manifest.ts:283, schemaVersion stays z.literal(1), all four CLI-versus-manifest compatibility cases written out, and three named slice-acceptance tests including a regression guard proving the same fixture fails under .strict(). The typo-detection trade is stated honestly with its compensating control -- the pointer block's own schema stays strict, so typos inside it are still caught. ONE ZONE RULE. Zone ids are version-suffixed in the vocabulary itself, contexts are typed per zone via DevToolsZoneContextMap (the comment-only is gone), an exact-match rule is specified, and a sixth quarantine state -- zone-contract-mismatch -- closes the gap Qwen found. ONE PANEL STATE. PanelAvailability is deleted in favour of a canonical DevToolsPanelState<T> covering loading, ready, empty, partial, stale, not-running, incompatible, unauthorized and failure. Defining it once, in the contracts section, is the fix for the two-vocabulary defect -- not a third vocabulary. Third-party mounting resolved: plugin.detail/v1 is the universal mount, and new zones are added only by host release against a filed issue -- plugins petition, the host adds. F-1 propagated: the spine is the ratified self-contained devtools-core, and convergence later is a re-export change rather than a dependency. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…e union Proves the state-and-DX amendment is a single coherent pass rather than piecemeal patches. Sections 6 and 7 only; 213 insertions, 95 deletions. F-3 RATIFIED and specified normatively. The O-5 fork is replaced by the .passthrough() precondition: the exact change at manifest.ts:283, schemaVersion stays z.literal(1), all four CLI-versus-manifest compatibility cases written out, and three named slice-acceptance tests including a regression guard proving the same fixture fails under .strict(). The typo-detection trade is stated honestly with its compensating control -- the pointer block's own schema stays strict, so typos inside it are still caught. ONE ZONE RULE. Zone ids are version-suffixed in the vocabulary itself, contexts are typed per zone via DevToolsZoneContextMap (the comment-only optional-unknown data field is gone), an exact-match rule is specified, and a sixth quarantine state -- zone-contract-mismatch -- closes the gap Qwen found. ONE PANEL STATE. PanelAvailability is deleted in favour of a canonical DevToolsPanelState covering loading, ready, empty, partial, stale, not-running, incompatible, unauthorized and failure. Defining it once, in the contracts section, is the fix for the two-vocabulary defect -- not a third vocabulary. Third-party mounting resolved: plugin.detail/v1 is the universal mount, and new zones are added only by host release against a filed issue -- plugins petition, the host adds. F-1 propagated: the spine is the ratified self-contained devtools-core, and convergence later is a re-export change rather than a dependency. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
496876d to
7a62d2e
Compare
…, flows Completes the single coherent state-and-DX amendment. Sections 8 and 11, plus three stale zone references A flagged as out of its scope. +601/-50. THE ADOPTION BLOCKER IS CLOSED. Section 8 now carries a worked end-to-end contributor data path in seven code steps and a nine-row pass-through table, following one plugin from manifest pointer through envelope, procedure reference, generated registry, host invocation, typed data, panel state and rendered node. Writing it surfaced that section 6's requires field had been dangling -- it is now defined. A reader could previously reach the end of the kinds section and still not know how a panel gets its own data. ONE MATRIX, ONE UNION. Section 11.7's local PanelState and DeepLink are deleted; the matrix consumes section 7's canonical union as a rendering checklist across ten surfaces by nine arms, with every cell specified and no blanks. Both modelled degradations survive under partial. RANKING IS NOW DEFINED. A row schema, a four-level severity vocabulary with a fixed per-source assignment, and a deterministic total order -- severity, then observedAt descending, then source declaration order, then an entity code-unit tiebreak -- gated by a shuffle test. Two of six sources are honestly marked staged and render not-configured rather than vanishing. Also: a bounded flows index so the journey view is reachable without already holding a correlation id; a density contract with mandatory truncation disclosure, cited against Aspire's own 10k cap; and /automation given concrete staged behaviour naming its blocking dependency, which turns a blank nav seat into a placeholder that explains itself. Consistency sweep after both amendments: no retired vocabulary outside self-documenting correction notes, zone ids uniformly suffixed, zero compound-id or flat-sort residue. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…, 0 deferred Proves the owner directive that no accepted finding remains merely deferred. FINDINGS-SWEEP.md is the closure ledger: every one of the 11 Qwen and 11 Kimi findings carries a status and a normative anchor into the amended RFC. The single decline is Kimi's own lane note rather than a design finding: it is the vision-capable lane but nothing is implemented, so there are no screenshots to evaluate and it reviewed the IA as text. A vision pass needs a prototype, and building one is implementation -- outside a planning-only run's boundary. Recorded as a named follow-up with a re-entry condition at roadmap wave W4/W6, not as a gap. Three defects were reported independently by BOTH lanes, which could not see each other's output: string-only table cells, the section 5 traces/ contradiction, and the under-specified ranked feed. Convergence between an architecture reviewer and a UX reviewer is the strongest evidence either pass produced, and the clearest justification for the owner's lane split over one merged reviewer. Gates after both amendments: docs:links PASS with zero broken links or anchors, docs:accuracy PASS, 90 balanced code fences, lock clean. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
… cross-RFC conflicts Proves the amended RFC is coherent with the three prior contribution RFCs and with itself. THE HEADLINE IS A NEGATIVE RESULT AND IT IS THE IMPORTANT ONE: zero contradictions and zero duplications against #890, RFC-0001/#1446 and RFC-A/#1390, verified at source -- the two-hosts decision sentence, the five-surface taxonomy, P-6's A2b/A3b/A2d entry criteria, the four consumed contracts, and RFC-A's separate-named-axes licensing sentence all check out. The host-to-panel seam mirrors rather than reuses SdkClientContribution, so no second SDK mechanism was invented. All 21 defects were INTERNAL, introduced by three agents amending different sections -- the predictable cost of parallel authoring, caught because the sweep was run against the amended text rather than assumed from the earlier one. The sharpest was a real conflict of substance: sections 6 and 8 still said the generator imports contributor code in-process while the new INV-9 forbids exactly that. Had it shipped, the RFC would have mandated a security invariant its own pipeline description violated. Both now specify static parse or a permission-scoped subprocess. Also fixed: a self-contradictory sentence in 13.1 left by my own global rename ("is packages/devtools-core... deliberately not named devtools-core"); read-only v1 versus confirm-gated migrate/seed dialogs, now staged with v1 rendering the CLI line rather than executing it; a duplicate T-10 id; five-state versus six-state residue, keeping the one reference that correctly describes #890's five; the ratified F-1/F-3 rows still listed as open forks; and a quoted source that had been silently rewritten -- restored with the divergence stated. Gates: docs:links 0 broken, docs:accuracy PASS, 90 balanced fences, lock clean. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Proves the run's own record is current before it mutates the board -- the staleness class PLAN-EVAL failed this run for once already. decision-brief.md changes character: it was a request for decisions and is now the record of decisions taken, with every fork closed and each pointing at where it is recorded. It keeps one thing deliberately loud -- the Codex evaluator NEVER returned PASS; it returned FAIL_PLAN twice and the gate was cleared by owner waiver. Nobody reading this later should mistake one for the other. context-pack.md moves to phase ratify-to-file, records that filing is the only remaining step, and carries the two process lessons a resumed run needs: bound the evaluator's reading, and use a new worktree per cycle. worklog.md gains the post-ratification execution table and the final gate results, and its drift table grows from fourteen entries to nineteen with the seven self-corrections marked as such. Open items are listed rather than buried: three labels that do not exist, the labels.yml parity drift, the unlaunchable design lane still worth its own issue, the vision pass that needs a prototype, and five mitigations that remain UNPROVEN named gates. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
Slice 5 still read "FAILED -- lane unlaunchable ... no findings file exists", which was true before the owner override and false after it: the pass ran on the substitute route, both lanes returned findings, and two criticals were fixed. And Deferred Scope still listed board filing as blocked on a PLAN-EVAL PASS that will never come. Both corrected, with the gate's real provenance kept visible -- cleared by owner waiver, not by an evaluator verdict. This is the third staleness catch in this run's own artifacts. The pattern is consistent: a status line written while something was true survives the event that falsified it. Refreshing the artifacts is not bookkeeping here; it is the difference between a record and a story. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
…f-assigned number Owner decision: the RFC moves to rfcs/0000-devtools-contribution.md, the repository's only documented RFC process, so acceptance numbering and merge order can be coordinated against immutable main. This closes fork F-2, the three-way RFC-home contest. The run had been living at docs/architecture/rfc/, the convention introduced by UNMERGED PR #1446 -- and had self-assigned rfc-0002. Both are corrected. rfcs/ README is explicit that numbers are assigned by a maintainer at acceptance and that 0000 is kept while drafting precisely to avoid number races between concurrent drafts, so taking a number was the run overstepping. The filename and frontmatter now both read 0000, and the template's frontmatter contract is honoured exactly. One divergence is deliberate and disclosed in a process note at the top of the RFC: the body keeps its own numbered sections rather than the template's ten headings. The template suits a few hundred lines; this is ~4,500 lines whose sections are cross-referenced by anchor throughout the evidence corpus, the findings sweep and both design triages. Restructuring would break every citation for no reviewability gain. Reference updates follow the authority rule this run has used throughout: live artifacts and every filing draft were updated; immutable evidence was NOT rewritten -- the stage-B corpus, design packs, both design-pass prompts and outputs, the evaluator record, the committed workflows and the owner's charter keep their original text. Side effect worth noting: docs:links --root rfcs now reports docs=3, so the gate covers the README and template as well as the RFC, and all three are clean. Gates: docs:links 0 broken across 3 docs, docs:accuracy PASS, 90 balanced fences, nothing touched outside rfcs/ and the run dir. Refs #1450 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DChBXWYP9LStvjQztUJV5b
|
[PHASE: PLAN] [PATH NORMALIZED — canonical The RFC now lives at What moved, and what that corrected
Two things this corrected beyond relocation:
This also closes owner fork F-2, the three-way RFC-home contest:
And it resolves a concern this run had recorded against itself: the earlier location risked pre-empting issue #1380, which schedules an RFC-location decision on One deliberate divergence, disclosedThe RFC keeps its own numbered sections rather than the template's ten headings. The template suits a proposal of a few hundred lines; this is ~4,500 lines whose sections are cross-referenced by anchor throughout the evidence corpus, the findings sweep, and both design-pass triages. Restructuring would break every citation for no gain in reviewability. Stated in a process note at the top of the RFC so it reads as a decision, not an oversight. Reference updates — and what was deliberately left aloneApplying the same authority rule this run has used throughout (
Gates after the move
Note State
Filing stays paused pending root's acceptance numbering and merge order. |
|
@openhands-agent model=openrouter/minimax/minimax-m3 output=pr-comment iterations=400 use harness SKILL
Act as a cheap-and-quick documentation accuracy evaluator. Do not edit source, documentation,
Keep the iteration budget small. Prefer one to three decisive manual checks over broad exploration, |
OpenHands Agent — CompletedOPENHANDS_VERDICT: FAIL_FIX Model: OPENHANDS_VERDICT: FAIL_FIX PR 1450 — RFC 0005 DevTools contribution architecture — documentation accuracy evaluationMode: 1. Scope and method
2. Per‑file verdict table (every changed documentation file)
3. Blocking findings
4. Commands / snippets that were hand-tested
5. Exact fixes (apply, in order)
6. Overall verdict
7. Evaluator contract compliance
This summary was generated by an AI agent (OpenHands) on behalf of the Run: https://github.com/rickylabs/netscript/actions/runs/31532951292 |
|
[PHASE: FILED] [BOARD MIGRATION EXECUTED — one shot, from the manifest] RFC 0005 is merged on
Filed — 14 new issues
DT-18 was deliberately not filed. Its open question D-0b was never decided, and filing an issue whose scope is undecided produces a ticket nobody can start. The gap stays visible in drift D-10/D-15 rather than becoming a stale card. Epic #400 — amended, not replacedA second umbrella would fragment the very board this RFC de-fragments (standing decision D-11). Preserved verbatim (checked present before the edit, not after): the ownership thesis, the three acceptance lines, and the killed-surfaces list. Rewritten: the invent-your-own-discovery premise, the dead
Successor-before-supersede — executed literally
Zero filing-time closes. Every fold/supersede/close-later carries a precondition that filing does not satisfy, so each stays open with its trigger named. No seam is unowned in the interval. Preservation guarantees — verified, not asserted
The one authorized #922-adjacent touch is the informational cross-post on #929: RFC #890's contract C8 claims a new manifest block is safely ignored by older CLIs, but Two deviations — recorded, not hidden
Open, and yours
|
Acceptance update — 2026-08-11
Owner ratified the completed RFC after all 22 adversarial/design findings were dispositioned and the separate PLAN-EVAL passed. The canonical accepted document is
rfcs/0005-devtools-contribution.md; board filing remains a post-merge operation so every issue can cite the immutablemainpath.Summary
Planning-only seed run for the NetScript DevTools Contribution Architecture RFC: a first-class
host and contribution family through which plugins add developer-facing routes, panels, inspectors,
visualizers, actions, commands, diagnostics, navigation, and deep-links.
The deliverable is architecture and contribution mechanics, not a visual refresh of the old Dev
Dashboard (#400). This PR is the commit trail for that run and is accepted and authorized to merge after required CI; board mutation remains a post-merge operation.
Scope
rfcs/(planning — canonical RFC process) · described-not-built:packages/fresh,packages/fresh-ui, plugin contribution axes, CLI plugin flowsdocs+frontendEvidence inputs referenced without closure: RFC: Frontend Contribution Layer — plugins that ship UI (dashboard · auth · ai · deploy) #890 · Epic: Frontend contribution layer — plugins that ship UI #922 · docs(rfc): runtime-versioned workers/tasks & triggers — production architecture RFC #1446 · RFC: Typed SDK client contributions #1390 · Epic: Typed SDK client contributions — credentials, transport policy, metadata, and cache-safe extensions #1348 · Epic: NetScript DevTools contribution and host architecture #400 · design: dev-dashboard revamp umbrella (analysis + Claude-Design prompts) #685 ·
feat(dashboard): visual revamp to reference bar (adversarial-gated) #780 · plan(design): Dev Dashboard E2E Claude Design prototype + production design-sync — Plan & Design ready for review #506 · [dashboard DDX-0] fresh-ui L3 blocks/ promotion + copy-source registry #410–[dashboard DDX-19] Codegen-from-UI Add-resource action #432
writable. Issues, epics, milestones, the repo label set, and other PRs are not — until owner
ratification at stage H.
The five frontend contribution surfaces
The RFC models these as distinct seams and decides dependency + ownership for each, rather than
collapsing them into one vague
frontendaxis:packages/fresh-uiSlices
ccc4c0a70research.mdfindings + deep-dive topicsValidation
Docs/RFC changeset — no TypeScript, no
packages/**orplugins/**source. The cheap CI lane isintentional, which is why
ci:skip-e2e+ci:skip-scaffoldare applied rather than left to pathclassification.
.llm/tools/run-deno-fmt.ts(scoped to changed docs + run dir)NOT_RUN— stage Ideno task doc:lintNOT_RUN— stage Ipath:line,deno doc, saved artifact, or URLNOT_RUN— stage BNOT_RUN— stage H-prepjsr-auditrubricNOT_RUN— stage ENOT_RUN— stage G, hard stopdeno task check/test/lint/arch:check/quality:scan/e2e:cliare N/A for thischangeset — stated rather than silently omitted.
Harness
.llm/runs/plan-devtools-contribution--seed/.llm/harness/workflow/seed-run.md), stages A–I.llm/runs/plan-devtools-contribution--seed/supervisor.md2256a67bf(origin/main), verified bygit fetchat bootstrap — charter and live mainagreed; no rebase
.llm/devtools-rfc-orchestrator-brief.md, committed so the run is reconstructible withoutchat history
acceptance— see phase comments belowEvaluation
daemon-attached Codex GPT-5.6 Sol high session, separate from every generator/reviewer session.
assurance is the opposite-family PLAN-EVAL plus the docs gate set above. Recorded in
drift.mdD-2.Drift / Debt
major_ui_ux_*GLM 5.2 lane is marked dormant inlane-policy.mdwhile the DevDashboard is paused; this run reactivates it for its charter-mandated design pass.
minor, accepted.N/Aby run shape (above).minor, accepted.Pre-registered before the design pass runs so no artifact can later cite it as reasoning
evidence.
minor, accepted..llm/harness/debt/arch-debt.mdat stage E, not silently in the RFC.Definition of Done
rfcs/0005-devtools-contribution.mdwith diagrams, normative contracts, API examples,explicit alternatives, threat model, lifecycle, failure behavior, package ownership, frontend
host split, and implementation roadmap
committed one-shot filing manifest — draft text only
"safe to defer"
FAIL_PLAN×2); every supervisor-fixablefinding closed; Plan-Gate then cleared by written owner waiver (drift D-18) — not an evaluator
PASSdocs:links3 docs / 0 broken,docs:accuracyPASS); worktree clean and pushed