diff --git a/.llm/2026-08-11-devtools-contribution-rfc-seed.md b/.llm/2026-08-11-devtools-contribution-rfc-seed.md new file mode 100644 index 0000000000..43b63b8a0f --- /dev/null +++ b/.llm/2026-08-11-devtools-contribution-rfc-seed.md @@ -0,0 +1,90 @@ +# 2026-08-11 — DevTools contribution architecture: seed run, RFC 0005, board migration + +**Run:** `plan-devtools-contribution--seed` · **Shape:** seed run (stages A–I), **planning-only** +**Supervisor:** Claude Opus 5 · high · `session_01DChBXWYP9LStvjQztUJV5b` +**Branch:** `plan/devtools-contribution` · **PR:** #1450 (**merged**) · **Baseline:** `2256a67bf` + +## What shipped + +- **`rfcs/0005-devtools-contribution.md`** — merged on `main` at `03680f6e8`. ~4,500 lines, + 15 sections. First numbered RFC ever merged under the documented `rfcs/` process. +- **Board migration**, executed once: 14 new issues (#1468–#1481), epic #400 amended, 6 existing + issues amended across 4 rows, `0.0.14`'s milestone description corrected. +- **Full planning corpus** under `.llm/runs/plan-devtools-contribution--seed/` — 26 research + findings, S-1…S-22 synthesis, 8 design packs, supersession map, filing manifest, decision brief, + **D-1…D-20** drift log, FILING-LOG. + +## The three owner decisions that shaped it + +1. **Do not waive the adversarial design pass** — when the GLM 5.2 lane turned out to be + unlaunchable (D-10), substitute **Qwen 3.8 Max** rather than skip. Then **split the lane**: Qwen + takes architecture, **Kimi K3** takes pure UI/UX (D-15/D-16). +2. **No deferred acceptance** — every one of the 22 findings closes as fixed or declined-with-reason. +3. **Waive PLAN-EVAL** after two `FAIL_PLAN` cycles, once every supervisor-fixable finding was + closed (D-18). + +The lane split paid for itself. Qwen and Kimi could not see each other's output and **independently +reported the same three defects** — string-only table cells, the §5 `traces/` route contradiction, +and the under-specified ranked feed. Convergence between an architecture reviewer and a UX reviewer +is the strongest evidence either pass produced, and it would have been invisible under one merged +reviewer. + +## What the run got wrong, and how it was caught + +Eight of the twenty drift entries correct **this run's own earlier claims**. The ones worth carrying +forward: + +| # | The error | How it surfaced | +| - | --------- | --------------- | +| **D-4** | Planned a Markdown `deno fmt` gate that does not exist — `fmt.include` is `packages/**`/`plugins/**` TS only. It would also have rewritten verbatim upstream evidence | Reading the config instead of assuming it | +| **D-7** | My corpus understated a security finding: bare `--allow-read`/`--allow-write` is **whole-filesystem**, not project-scoped. A subagent was right and I was wrong | Subagent contradicted the supervisor and won | +| **D-8** | Board claims were wrong in a way that **reversed** a recommendation I was about to make — `CR-DDX-HOSTAGNOSTIC` does exist on #400, and a 2026-07-19 owner-ratified train had already re-milestoned the children | Checking the live board rather than the corpus | +| **D-17** | I piped both design passes through `tail -40`, **truncating my own evidence** and losing most findings. Kept the truncated tails as evidence, re-ran with full redirection — then had to correct D-17 itself for overstating its remedy | Counting findings against the reported severity totals | +| — | A **stale `worklog.md`** claimed the GLM pass had run. That is precisely the false-green this RFC's §11.7 exists to prevent. Three more stale rows found on the follow-up sweep | Re-reading my own artifacts as an adversary would | + +**The one that repeated:** `git commit -m "…"` ate backticked identifiers **twice**, requiring an +amend + `--force-with-lease` both times. The memory rule is now unconditional — *never* `-m` in this +repo, no judgement call — because the first, conditional version left room for exactly the judgement +that failed the second time. + +## Verified claims worth reusing + +- **`PluginInstallerManifestSchema` ends in `.strict()`** — `packages/plugin/src/protocol/manifest.ts:283`. + RFC #890's contract C8 states older CLIs *"ignore the block"*; `.strict()` **hard-rejects** unknown + keys, so an older CLI fails manifest parsing outright rather than degrading. Cross-posted to #929; + handled for the DevTools family by #1474 (fork F-3, `.passthrough()` **before** any + manifest-visible pointer). *(Initially miscited `:282` — corrected in D-9.)* +- **`plugins/streams` has no oRPC contract surface at all** — + `arch-debt.md#streams-connector-sound-deferred` (`:450`). The RFC requires the contract-provenance + panel to render a **labelled degraded state citing that debt**, not an empty list. Anchor and line + range verified at close. +- **Six canonical trigger kinds**, not eight — `packages/plugin-triggers-core/src/domain/constants.ts:5-29`. + +## Close-out state + +| Item | State | +| --- | --- | +| `agentic:leak-check` | **clean** — `survivors: []`, aspire `ok`, docker `ok` | +| Run worktrees | 4 run-owned remain (`ns-devtools-d2-{qwen,kimi}`, `ns-devtools-planeval{,-c2}`), consistent with repo practice. **Not removed** — no cleanup was authorized | +| `arch-debt.md` | **No entry written.** See obligation below | +| `lessons/` | **No promotion.** The promotion rule needs a repeated lesson across runs; D-17 and the backtick failure are one run each. The backtick rule went to session memory instead | +| Board | migrated; #922 and its 24 children **untouched** | + +### Recorded obligation — one arch-debt entry is warranted and was not written + +**#1481** (`/design` ships ungated in `fresh-ui`) is a live doctrine violation sitting in +`Backlog / Triage`, i.e. **without a time-bounded plan**. Doctrine +(`docs/architecture/doctrine/10-codebase-verdict-and-handoff.md:184-195`) permits a violation to +remain only when recorded in `arch-debt.md` **with** such a plan. + +`.llm/harness/debt/arch-debt.md` is **outside this run's mutation boundary** (`rfcs/**` and the run +dir only), and PR #1450 is already merged — writing the entry needs its own PR. Recording it here +rather than writing it silently or dropping it. + +## Pointers + +- RFC: [`rfcs/0005-devtools-contribution.md`](https://github.com/rickylabs/netscript/blob/main/rfcs/0005-devtools-contribution.md) +- Filing record: `.llm/runs/plan-devtools-contribution--seed/filing/FILING-LOG.md` +- Findings closure: `.llm/runs/plan-devtools-contribution--seed/design/ux-evidence/FINDINGS-SWEEP.md` +- Drift: `.llm/runs/plan-devtools-contribution--seed/drift.md` (D-1…D-20) +- Ledger comment: https://github.com/rickylabs/netscript/pull/1450#issuecomment-5258590797 diff --git a/.llm/runs/plan-devtools-contribution--seed/context-pack.md b/.llm/runs/plan-devtools-contribution--seed/context-pack.md index 2b1c617fff..9b51bb4bf5 100644 --- a/.llm/runs/plan-devtools-contribution--seed/context-pack.md +++ b/.llm/runs/plan-devtools-contribution--seed/context-pack.md @@ -39,13 +39,28 @@ an evaluator PASS), and **board filing**. | **Sweep** | 22 findings: **21 fixed, 1 declined with re-entry, 0 deferred** | | **Cross-ref** | **0 contradictions, 0 duplications** vs #890 / RFC-0001 / RFC-A; 21 internal defects fixed | -## Next Steps - -1. **File once** from `filing/filing-manifest.md` — 14 new issues, 1 not filed, 6 existing amended - via 4 rows. **Preserve the 2026-07-19 train. Do not touch #922's children. Do not create labels.** -2. Write `FILING-LOG.md` mapping every draft ID → live issue number; commit it. -3. Post the filing ledger as a PR comment; update the PR body; advance `status:`. -4. Close the run: `arch-debt.md` entries if any, session record. +## Next Steps — **all executed 2026-08-11; the run is closed** + +1. ~~File once from `filing/filing-manifest.md`~~ — **done.** #1468–#1481 filed, #400 amended, 6 + existing amended via 4 rows. Train preserved (no issue re-milestoned), #922's 24 children + untouched, no labels created. Record: `filing/FILING-LOG.md`. +2. ~~Write `FILING-LOG.md`~~ — **done**, with both deviations recorded (DT-8 six-state; `rfcs/0005` + links). +3. ~~Post the ledger; update the PR~~ — **done**: + https://github.com/rickylabs/netscript/pull/1450#issuecomment-5258590797 +4. ~~Close the run~~ — **done.** `agentic:leak-check` clean (`survivors: []`); session record at + `.llm/2026-08-11-devtools-contribution-rfc-seed.md`; **no `arch-debt.md` entry written** — one is + warranted for #1481 but that file is outside this run's mutation boundary, so the obligation is + recorded in the session record instead of being taken silently. + +### Left for the owner + +- **#1468** was closed as `DUPLICATE` by the owner 9 min after filing → the RFC's `tracking-issue` + frontmatter on `main` still reads `pending`; repointing it at **#400** needs a follow-up PR. +- **#734** folds but stays open pending owner confirmation (fork **F-4**). +- **#507** / **PR #780** are close-later; #780 needs its two-file salvage into the #509 lane first. +- **D-0b** undecided → **DT-18 unfiled**, deliberately. +- One `arch-debt.md` entry for **#1481**, per the obligation above. ## Gates diff --git a/.llm/runs/plan-devtools-contribution--seed/filing/FILING-LOG.md b/.llm/runs/plan-devtools-contribution--seed/filing/FILING-LOG.md new file mode 100644 index 0000000000..02f0055c8c --- /dev/null +++ b/.llm/runs/plan-devtools-contribution--seed/filing/FILING-LOG.md @@ -0,0 +1,101 @@ +# FILING-LOG — DevTools contribution RFC + +**Filed:** 2026-08-11 · **By:** supervisor session `session_01DChBXWYP9LStvjQztUJV5b` (Claude Opus 5 · high) +**Ratification:** owner in-turn, drift **D-19** · **Board migration approved:** owner in-turn, 2026-08-11 +**RFC of record:** [`rfcs/0005-devtools-contribution.md`](https://github.com/rickylabs/netscript/blob/main/rfcs/0005-devtools-contribution.md) — **merged on `main`** at `03680f6e8`, via PR #1450 + +> **PLAN-EVAL:** cleared by **written owner waiver**, drift **D-18**. The formal Codex GPT-5.6 Sol +> evaluator returned **`FAIL_PLAN` twice**; every supervisor-fixable finding was closed before the +> waiver. **No evaluator `PASS` exists — do not cite one.** + +## Preconditions at filing time + +| # | Precondition | Evidence | +| - | ------------ | -------- | +| P0 | RFC merged on `main` and path verified **before** any issue linked to it | `git ls-tree origin/main -- rfcs/` → `rfcs/0005-devtools-contribution.md`; `origin/main` = `03680f6e8`; PR #1450 `MERGED` 2026-08-11T20:27:09Z | +| P1 | Plan-Gate cleared | **owner waiver**, drift D-18 | +| P2 | Blocking forks ratified + filing authorized | drift D-19 | +| P3 | Adversarial design pass satisfied | owner-approved substitute route — Qwen 3.8 Max + Kimi K3, drift D-15/D-16; 22 findings closed | +| P4 | F-1 / F-3 resolved | drift D-19 — F-1 self-contained `packages/devtools-core` first; F-3 `.passthrough()` before any manifest-visible pointer | + +## Draft ID → live issue + +| Draft | Slice | Live | Milestone | Action | +| --- | --- | --- | --- | --- | +| DT-RFC | — | **#1468** | `0.0.6` | NEW — RFC 0005 tracking issue. **Closed by the owner as `DUPLICATE`** at 2026-08-11T20:36:06Z, ~9 min after filing. Left closed — an owner disposition, not a filing error. The RFC's tracking role therefore sits on **#400** | +| DT-1 | W0-a | **#1469** | `0.0.15` | NEW — disposable probe | +| DT-2 | W0-b | **#1470** | `0.0.15` | NEW — disposable probe | +| DT-3 | W1-a | **#1471** | `0.0.15` | NEW — **successor to #412** | +| DT-4 | W1-b | **#1472** | `0.0.15` | NEW — **successor to #424** | +| DT-5 | W1-c | **#1473** | `0.0.15` | NEW | +| DT-6 | W1-d | **#1474** | `0.0.15` | NEW — F-3 precondition | +| DT-7 | W2-a | **#1475** | `0.0.15` | NEW — boundary vs #930 stated | +| DT-8 | W2-b | **#1476** | `0.0.15` | NEW — boundary vs #937/#938 stated | +| DT-9 | W3-a | **#1477** | `0.0.15` | NEW — **co-successor to #424** | +| DT-10 | W3-b | **#1478** | `0.0.15` | NEW | +| DT-11 | W4-a | *(none)* | — | **AMEND #427** — folded, stays open as the slice | +| DT-12 | W4-b | **#1479** | `0.0.15` | NEW | +| DT-13 | W5-a | *(none)* | — | **AMEND #423** — boundary vs #934 stated | +| DT-14 | W5-b | **#1480** | `0.0.15` | NEW — public-surface change, consumer gate | +| DT-15 | W6-a | *(none)* | — | **AMEND #428** — boundary vs #933 stated | +| DT-16 | W6-b | *(none)* | — | **AMEND #429 / #430 / #431** — boundary vs #944; streams degraded state required | +| DT-17 | F-20 | **#1481** | `Backlog / Triage` | NEW — outside the epic | +| DT-18 | D-0b | **NOT FILED** | — | D-0b never decided; gap stays recorded in drift D-10/D-15 | + +**14 new issues** (#1468–#1481) · **1 not filed** · **6 existing issues amended via 4 rows**. + +## Epic + +**#400 amended** — not replaced (standing decision D-11; a second umbrella would fragment the very +board this RFC de-fragments). Preserved **verbatim**: the ownership thesis, the three acceptance +lines, and the killed-surfaces list. Rewritten: the invent-your-own-discovery premise, the dead +`beta.6` prose, and the S1–S13 screen list → RFC 0005 pointers. Milestone unchanged +(`Backlog / Triage`). + +`CR-DDX-HOSTAGNOSTIC` — raised on #400 on 2026-07-06 from epic #510 and **never resolved** — is +recorded as **accepted** (owner fork F-11). This un-dangles #544. #544 itself was **not** edited; +that body belongs to #510's lane. + +## Successor-before-supersede ordering — as executed + +| Superseded | Successor(s) | Order actually used | State now | +| --- | --- | --- | --- | +| **#412** | **#1471** | successor filed **first**, then the supersede comment | **open** — closes when #1471 is delivered | +| **#424** | **#1472**, **#1477** | successors filed **first**, then the supersede comment | **open** — closes when both are delivered | + +**Zero filing-time closes.** Every `FOLD` / `SUPERSEDE` / `CLOSE-LATER` was recorded as a comment +and left open, because each has a precondition that filing does not satisfy. No seam is left +unowned in the interval. + +## Comments posted + +- **Supersede:** #412, #424 · **Fold:** #427, #734 · **Close-later:** #507 +- **Re-baseline (AMEND):** #414, #415, #420, #423, #426, #428, #429, #430, #431, #551 +- **Epic:** #400 body rewrite + the `CR-DDX-HOSTAGNOSTIC` resolution +- **PR #780:** close-later + salvage precondition — `DESIGN-LANGUAGE.md` and `DS-UPLIFT-BACKLOG.md` + named by exact branch path for the **#509** lane; `HOME-SPEC.md` / `ROLLOUT-DOCTRINE.md` + explicitly *not* salvaged (they encode the per-screen-bespoke doctrine §11.3.3 contradicts). + **#509 itself was not edited** — it is on the KEEP list, and moving files into its lane is that + lane's call. +- **Cross-post:** **#929** — the *single* authorized #922-adjacent touch, reporting the `.strict()` + defect that #890 contract C8's "older CLIs ignore the block" claim rests on. Informational; it + changes no label, milestone, or scope. + +## Preservation guarantees — verified + +| Guarantee | Result | +| --- | --- | +| **#922 and its 24 children untouched** | ✅ zero body/label/milestone/state changes. #933 and #944 received **nothing**. The only #922-adjacent action anywhere was the informational #929 cross-post | +| **2026-07-19 milestone train preserved** | ✅ no issue re-milestoned. New sub-issues default to `0.0.15`, matching the ratified train | +| **No undocumented labels created** | ✅ every label used exists in both `.github/labels.yml` and live. `epic:devtools`, `area:devtools`, `area:frontend` do **not** exist and were **not** created — `epic:dev-dashboard` used instead | +| **No milestones created; no issue moved** | ✅ only edit was stripping the stale "Dev dashboard (thin, contribution-based)" clause from `0.0.14`'s **description** (owner fork F-9). Its 11 open issues are unchanged | +| **No closing keyword in any issue body** | ✅ `Part of #400` only | +| **Exactly one `status:` per issue** | ✅ `status:triage` at filing | + +## Deviations from the manifest — recorded, not silent + +1. **DT-8 title says "six-state", the manifest said "five-state."** The manifest predates Amendment A, + which added a sixth quarantine state (`zone-contract-mismatch`) to close a Qwen finding. Filing the + manifest's literal title would have contradicted the merged RFC. **Substance unchanged.** +2. **All issue bodies cite `rfcs/0005-…`, not the manifest's `rfcs/0000-…`.** Per the owner's + instruction to use the canonical `main` link; the number was assigned at acceptance. diff --git a/.llm/runs/plan-devtools-contribution--seed/leak-report.md b/.llm/runs/plan-devtools-contribution--seed/leak-report.md new file mode 100644 index 0000000000..236f1c32c9 --- /dev/null +++ b/.llm/runs/plan-devtools-contribution--seed/leak-report.md @@ -0,0 +1,7 @@ +# Run resource leak report + +Generated: 2026-08-11T20:39:50.433Z +Worktree: `/home/codex/repos/ns-rfc-devtools-contribution` +Aspire probe: ok +Docker probe: ok +No surviving Aspire resources found.