brief: the human deletes a creative instance, chained after row 194 (REQ-COS-3, mos-1215); window plan W11 posts on 435

This commit is contained in:
jason.woltje committed 2026-10-21 16:20:12 -05:00
1 parent 3fb00018e0
commit b79ad5f2cb
2 files changed
+51 -1

No files matched your search

@@ -138,7 +138,7 @@ handle that.
| W5 | Sage, on Mos's go | The same command without `--plan`. Exit 0, `result ok`, and every gate check passes, `pm_launched` included. Record the activation id, the backup path, STAMP and the backup SHA256SUMS sha256. Then `status`. |
| W9 | Sage, after Mos verifies W5 | The 177-185 W9 list, plus: the webui journal since the W5 stamp (with `UTC`) has no `Sign-in:` line; `/proc/<Console pid>/cwd` names the NEW copy; `$DATA/console/tester.sock` is 0600 in a 0700 `console/`; `peercred-starts.jsonl` gained one line for this start; the bus journal has the grant reconcile and sweep lines and no `library:` line; the pm's requirements read gives 1.10 with 70 ids. |
| W10 | Sage | The matrix again, as `$WIN/matrix-new.txt`, identical to `matrix-old.txt` apart from the lines the pin changes, each one named. The two tester reads through `tester-http.mjs` match P6's. Port 7333 has no listener (`ss -ltn`). Then P4 again. A write without a signed-in session must still be refused. That's Console POST through the main port, with no session. This is the check mos-1195 asks for before phase 2 is done, so I run it here too, as a baseline. |
| W11 | Sage | STATE report in `$WIN/STATE.md`, posted on P19 386 and 412 and on the J2 task, whose id I confirm by title before P0, and on the Gitea issues for 190, 199, 210, 234 and 196. |
| W11 | Sage | STATE report in `$WIN/STATE.md`, posted on P19 386, 412 and 435 (J2, mos-1215), and on the Gitea issues for 190, 199, 210, 234 and 196. |
| W12 | Sage, after W11 | Row 66's live check (Vikunja #454). One Claude Code managed session with a prompt that draws a known tell, then the operator note on the RESULT, the next-turn notice and the `unslop.jsonl` counts. Backup first (Q173). Pi isn't run (#383). |
## Stop conditions and rollback
@@ -0,0 +1,50 @@
# Brief: the human deletes a creative instance (REQ-COS-3, after row 194)
Sage, 2026-10-21, for mos-1214 item 5 and mos-1215 item 3. Owner Honker, reviewer Webby, gate owner Sage.
Chained after row 194: `deleteRefusal` and the delete path land in 194, so this row builds on 194's
landing. The row has to land before the v1 tag for 10-27. If it slips past that date, Sage tells Mos before
194's v1 tag (mos-1215).
## Why
REQ-COS-3 (`docs/prd/mosaic-stack.md:342`) says "Only the user deletes an instance." Creative entries are
instances: they sit in the business file's `instances`, and only the human's `instances.set` adds or changes
one (C2-08 M10, row 213). Row 213 made every creative definition END_PROTECTED (`vocabulary.mjs:195`,
`END_PROTECTED = THREAD_DEFINITIONS`). In row 194, `deleteRefusal` refuses END_PROTECTED for every actor
(`organization-definition-refused`), so nobody can delete a creative instance. The human can only delist one
with `launch: false`. This row lets the human delete one, which matches END_PROTECTED's intent: a protected
end goes to the human (sage-0525).
## What this row does
1. **Human-only delete of a creative instance.** Pass the actor into `deleteRefusal`, and through every
caller: the broker's check at the verb, the launcher pass's `set op delete`, the CLI and the Console.
- A creative definition (`CREATIVE_DEFINITIONS`) whose actor is the business file's `human` passes this
check and goes on to the remaining checks (references, kept, credentials).
- Any other actor still gets a refusal. Use the code `creativeHumanOnly` gives
(`organization-creative-human-only`), so the refusal says why.
- Every other END_PROTECTED definition (the thread definitions that aren't creative, such as the chief
of staff) still refuses `organization-definition-refused` for every actor, the human included.
2. **Fire stays as it is.** `role.fire` and `instance.fire` keep refusing END_PROTECTED for every actor.
REQ-COS-3's fire is the chief's action, and the chief can never hire a creative instance.
3. **Agents page.** Row 194 hides Delete on `endProtected`. Offer Delete on a creative instance only on the
human's page, from the same server predicate, and never on the tester listener. Add one browser test for
each side.
4. **Persona file.** Say in BUILD.md what happens to `<configDir>/personas/<business>/<instance>.md` on
delete. The smallest choice is to leave it in place and record that. If you remove it, open it with
`O_NOFOLLOW` as row 213 reads it, and add a test.
5. **DEFERRED.** Close row 194's DEFERRED entry for human delete of a creative entry, and name this row in
it.
## Boundaries
- No change to who may add or change a creative instance (M10), or to `role.hire`'s bounds.
- No change to fire, veto or `launch.keep`.
- No test touches `~/.mosaic-dev`, `~/.config/mosaic-dev`, the live units, a slot file, .53 or .54.
## Gate
Webby approves the manifest. On Sage's slot, every touched test file passes whole, along with the
business, bus, cli and webui suites whole and every `scripts/test-*.sh`. Two mutants must be killed: one
that lets a non-human actor delete a creative instance, and one that lets the human delete a non-creative
END_PROTECTED instance.