Compare commits

..
3 changed files with 399 additions and 11 deletions

No files matched your search

@@ -0,0 +1,47 @@
# Case 1 business file: project key must match the project file (#414 stage 2)
Written 2026-10-24 by Sage for ops-0288 and Mos's ruling mos-1563.
## Brief: re-key the Case 1 project to stack
**Why.** The .53 stage 2 run on 99930362e stopped at step 8 (ops-0288). `case2-install.sh --profile factory`
refused with:
`validate: mosaic business: project file /srv/mosaic/src/mosaic-stack/.mosaic/project.json has id stack, but
business mosaic-stack declares it as mosaic-stack`. Row 323's `docs/guides/case1-business.mosaic-stack.json`
keys its one project `mosaic-stack`. The repo's `.mosaic/project.json` has id `stack`, and the loader requires
the key to equal that id (packages/business/src/cli.mjs:80, packages/cli/src/config.mjs:67). Row 323's test
missed it because it validates against a scratch root with no project file, which only warns (cli.mjs:74-78).
**Ruling (mos-1563).** Fix the business file. Don't touch the project id: `stack` is read elsewhere.
**What to change.**
1. In `docs/guides/case1-business.mosaic-stack.json`, rename the `projects` key from `mosaic-stack` to
`stack`. Keep its `root` (`/srv/mosaic/src/mosaic-stack`). Business id stays `mosaic-stack`. Change nothing
else in the file.
2. A new test file, `packages/business/tests/case1-project-key.test.mjs`, that validates the committed case1
file against the repo's own `.mosaic/project.json`, so a mismatch fails in CI instead of on a host:
- read the repo's `.mosaic/project.json` and assert the case1 file has exactly one project whose key equals
its `id`;
- run the business `validate` path (the same one cli.mjs:80 runs) with that project's root pointed at a
scratch copy holding the repo's real `.mosaic/project.json` bytes, and assert it passes with the project
reported `valid`, not `absent`;
- a negative case: the same run with the key set back to `mosaic-stack` refuses with the cli.mjs:80
message.
3. The one old-test line this change breaks, `packages/business/tests/case1-business-file.test.mjs:70`
(`assert.deepEqual(b.projects, { "mosaic-stack": ... })`), changes its key to `stack` and nothing else. This
edit has Mos's go (mos-1564, under mos-1272). Don't change any other line of any old test. If another old
test reds, stop and report it.
**Gate.** Use `export TMPDIR=$(mktemp -d /mnt/storage/scratch/tmp/XXXXXX)` (BRIEF-TEMPLATE Gate). On my CLEAR
only: the new test file whole, then the packages/business suite whole. One mutant: set the case1 key back to
`mosaic-stack`, show the new test red, restore and check the bytes. The cli suite counts from my landing gate.
**Boundaries.** No host action, no .53 contact, no credential reads, no queue writes, no push to refactor.
Work in a new worktree off refactor at 99930362e or later, on branch `goldie/row325`. Push the branch and
report the tip, base and manifest to Sage and to the reviewer. Record design choices in
agents/goldie/work/queue-325/BUILD.md.
**Acceptance.** At a landed commit, `case2-install.sh --business mosaic-stack --business-file
docs/guides/case1-business.mosaic-stack.json --profile factory` passes step 8's validate against
`/srv/mosaic/src/mosaic-stack/.mosaic/project.json`, and the new test fails if the key and the project id
drift apart again.
+3 -2
View File
@@ -33,7 +33,7 @@ Gaps found while working go to `docs/plans/DEFERRED.md`, not here.
<!-- mosaic-queue:begin -->
Generated from `docs/plans/queue.json` revision 3778 by `queue render`. Do not edit between the markers; change the queue with `scripts/mosaic queue`.
Generated from `docs/plans/queue.json` revision 3788 by `queue render`. Do not edit between the markers; change the queue with `scripts/mosaic queue`.
| # | Piece | Owner | Issues | State | After | Gate | Brief | Note |
|---|---|---|---|---|---|---|---|---|
@@ -359,8 +359,9 @@ Generated from `docs/plans/queue.json` revision 3778 by `queue render`. Do not e
| 320 | Case 1/2 host fixes for the 433 P1 rerun: hostcheck item 5 mode 750, run sheet bundle verify, case2-unit --claude @, stack-copy unreadable cwd, notify.json step and precheck, mosaic wrapper step (10-27 path) | gladstone; reviewers morgana | #1816 | required; done | — | Morgana approves. Touched test files run whole (case1-hostcheck, case2-unit, case2-install, stack-copy) and the 8 named mutants are killed; Sage's full landing gate runs every package suite and every scripts/test-*.sh. After landing Mos sends ops-01 the new N. (sage) | `docs/plans/2026-10-23_host-fixes-1816-brief.md` § Brief: hostcheck item 5, bundle verify, case2-unit @, stack-copy cwd | LANDED 094124b4e 21:53Z (replay of faf55618e onto 45e3ca7bd, code paths patch-id equal, log appends in one final commit). F1-F6 hostcheck item 5, bundle verify, case2-unit scoped paths and cwd, precheck notify decision, run sheet 9a notify dirs 0700, wrapper step. Morgana APPROVE r2 c31403 rev 3715. Full gate GREEN 21:53:00Z, 0 fail (mos-1453/1455/1456). Vikunja 614 done. 433 P1 reruns on this N (mos-1532). |
| 321 | F7, F10, F11: run sheet wrapper step umask and node PATH under sudo; adopt step after a first install; --no-rehearsal on the first upgrade; wait for healthz 200 before a precheck (433, ops-0271/0274/0275); docs only | gladstone; reviewers boyd | #1817 | required; done | — | Boyd (Codex) approves. A git grep with a positive control shows no test reads the changed run sheet lines; BUILD.md records the diff and the grep. Doc only, lands with any row (mos-1544). (sage) | `docs/plans/2026-10-23_host-fixes-1816-brief.md` § Brief: F7, the wrapper step's PATH and umask under sudo | LANDED 5283d3745, 3fd5307e1, 3569bf54f: cherry-picks of b5d4d7903, d9400f0d3, 9aae73ade with equal patch-ids. Doc only. Pushed tip 3569bf54f 23:32:54Z 10-23. Boyd APPROVE c31450 rev 3757, grep with positive control in BUILD.md. Rode the full gate GREEN 23:32:28Z on 3569bf54f. Live unchanged 45dca69f6. |
| 322 | F8/F9: case2-install.sh runs the library persona import from the stack copy, and its refusal carries the error line (433 Run B, ops-0273) | goldie; reviewers morgana | #1818 | required; done | — | Morgana approves (install path). The new case2-install test fails on 094124b4e and passes on the candidate; a mutant restoring REPO at :185 is killed; Sage's full landing gate runs every package suite and scripts/test-*.sh. Then ops-01 reruns Run B P1. (sage) | `docs/plans/2026-10-23_host-fixes-1816-brief.md` § Brief: F8 and F9, the library persona import runs without the clone's node_modules | LANDED 467b05fe2, cherry-pick of 7b4ea4217 on 860afc2b6; added and removed lines identical, patch-id differs only by BUILD-LOG/SESSIONS append context (both sides kept). Pushed with tip 3569bf54f 23:32:54Z 10-23. Morgana APPROVE c31451 rev 3758, N1-N3 non-blocking. Sage full gate GREEN 23:32:28Z on 3569bf54f, all suites 0 fail, every scripts/test-*.sh rc 0. Next: ops-01 Run B P1 rerun on 467b05fe2 (mos-1553). Live unchanged 45dca69f6. |
| 323 | Case 1 factory business file for .53: docs/guides/case1-business.mosaic-stack.json plus a loader and factory-check test (#414 stage 2, ops-0277) | goldie; reviewers duckworth | #1819 | in-review, round 1, request posted | — | Sage full gate: all package suites except queue plus every scripts/test-*.sh (mos-1455); Duckworth review; new test file and one bus.tester mutant on CLEAR (sage) | `docs/plans/2026-10-23_case1-business-file-brief.md` § Brief: the Case 1 factory business file | — |
| 323 | Case 1 factory business file for .53: docs/guides/case1-business.mosaic-stack.json plus a loader and factory-check test (#414 stage 2, ops-0277) | goldie; reviewers duckworth | #1819 | done | — | Sage full gate: all package suites except queue plus every scripts/test-*.sh (mos-1455); Duckworth review; new test file and one bus.tester mutant on CLEAR (sage) | `docs/plans/2026-10-23_case1-business-file-brief.md` § Brief: the Case 1 factory business file | LANDED 571376c30 + evidence 6a0f0f4f8 (ff from dd6cb5872), tip 99930362e. Duckworth approve c31477 rev 3778 on 6a0f0f4f8. Sage gate green 00:54Z on 6a0f0f4f8: all package suites 0 fail, every scripts/test-*.sh rc 0. Root cause of the revoke-window red: TMPDIR length, tools.sock over 107 bytes (session.mjs:278). Brief template rule and DEFERRED entry in c25799928 (mos-1561). N1/N2 doc only. |
| 324 | Tracker optional in the business file (Q247) | goldie; reviewers duckworth | #1820 | done | — | New tests only. Absent tracker: loader and validate pass, the bus boots with no credential-file error and no @sync. Present tracker unchanged. A mutant that skips the presence check is killed. Then whole touched test files, then the full landing gate. (sage) | `docs/plans/2026-10-23_optional-tracker-brief.md` § Brief: tracker becomes optional in the business file | LANDED 7e59ba8b3 + evidence dbdfcfd52 (ff from 3569bf54f), pushed with tip dd6cb5872 00:06:58Z 10-24. Duckworth APPROVE c31470 rev 3770 (static, N1 doc only). Goldie: new 5/5 and 4/4, business.test 21/21, presence mutant killed. Sage full gate GREEN 00:05:49Z on 64ea54083: every package suite 0 fail 0 skip (business 254, cli 986, bus 924, plugins 119, webui 411), every scripts/test-*.sh rc 0. Live unchanged 45dca69f6. Run B N1 for ops-01 P2/P3 (mos-1558). |
| 325 | Case 1 business file: re-key project to stack to match .mosaic/project.json, plus a project-file test (#414 stage 2, ops-0288, mos-1563) | goldie; reviewers gladstone | #1821 | in-review, round 1, request posted | — | New test file and packages/business whole on CLEAR; one key mutant killed; Gladstone review; Sage full landing gate (mos-1455) (sage) | `docs/plans/2026-10-24_case1-project-key-brief.md` § Brief: re-key the Case 1 project to stack | — |
<!-- mosaic-queue:end -->
+349 -9
View File
@@ -1,7 +1,7 @@
{
"version": 1,
"canonicalRoot": "/mnt/storage/src/mosaic-stack",
"revision": 3778,
"revision": 3788,
"rows": [
{
"id": 1,
@@ -32646,7 +32646,7 @@
"closes": [
1819
],
"state": "in-review",
"state": "done",
"previousState": null,
"required": false,
"requiredSince": null,
@@ -32719,15 +32719,12 @@
}
]
},
"claim": {
"seat": "goldie",
"op": "goldie-0323-start-1"
},
"note": null,
"claim": null,
"note": "LANDED 571376c30 + evidence 6a0f0f4f8 (ff from dd6cb5872), tip 99930362e. Duckworth approve c31477 rev 3778 on 6a0f0f4f8. Sage gate green 00:54Z on 6a0f0f4f8: all package suites 0 fail, every scripts/test-*.sh rc 0. Root cause of the revoke-window red: TMPDIR length, tools.sock over 107 bytes (session.mjs:278). Brief template rule and DEFERRED entry in c25799928 (mos-1561). N1/N2 doc only.",
"blockedReason": null,
"createdAt": "2026-10-23T22:50:41.494Z",
"updatedAt": "2026-10-24T00:44:15.270Z",
"updatedBy": "duckworth"
"updatedAt": "2026-10-24T01:00:54.851Z",
"updatedBy": "sage"
},
{
"id": 324,
@@ -32818,6 +32815,99 @@
"createdAt": "2026-10-23T23:12:07.446Z",
"updatedAt": "2026-10-24T00:08:57.664Z",
"updatedBy": "sage"
},
{
"id": 325,
"piece": "Case 1 business file: re-key project to stack to match .mosaic/project.json, plus a project-file test (#414 stage 2, ops-0288, mos-1563)",
"owner": "goldie",
"issues": [
1821
],
"closes": [
1821
],
"state": "in-review",
"previousState": null,
"required": false,
"requiredSince": null,
"gate": "New test file and packages/business whole on CLEAR; one key mutant killed; Gladstone review; Sage full landing gate (mos-1455)",
"gateOwner": "sage",
"brief": {
"path": "docs/plans/2026-10-24_case1-project-key-brief.md",
"anchor": "Brief: re-key the Case 1 project to stack",
"blob": "8d91484c6731c7f7ceaf197a483c95024dee7448"
},
"after": [],
"reviewers": [
"gladstone"
],
"review": {
"rounds": [
{
"n": 1,
"op": "goldie-0325-review-1",
"by": "goldie",
"at": "2026-10-24T01:18:04.364Z",
"issue": 1821,
"candidate": {
"kind": "commit",
"digest": "c5f96836d5ffa6cc0160da7360321706bef86a17",
"text": null
},
"request": "comment",
"attempts": [
{
"op": "goldie-0325-review-1",
"by": "goldie",
"at": "2026-10-24T01:18:04.364Z",
"state": "failed",
"comment": null,
"transport": {
"outcome": "failed",
"status": null,
"comment": null,
"detail": "pre-send: the credential or account check failed"
},
"resolutions": []
},
{
"op": "sage-3884",
"by": "sage",
"at": "2026-10-24T01:20:34.463Z",
"state": "posted",
"comment": 31482,
"transport": {
"outcome": "posted",
"status": 201,
"comment": 31482,
"detail": "created"
},
"resolutions": []
}
],
"duplicateRisk": false,
"receipts": [
{
"reviewer": "gladstone",
"op": "gladstone-325-verdict-r1",
"at": "2026-10-24T01:22:42.822Z",
"verdict": "approve",
"comment": 31484,
"candidate": "c5f96836d5ffa6cc0160da7360321706bef86a17"
}
]
}
]
},
"claim": {
"seat": "goldie",
"op": "goldie-0325-start-1"
},
"note": null,
"blockedReason": null,
"createdAt": "2026-10-24T01:09:57.971Z",
"updatedAt": "2026-10-24T01:22:42.822Z",
"updatedBy": "gladstone"
}
],
"log": [
@@ -131766,6 +131856,256 @@
"receipt": "ok duckworth-323-verdict-r1 rev 3778 row 323 round 1 approve by duckworth (comment 31477)"
},
"viewSha": "f776c94408564a716ca7efbc70ad058cb2b8704d4c8a6dfedb66beee4810f2c1"
},
{
"rev": 3779,
"op": "sage-3873",
"verb": "note",
"args": {
"id": 323,
"text": "LANDED 571376c30 + evidence 6a0f0f4f8 (ff from dd6cb5872), tip 99930362e. Duckworth approve c31477 rev 3778 on 6a0f0f4f8. Sage gate green 00:54Z on 6a0f0f4f8: all package suites 0 fail, every scripts/test-*.sh rc 0. Root cause of the revoke-window red: TMPDIR length, tools.sock over 107 bytes (session.mjs:278). Brief template rule and DEFERRED entry in c25799928 (mos-1561). N1/N2 doc only."
},
"by": "sage",
"at": "2026-10-24T01:00:03.010Z",
"semantics": 2,
"result": {
"row": 323,
"field": "note",
"receipt": "ok sage-3873 rev 3779 row 323 note"
},
"viewSha": "3bdae29d120d73111f7a31bd3a2457c9916b14ff609bff845d037b65da3cbce9"
},
{
"rev": 3780,
"op": "sage-3874",
"verb": "move",
"args": {
"id": 323,
"to": "done",
"reason": null,
"candidate": null,
"evidence": null,
"issue": null
},
"by": "sage",
"at": "2026-10-24T01:00:54.851Z",
"semantics": 2,
"result": {
"row": 323,
"from": "in-review",
"to": "done",
"round": 1,
"issue": null,
"candidate": null,
"receipt": "ok sage-3874 rev 3780 row 323 in-review→done round 1"
},
"viewSha": "f3418b4c61363a419ac03600b3feb6cc9a4bbce4405e8980bf2787801672809f"
},
{
"rev": 3781,
"op": "sage-3879",
"verb": "add",
"args": {
"piece": "Case 1 business file: re-key project to stack to match .mosaic/project.json, plus a project-file test (#414 stage 2, ops-0288, mos-1563)",
"gate": "New test file and packages/business whole on CLEAR; one key mutant killed; Gladstone review; Sage full landing gate (mos-1455)",
"brief": "docs/plans/2026-10-24_case1-project-key-brief.md#Brief: re-key the Case 1 project to stack",
"issues": [
1821
],
"note": null,
"owner": "goldie",
"gateOwner": "sage",
"after": null,
"reviewers": [
"gladstone"
],
"required": null
},
"by": "sage",
"at": "2026-10-24T01:09:57.971Z",
"semantics": 2,
"result": {
"row": 325,
"from": null,
"to": "queued",
"brief": {
"path": "docs/plans/2026-10-24_case1-project-key-brief.md",
"anchor": "Brief: re-key the Case 1 project to stack",
"blob": "8d91484c6731c7f7ceaf197a483c95024dee7448"
},
"receipt": "ok sage-3879 rev 3781 row 325 none→queued"
},
"viewSha": "c59e1401c4689a96fa467c787bd9691b729eda3e2af4679188235eeb6d233094"
},
{
"rev": 3782,
"op": "sage-3880",
"verb": "move",
"args": {
"id": 325,
"to": "briefed",
"reason": null,
"candidate": null,
"evidence": null,
"issue": null
},
"by": "sage",
"at": "2026-10-24T01:10:53.568Z",
"semantics": 2,
"result": {
"row": 325,
"from": "queued",
"to": "briefed",
"round": null,
"issue": null,
"candidate": null,
"receipt": "ok sage-3880 rev 3782 row 325 queued→briefed"
},
"viewSha": "41afd165d5a71f6af386de17bf8f6e9c6fe107dbe99956b5f7a86731fa361228"
},
{
"rev": 3783,
"op": "goldie-0325-start-1",
"verb": "move",
"args": {
"id": 325,
"to": "in-progress",
"reason": null,
"candidate": null,
"evidence": null,
"issue": null
},
"by": "goldie",
"at": "2026-10-24T01:16:58.930Z",
"semantics": 2,
"result": {
"row": 325,
"from": "briefed",
"to": "in-progress",
"round": null,
"issue": null,
"candidate": null,
"receipt": "ok goldie-0325-start-1 rev 3783 row 325 briefed→in-progress"
},
"viewSha": "d768e4bf91d9908b5697649267a4393f7c4c7a9db0d05ec377906e318d522d87"
},
{
"rev": 3784,
"op": "goldie-0325-review-1",
"verb": "move",
"args": {
"id": 325,
"to": "in-review",
"reason": null,
"candidate": "c5f96836d5ffa6cc0160da7360321706bef86a17",
"evidence": null,
"issue": null
},
"by": "goldie",
"at": "2026-10-24T01:18:04.364Z",
"semantics": 2,
"result": {
"row": 325,
"from": "in-progress",
"to": "in-review",
"round": 1,
"issue": 1821,
"candidate": {
"kind": "commit",
"digest": "c5f96836d5ffa6cc0160da7360321706bef86a17",
"text": null
},
"receipt": "ok goldie-0325-review-1 rev 3784 row 325 in-progress→in-review round 1 on #1821; request goldie-0325-review-1 requesting"
},
"viewSha": "23408b96e46a3d6f5f80470448c475622261ebc99fa6ed3cd3d0339e79f4e69b"
},
{
"rev": 3785,
"op": "goldie-0325-review-1.outcome",
"verb": "review-outcome",
"args": {
"id": 325,
"attempt": "goldie-0325-review-1",
"outcome": "failed",
"status": null,
"comment": null,
"detail": "pre-send: the credential or account check failed"
},
"by": "goldie",
"at": "2026-10-24T01:19:00.773Z",
"semantics": 2,
"result": {
"row": 325,
"round": 1,
"attempt": "goldie-0325-review-1",
"state": "failed",
"receipt": "ok goldie-0325-review-1.outcome rev 3785 row 325 round 1 request goldie-0325-review-1 failed"
},
"viewSha": "a098b29709b88484d98350f44750a37a621751a982c47fe0863ae9b6c938d224"
},
{
"rev": 3786,
"op": "sage-3884",
"verb": "review-request",
"args": {
"id": 325
},
"by": "sage",
"at": "2026-10-24T01:20:34.463Z",
"semantics": 2,
"result": {
"row": 325,
"round": 1,
"attempt": "sage-3884",
"state": "requesting",
"receipt": "ok sage-3884 rev 3786 row 325 round 1 request sage-3884 requesting"
},
"viewSha": "44e292c9544263d2093cacc4f643bf452c9bdd21c72c64d0ac5a169cb8d900e8"
},
{
"rev": 3787,
"op": "sage-3884.outcome",
"verb": "review-outcome",
"args": {
"id": 325,
"attempt": "sage-3884",
"outcome": "posted",
"status": 201,
"comment": 31482,
"detail": "created"
},
"by": "sage",
"at": "2026-10-24T01:21:30.422Z",
"semantics": 2,
"result": {
"row": 325,
"round": 1,
"attempt": "sage-3884",
"state": "posted",
"receipt": "ok sage-3884.outcome rev 3787 row 325 round 1 request sage-3884 posted comment 31482"
},
"viewSha": "25a06deff4a77b1cf1a889e39edfbdc2e73a9dd3f93653e4b91b0e6400549348"
},
{
"rev": 3788,
"op": "gladstone-325-verdict-r1",
"verb": "review-record",
"args": {
"id": 325,
"verdict": "approve",
"comment": 31484,
"candidate": "c5f96836d5ffa6cc0160da7360321706bef86a17"
},
"by": "gladstone",
"at": "2026-10-24T01:22:42.822Z",
"semantics": 2,
"result": {
"row": 325,
"round": 1,
"verdict": "approve",
"receipt": "ok gladstone-325-verdict-r1 rev 3788 row 325 round 1 approve by gladstone (comment 31484)"
},
"viewSha": "422f9329c44229356521749dc31d56b1130fbee51659c18a58657003cf4880a5"
}
]
}