# Row 256 (#1761) build notes (append only) ## 2026-10-22 b1 (Honker) Design d2 8c50481d2 was accepted by Webby (webby-0123). The code is on honker/row256 from be2b008cc. ### Correction to the design: the non-creative END_PROTECTED definition is `assistant` - DESIGN.md (d1 and d2) says "the chief of staff" for the END_PROTECTED definition that isn't creative, following the brief's wording. In the code that definition is `assistant`: - `THREAD_DEFINITION = "assistant"` (vocabulary.mjs:203). - `END_PROTECTED = THREAD_DEFINITIONS = [assistant, ...CREATIVE_DEFINITIONS]`. - The `chief-of-staff` definition (the `chief` instance) isn't END_PROTECTED. Its delete refuses `organization-instance-referenced`, because it is launch.by, and that is unchanged. - So T3 and M2 use an `assistant` instance. The code is the same either way: protectedRefusal refuses every END_PROTECTED definition that isn't creative. - DESIGN.md isn't edited after approval; this note is the record. ### Persona file on delete (brief item 4) - `/personas//.md` is left in place. Nothing removes it, so there is no new open and no O_NOFOLLOW test. - Nothing reads it once the entry is gone. bundle.mjs reads it only for a launched creative instance, and the name is retired, so `add` refuses it (instance-settings.mjs, organization-instance-retired) and no later instance picks up the old persona. - The human removes the file by hand if they want it gone. ### What changed - packages/business/src/instance-settings.mjs: - New `protectedRefusal(document, instance, actor)`. - `deleteRefusal(..., actor)`, `planDelete(..., actor)` and `checkDelete(..., actor)` take the actor, and set op delete passes its actor. - `read(business, actor)`. Its `endProtected` is `protectedRefusal(...) !== null`. - commit's and fire's returned listings read with the writer's actor. - The comment at :28-31 is rewritten. - packages/bus/src/runtime.mjs: `instances` and `instances.check` pass the actor. There is no broker change. - packages/webui/src/public/agents.js: comment only. - docs/plans/DEFERRED.md: a closing line on the creative-delete entry. - Tests: - business instance-settings.test: T1-T3 and T5 in one test, T4 in its own test, and the row 213 test's `endProtected` for the human's add is now `false`. - business lifecycle-settings.test: checkDelete with the actor; fire unchanged. - bus creative.test: T6 on the real runtime. - webui agents-browser.test: T7/T8. The comment on the existing assertion is reworded. ### Mutants for the gate (exact-once replacements, runb8 shape) - M1 (instance-settings.mjs): ` if (actor === document.human) return null;` becomes ` return null;`. The kill is instance-settings.test "row 256 T1-T3". - M2 (instance-settings.mjs): move the human check ahead of the creative one. Replace ` if (!CREATIVE_DEFINITIONS.includes(definition)) return { code: "organization-definition-refused" };\n if (actor === document.human) return null;` with ` if (actor === document.human) return null;\n if (!CREATIVE_DEFINITIONS.includes(definition)) return { code: "organization-definition-refused" };`. The kill is "row 256 T1-T3" (T3). - M3 (instance-settings.mjs): ` endProtected: protectedRefusal(document, name, actor) !== null,` becomes ` endProtected: END_PROTECTED.includes(entry.definition),`. The kills are "row 256 T1-T3" (T5) and bus creative.test T6. - M4a (runtime.mjs): `instances.checkDelete(id,args.instance,actor)` becomes `instances.checkDelete(id,args.instance)`. The kill is creative.test "row 256 T6". - M4b (instance-settings.mjs): `planDelete(old, instance, actor), { revision` becomes `planDelete(old, instance), { revision`. The kills are "row 256 T1-T3" (T1) and creative.test T6. ### Tests not run None of these have run. They wait for Sage's CLEAR, after the rebase onto 236. ## 2026-10-22 b2 (Honker): Webby's N1 (webby-0124) - Two comments said the chief of staff where they mean the assistant. Both now name the assistant: - instance-settings.mjs:30, "The assistant is refused for every actor, the human included." - agents.js:46, "true for the assistant and on the tester's." - Comment-only. The mutant strings above are unchanged and still occur once. ## 2026-10-22 gate results (Honker, doc-only after landing) This entry was added after landing. It records the gate on f12441d4f, which was the candidate, with manifest-r3 01eb75aa9d51367337f4eda855ad5271c5e22b14650aa5a2130333d275a7ab90. ### Rebases - r2 1e761962a onto 236's landing bd5f11ded, and r3 f12441d4f onto 274's landing 0165be266. In both range-diffs, every commit is `=` and nothing conflicted. - The landing patch-id, from `git diff BASE TIP | git patch-id --stable`, is b28e63746f8c1bda1c49c021447c61f2df6ea0d0 on both bases. - Before that, Sage granted an early slot on 1e761962a (sage-2567), limited to steps 1-2. It was an early signal, not gate evidence: 31/0/0, and M1-M4b were all killed. ### Full gate (Sage's slot, sage-2586, 10:33Z to 10:50Z) - The gate tested a merge of the candidate onto origin/refactor 0165be266, tree ced6bf5f8, which matches the candidate's own tree. The DEFERRED.md fallback did not fire. - Touched test files, each run whole: instance-settings, lifecycle-settings, bus creative, and webui agents-browser. 31 pass, 0 fail, 0 skip. - Mutants: M1, M2, M3 (on instance-settings and on creative), M4a, and M4b (on instance-settings and on creative). All were killed by the assertions listed above. Every restore matched the original blob. - Package suites, all 18 at rc=0, 3757 pass, 0 fail: | Package | Pass | | --- | --- | | business | 231 | | bus | 788 | | cli | 832 | | control-board | 124 | | conversation | 183 | | discord | 192 | | harness | 151 | | ledger | 89 | | library | 83 | | mosaic | 69 | | plugins | 111 | | processing-control | 62 | | project | 41 | | queue | 156 | | runs | 43 | | seat | 167 | | tasks | 100 | | webui | 335 | - scripts/test-*.sh, all 10 at rc=0: | Script | Pass | | --- | --- | | auth | 15 | | conductor | 17 | | config | 31 | | discord | 81 | | extension-package | 18 | | foundation | 44 | | land-work | 86 | | queue | 28 | | release | 14 | | task | 91 | - Skips: 4, none on a touched path. - The webui editor rebuild byte check, because esbuild 0.28.1 is installed and the check needs 0.28.2. - test-queue verify and render --check, because the gate worktree is not the canonical root. - test-task live provider cases, counted twice. Row 244 makes no provider call in the gate. - Leftovers: none. - Evidence is under /mnt/storage/scratch/honker-t/r256/: run-20261022T103355Z, gate-20261022T103414Z, and console-r3.txt. ### Review and landing - Webby approved manifest round 1 in webby-0129 (REVIEW-r3.md, 00502a740). The approval was recorded at rev 3185, comment c30519. - Sage landed f12441d4f as a fast-forward at 10:57Z. #1761 is closed with comment c30520.