docs: row 285 r4 replay and regenerated B1 evidence on landed 296 and 217 (sage-4078)
This commit is contained in:
1 parent
826d6e1d38
commit
0f6cdc8610
5 files changed
+871
-25
No files matched your search
@@ -5510,3 +5510,5 @@ claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
|
|||||||
2026-10-24T10:42:28Z | Magica | Row285 / #1790 Amendment1 before/after | Before: unconditional chief gitea broke row323. After: chief-only library conditional plus named required-reference refusal, checkCredentialMap unchanged; new three-case test file; own helper/resolve fixture hunks restored to base, own chief/business/identity hunks reconciled under sage-4060. Case1 doc/test byte-identical. M10 planned against new no-library positive and old Case1 doc test. No tests run under held slot; not green/accepted. Residual base library fixture references need authority alignment before re-CLEAR.
|
2026-10-24T10:42:28Z | Magica | Row285 / #1790 Amendment1 before/after | Before: unconditional chief gitea broke row323. After: chief-only library conditional plus named required-reference refusal, checkCredentialMap unchanged; new three-case test file; own helper/resolve fixture hunks restored to base, own chief/business/identity hunks reconciled under sage-4060. Case1 doc/test byte-identical. M10 planned against new no-library positive and old Case1 doc test. No tests run under held slot; not green/accepted. Residual base library fixture references need authority alignment before re-CLEAR.
|
||||||
|
|
||||||
2026-10-24T10:59:43Z | Magica | Row285 / #1790 B1 before/after | Before: Amendment1 candidatebabae6adc with missing refs in base library/creative fixtures. After: 26 data-only credential insertions across13 direct-reader files; original callback lines preserved, one expressly allowed credentials?.vikunja setup guard. Every other byte reconstructs prior candidate exactly; no base assertion edits. Base and candidate put role set is pm,cto,coder,reviewer; chief lacks vikunja. Literal e0c6142f3 word diffs and known preexisting r2 hunks recorded. No tests, green claim or queue move; next whole gate +M10 waits for Sage CLEAR.
|
2026-10-24T10:59:43Z | Magica | Row285 / #1790 B1 before/after | Before: Amendment1 candidatebabae6adc with missing refs in base library/creative fixtures. After: 26 data-only credential insertions across13 direct-reader files; original callback lines preserved, one expressly allowed credentials?.vikunja setup guard. Every other byte reconstructs prior candidate exactly; no base assertion edits. Base and candidate put role set is pm,cto,coder,reviewer; chief lacks vikunja. Literal e0c6142f3 word diffs and known preexisting r2 hunks recorded. No tests, green claim or queue move; next whole gate +M10 waits for Sage CLEAR.
|
||||||
|
|
||||||
|
2026-10-24T11:24:17Z | Magica | Row285 / #1790 r4 before/after | Before: r3 eee8ad776 on b19ffa04f, gate unverified after amendments. After: new r4 from landed296+217 base d0a6a87cd, twelve commits replayed; only append logs conflicted, complete base prefixes preserved. Product/test patch lines identical across assigned bases; tests byte-equal r3; replyLimits and broker citation work retained. Regenerated range-diff and e0c6142f3 base word/line diffs. No npm/tests or queue moves; own-branch push explicitly authorized by sage-4078.
|
||||||
@@ -1632,3 +1632,800 @@ index 315f69698..a7ac869e5 100644
|
|||||||
~
|
~
|
||||||
|
|
||||||
Results: NOT RUN. Candidate is a pushed build for the next CLEAR, not accepted or green.
|
Results: NOT RUN. Candidate is a pushed build for the next CLEAR, not accepted or green.
|
||||||
|
|
||||||
|
## r4 replay onto landed 296+217 (2026-10-24T11:24:17Z, sage-4078)
|
||||||
|
|
||||||
|
New branch magica/row285-r4 starts at d0a6a87cd. All twelve commits from
|
||||||
|
b19ffa04f..eee8ad776 were cherry-picked, through replay tip 826d6e1d3.
|
||||||
|
magica/row285-r3 is retained unchanged; no force-push.
|
||||||
|
|
||||||
|
Only conflicts: BUILD-LOG.md and docs/SESSIONS.md at the first Magica evidence
|
||||||
|
commit. Keep all landed Lena/Beakley entries, then append all Magica entries.
|
||||||
|
Both resolved files retain the complete d0a6a87cd blob as an exact byte prefix.
|
||||||
|
No source, test, fixture, schema or authority conflict required manual resolution.
|
||||||
|
|
||||||
|
Source auto-merges preserve row217's broker citation guard, retry/page handling
|
||||||
|
and business.mjs replyLimits top-level key. Comparing r3→r4 business.mjs shows
|
||||||
|
only that landed replyLimits key; broker differs only by landed row217 work.
|
||||||
|
Statically compared every packages/roles path: added/removed lines relative to
|
||||||
|
each assigned base are exactly identical for all row285 product/test changes.
|
||||||
|
Every changed test file equals the r3 tip byte-for-byte. Case1 document/test
|
||||||
|
and business/tests/helpers remain byte-identical to e0c6142f3.
|
||||||
|
|
||||||
|
B1 invariants persist: 26 credential statements and the sole approved Vikunja
|
||||||
|
guard; no assertion edits; tracker put set remains pm,cto,coder,reviewer.
|
||||||
|
Post-replay e0c6142f3 full-file and word diffs regenerated in b1-base-diff.txt
|
||||||
|
and b1-base-word-diff.txt. The incremental diff now uses c53ea7d12, the
|
||||||
|
replayed amendment predecessor. Prior approved r2 token differences noted
|
||||||
|
above remain the only full-base exceptions besides the mos-1582 guard.
|
||||||
|
|
||||||
|
No tests/npm or queue operations run. Earlier r3 gate logs remain historical;
|
||||||
|
r4 has no verification result. On CLEAR, reinstall root/webui locally and
|
||||||
|
rerun the whole six-suite/config gate plus all mutants, including M10.
|
||||||
|
|
||||||
|
Requested range-diff (also r4-range-diff.txt):
|
||||||
|
Command: git range-diff b19ffa04f..eee8ad776 d0a6a87cd..826d6e1d3
|
||||||
|
|
||||||
|
1: ca90d28bd = 1: 6ea4e3d37 row 285: C2-08b, creative roles hold library.write and the gitea credential, the chief of staff a read-scoped gitea credential; #giteaRole refuses the chief (#1790, mos-1309 item 5, sage-2915, sage-2921)
|
||||||
|
2: 362d1ebe3 = 2: 5e8e5f8a9 row 285: fixtures, example and README give the chief and creative instances their gitea reference (#1790, mos-1330)
|
||||||
|
3: 052e094e0 = 3: 86322bea2 row 285: a chief-of-staff or creative instance that names publish refuses at load, keeping today's N10 refusal; instance-settings :289 follows the companion's gitea (#1790, mos-1332)
|
||||||
|
4: 68e6d4588 = 4: 02fdae405 row 285: webby-0178 early read, drop the stale creative publish comment and name the example's test readers (#1790)
|
||||||
|
5: 299a8027c = 5: ee81d2ae6 row 285: mos-1333, withdraw the publish fence; N10 option (a) with an assistant instance; a chief with its gitea ref, identity and publish loads; restore the creative publish test; BUILD.md gate scope (sage-2946) (#1790)
|
||||||
|
6: 2773b0151 = 6: 059cf04ea row 285: library.write joins ACTIONS and ROUTED in the business vocabulary and the broker under PRD 1.16 REQ-WAIT-3 and REQ-LIB-6, with a hard-waits test; BUILD.md records the r2 rebase, range-diff and drift check (#1790, sage-3578)
|
||||||
|
7: 644bcaa16 = 7: 01dfecc1f row 285: BUILD.md records N1, the creative-only library.write refusal as a follow-up, and the round scope (#1790, sage-3593)
|
||||||
|
8: 87b7547f8 ! 8: 9f7adb03e docs: row 285 r3 replay and static drift evidence before CLEAR (#1790, sage-4039)
|
||||||
|
@@ Commit message
|
||||||
|
docs: row 285 r3 replay and static drift evidence before CLEAR (#1790, sage-4039)
|
||||||
|
|
||||||
|
## BUILD-LOG.md ##
|
||||||
|
-@@ BUILD-LOG.md: remain; no live state, schema or bus policy change.
|
||||||
|
+@@ BUILD-LOG.md: claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
|
||||||
|
+ 2026-10-24 | Beakley (88b97f65) | Row 217 round 2, sage-4037 | Rebased published dde5b8496 onto e0c6142f3 on new beakley/row217-r2; both append-log histories retained. Conflicts preserve landed grant dispatch, revocation hook and lookup exports. Added E4 citation-unavailable product path and real supporting-scope/index comparison tests after row283 8d2856ee3. Untested: no Node/npm/tests/mutants/build; ready for Sage CLEAR after Lena296. Full range-diff and honest discarded local rebase correction in agents/beakley/work/queue-217/BUILD.md.
|
||||||
|
|
||||||
|
- 2026-10-24 | Goldie | Row265 / #1770 verified (mos-1567, sage-3942) | Approved correction adds solely address import pin + Row265 comment to project-runtime.test and one pure-source RUNNER_FILES mount; new block checks parser has no imports. Serialized fresh-short-TMP timeout-k10: unchanged sandbox10/10, parser15/15, rooms18/18, full bus957/957, twelve named refusal mutants killed (each Node1, driver0), restored parser15/15 + rooms18/18. All positives zero fail/skip/cancel; every mutation restored full broker SHA71b32ee4. Old first-red evidence retained, no other old-test change. Slot returned goldie-0034; Boyd packet explicitly includes mount-list review, candidate push next.
|
||||||
|
- 2026-10-24T07:18:53Z | Sage | Row 327 (#1825, Bradford, Poe and Dewey) LANDED 68c08b4e7. Before: refactor at 94d9e90a6; the push guard was a scratch script with no reviewed-binary check. After: scripts/push-check.sh and scripts/test-push-check.sh on refactor, 3 commits cherry-picked onto 6a5e12511 with blobs equal to the round 3 tip d858c9f8b, plus doc commits 76f84465f and 68c08b4e7. Binaries are found by numstat or a NUL in the first 8000 committed bytes, regardless of attributes; each needs its sha256 and path in an approved latest-round candidate; an unconfirmed queue tail exits 2. Reviews: Poe c31525 rev 3882, Dewey c31526 rev 3883. Gate: 1st run 06:57Z RED, not the candidate: canonical node_modules was empty from 05:45:15Z (sage-4023). Rerun with its own root npm ci GREEN 07:15:49Z: 17 package suites 0 failures (cli 986, plugins 119, webui 418), 11 scripts exit 0, push-check 6 mutants KILLED; skips are the queue canonical-root check and the row 244 live provider cases. The landed push-check.sh passed its own push (NO_BINARY, NO_ATTRIBUTION, PUSH_READY). mos-1575: gates install their own node_modules; canonical restored with npm ci (128 packages).
|
||||||
|
-+
|
||||||
|
+ 2026-10-24T10:21Z | Beakley (88b97f65) | Row 217 round2 slot verified, sage-4042/4043 | Source 2d274a5b6: touched57/57, whole library142/142 business270/270 bus974/974 cli988/988 harness172/172 seat218/218, all zero fail/skip/cancel. M1-M5 killed, controls/restored controls green, product hashes restored after each; E4 RED stand-in observed. Only first-red was new runtime fixture invalid-authority, corrected and retained in receipts; no old test failed/edited. Local root/webui npm ci, short TMPDIR, timeout-k10; no canonical npm/rm or module link. Full evidence agents/beakley/work/queue-217/run-r2; Sage owns scripts landing gate and formal review.
|
||||||
|
+2026-10-24T10:02Z | Magica | Row 285 / #1790 r3 before/after (sage-4039, mos-1542) | Before: assigned magica/row285-r3 at b19ffa04f, Scrooge r2 untested at 53db6b7ca. After: seven commits cherry-picked through 644bcaa16; five named overlaps auto-merge preserving newer base changes. Range-diff six '=', one context-only '!'; six patch IDs identical, fixture patch ID differs with upstream import context, exact test added/removed-line comparison identical for all changed tests. business.mjs equals base; Scrooge BUILD equals r2. CREATIVE_KINDS absent in packages/roles/scripts; no 64-hex changed-path pin; 291 conservative reader candidates recorded. No npm or tests before Sage CLEAR; N1 remains follow-up. Own-branch evidence push next, not accepted/green or landed.
|
||||||
|
|
||||||
|
## agents/magica/work/queue-285/BUILD.md (new) ##
|
||||||
|
@@ agents/magica/work/queue-285/role-readers.txt (new)
|
||||||
|
|
||||||
|
## docs/SESSIONS.md ##
|
||||||
|
@@ docs/SESSIONS.md: are never rewritten or removed; corrections are new entries.
|
||||||
|
- 2026-10-24T04:27Z | Goldie (a13dd6d5-5e73-4b7d-8318-02abeff24940) | Row265 / #1770 C2-09b rooms | Goldie owns build, Boyd reviews under sage-3915. New goldie/row265 worktree at ec86f2c84, claim rev3814; room verbs/parser/new tests prepared, no old tests changed. Sage-3932 slot: new parser14/14 and rooms18/18 passed; whole bus in progress before refusal mutants, stop rule active.
|
||||||
|
- 2026-10-24T04:35Z | Goldie (a13dd6d5-5e73-4b7d-8318-02abeff24940) | Row265 / #1770 verified | First slot stopped at project-runtime import pin. mos-1567 narrowly authorizes pin and pure-source mount correction. sage-3942 rerun: sandbox10/10, parser15/15, rooms18/18, bus957/957, twelve refusal mutants killed/restored SHA71b32ee4, parser15/15 + rooms18/18 again. Slot returned goldie-0034; no further test runs. Boyd reviews RUNNER_FILES alongside rooms; own-branch push/claimant in-review next.
|
||||||
|
- 2026-10-24T07:18:53Z | Sage (1ef1e4f8) | Row 327 / #1825 push guard landed (mos-1572 option A, mos-1575) | Gate went red 06:57Z on an empty canonical node_modules (Glomgold's webui npm ci through a link to canonical, glomgold-0011); rerun with its own npm ci GREEN 07:15:49Z on 1bd214e38; pushed 68c08b4e7 07:18:03Z; #1825 closed c31530; canonical restored (128 packages); brief template rule 4db23a51f | landed
|
||||||
|
+ 2026-10-24 | Beakley (88b97f65) | Row 217 round 2 under sage-4037 | New beakley/row217-r2 rebased onto e0c6142f3, retained both log histories, E4 product fix and supporting/index tests drafted. No Node/npm/tests/mutants run; ready for CLEAR; local-only dependency installs required on CLEAR, old-test red goes to Sage.
|
||||||
|
+
|
||||||
|
+ 2026-10-24T10:21Z | Beakley (88b97f65) | Row217 #1718 round2 slot | All touched57 and six whole suites2764 pass, zero skips/cancels; M1-M5 killed/restored, E4 RED stand-in observed. First-new runtime fixture red recorded and corrected; no old-test change/failure. Evidence in agents/beakley/work/queue-217/run-r2. Verified for review on beakley/row217-r2; Sage landing scripts/review remain.
|
||||||
|
+2026-10-24T10:02Z | Magica (483bbea5-e548-4c97-9b85-8f29ba81e427) | Row 285 / #1790 r3 replay, sage-4039 | Seven Scrooge commits replayed onto b19ffa04f; five overlaps auto-merged and inspected; range-diff, stable patch IDs and 291 conservative reader inventory in agents/magica/work/queue-285/BUILD.md. Every test added/removed line matches r2; N1 deferred. Canonical queue move magica-285-start rev3889 succeeded. No npm/tests; own-branch push for CLEAR next.
|
||||||
|
9: d76021656 < -: --------- docs: correct row 285 evidence timestamps with append-only receipts
|
||||||
|
-: --------- > 9: 405b05e91 docs: correct row 285 evidence timestamps with append-only receipts
|
||||||
|
10: 66a800e15 = 10: 0882bd997 docs: trim range-diff evidence trailing whitespace
|
||||||
|
11: babae6adc ! 11: c53ea7d12 row 285: require chief gitea exactly for library businesses (mos-1580, sage-4059, sage-4060)
|
||||||
|
@@ Commit message
|
||||||
|
row 285: require chief gitea exactly for library businesses (mos-1580, sage-4059, sage-4060)
|
||||||
|
|
||||||
|
## BUILD-LOG.md ##
|
||||||
|
-@@ BUILD-LOG.md: remain; no live state, schema or bus policy change.
|
||||||
|
+@@ BUILD-LOG.md: claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
|
||||||
|
2026-10-24T10:02Z | Magica | Row 285 / #1790 r3 before/after (sage-4039, mos-1542) | Before: assigned magica/row285-r3 at b19ffa04f, Scrooge r2 untested at 53db6b7ca. After: seven commits cherry-picked through 644bcaa16; five named overlaps auto-merge preserving newer base changes. Range-diff six '=', one context-only '!'; six patch IDs identical, fixture patch ID differs with upstream import context, exact test added/removed-line comparison identical for all changed tests. business.mjs equals base; Scrooge BUILD equals r2. CREATIVE_KINDS absent in packages/roles/scripts; no 64-hex changed-path pin; 291 conservative reader candidates recorded. No npm or tests before Sage CLEAR; N1 remains follow-up. Own-branch evidence push next, not accepted/green or landed.
|
||||||
|
|
||||||
|
2026-10-24T09:58:36Z | Magica | Row 285 timestamp correction | The preceding Magica entry marked 10:02Z used an incorrect timestamp; replay/evidence commit 87b7547f8 occurred before the measured 09:58:22Z push start. Technical evidence is unchanged.
|
||||||
|
12: eee8ad776 ! 12: 826d6e1d3 row 285: align library and creative fixture credential data under B1 (mos-1581, mos-1582)
|
||||||
|
@@ Commit message
|
||||||
|
row 285: align library and creative fixture credential data under B1 (mos-1581, mos-1582)
|
||||||
|
|
||||||
|
## BUILD-LOG.md ##
|
||||||
|
-@@ BUILD-LOG.md: remain; no live state, schema or bus policy change.
|
||||||
|
+@@ BUILD-LOG.md: claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
|
||||||
|
2026-10-24T10:32:02Z | Magica | Row285 / #1790 gate STOP (sage-4048) | Before: pushed66a800e15, no tests. After: own root/webui npm ci, short scratch TMPDIR, whole files serial timeout-k10; bus958/958 green (108 files), business partial80pass/4fail, first red old row323 case1-business-file tests57/86/95/105 because committed Case1 chief lacks required gitea ref. No more tests/mutants or source edits. Static diagnosis also finds old empty-credential assertions81/112/114, requiring a specific owner ruling. Sage notified magica-0002. No in-review move or green claim.
|
||||||
|
|
||||||
|
2026-10-24T10:42:28Z | Magica | Row285 / #1790 Amendment1 before/after | Before: unconditional chief gitea broke row323. After: chief-only library conditional plus named required-reference refusal, checkCredentialMap unchanged; new three-case test file; own helper/resolve fixture hunks restored to base, own chief/business/identity hunks reconciled under sage-4060. Case1 doc/test byte-identical. M10 planned against new no-library positive and old Case1 doc test. No tests run under held slot; not green/accepted. Residual base library fixture references need authority alignment before re-CLEAR.
|
||||||
|
|
||||||
|
The non-equal entries are log-only context changes after preserving landed
|
||||||
|
append entries; git pairs the timestamp-only doc commit as delete/add because
|
||||||
|
its two log hunks acquired different surrounding context. Product/test deltas
|
||||||
|
were independently compared rather than inferred from those pairing labels.
|
||||||
|
|
||||||
|
Regenerated post-replay base word diffs, exact command output:
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/bus/tests/reload.test.mjs
|
||||||
|
diff --git a/packages/bus/tests/reload.test.mjs b/packages/bus/tests/reload.test.mjs
|
||||||
|
index 091b37b26..342d578d0 100644
|
||||||
|
--- a/packages/bus/tests/reload.test.mjs
|
||||||
|
+++ b/packages/bus/tests/reload.test.mjs
|
||||||
|
@@ -194,7 +194,7 @@ test('T14 a file whose project root differs from the boot copy is not reloaded,
|
||||||
|
});
|
||||||
|
~
|
||||||
|
|
||||||
|
~
|
||||||
|
test('T14 a file whose library mapping differs from the boot copy is not reloaded, because the mirror is ensured at start', async (t) => {
|
||||||
|
~
|
||||||
|
const f = await setup(t, doc => {
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
doc.projects.books = mappingEntry(); });
|
||||||
|
~
|
||||||
|
const doc = JSON.parse(readFileSync(f.file, 'utf8'));
|
||||||
|
~
|
||||||
|
doc.projects.books.branch = 'other';
|
||||||
|
~
|
||||||
|
writeFileSync(f.file, JSON.stringify(doc, null, 2) + '\n', { mode: 0o600 });
|
||||||
|
~
|
||||||
|
@@ -202,7 +202,7 @@ test('T14 a file whose library mapping differs from the boot copy is not reloade
|
||||||
|
assert.equal(added.restart, true);
|
||||||
|
~
|
||||||
|
assert.equal(f.reloads.length, 0);
|
||||||
|
~
|
||||||
|
// The same library entry reloads.
|
||||||
|
~
|
||||||
|
const g = await setup(t, doc => {
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
doc.projects.books = mappingEntry(); });
|
||||||
|
~
|
||||||
|
assert.equal(g.ask('instances.set', { revision: g.revision(), instance: 'sec-1', op: 'add', definition: 'security-reviewer' }).restart, false);
|
||||||
|
~
|
||||||
|
assert.equal(g.reloads.length, 1);
|
||||||
|
~
|
||||||
|
});
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/business.test.mjs
|
||||||
|
diff --git a/packages/business/tests/business.test.mjs b/packages/business/tests/business.test.mjs
|
||||||
|
index 9d4eda831..f78789250 100644
|
||||||
|
--- a/packages/business/tests/business.test.mjs
|
||||||
|
+++ b/packages/business/tests/business.test.mjs
|
||||||
|
@@ -6,6 +6,7 @@ import { join } from "node:path";
|
||||||
|
import { pathToFileURL } from "node:url";
|
||||||
|
~
|
||||||
|
import { BusinessError, businessFilePath, configDir, loadBusiness, validateBusinessDocument } from "../src/index.mjs";
|
||||||
|
~
|
||||||
|
import { THREAD_IDLE_SECONDS } from "../src/business.mjs";
|
||||||
|
~
|
||||||
|
+import { CREATIVE_DEFINITIONS } from "../src/vocabulary.mjs";
|
||||||
|
~
|
||||||
|
import { launchDoc, businessDoc, REPO, REPO_ROLES, rolesCopy, tmp, writeJson } from "./helpers.mjs";
|
||||||
|
~
|
||||||
|
|
||||||
|
~
|
||||||
|
test('C2-04: library mappings load without roots, remain frozen, and retain mapping refusals', async t => {
|
||||||
|
~
|
||||||
|
@@ -14,6 +15,7 @@ test('C2-04: library mappings load without roots, remain frozen, and retain mapp
|
||||||
|
const root = tmp(); t.after(() => rmSync(root, { recursive: true, force: true }));
|
||||||
|
~
|
||||||
|
const doc = businessDoc(root), file = join(root, 'businesses/acme.json');
|
||||||
|
~
|
||||||
|
doc.projects = { books: mappingEntry(), ...doc.projects };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
const loaded = validateBusinessDocument(doc, file, { rolesDir: REPO_ROLES });
|
||||||
|
~
|
||||||
|
const { checkMapping } = await import('../../library/src/mapping.mjs');
|
||||||
|
~
|
||||||
|
assert.deepEqual(loaded.projects.books, checkMapping(mappingEntry()));
|
||||||
|
~
|
||||||
|
@@ -41,6 +43,7 @@ test('C2-04: an otherwise valid publish grant cannot name a library repo', async
|
||||||
|
const root = tmp(); t.after(() => rmSync(root, { recursive: true, force: true }));
|
||||||
|
~
|
||||||
|
const doc = businessDoc(root);
|
||||||
|
~
|
||||||
|
doc.projects.books = { ...mappingEntry(), remote: 'https://git.example/writer/books' };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.roles.coder.identity = { name: 'Coder', email: 'coder@example.invalid', gitea: { url: 'https://git.example', user: 'acme-coder' } };
|
||||||
|
~
|
||||||
|
doc.roles.coder.publish = ['books'];
|
||||||
|
~
|
||||||
|
refuses(() => validateBusinessDocument(doc, join(root, 'businesses/acme.json'), { rolesDir: REPO_ROLES }), /publish.*library/);
|
||||||
|
~
|
||||||
|
@@ -273,28 +276,58 @@ test("the shipped example refuses as written and validates once filled in", () =
|
||||||
|
assert.equal(id, 15);
|
||||||
|
~
|
||||||
|
});
|
||||||
|
~
|
||||||
|
|
||||||
|
~
|
||||||
|
+// Row 285 (C2-08b, #1790, mos-1330): a creative definition declares gitea, so its instance names
|
||||||
|
~
|
||||||
|
+// the reference. The store form needs no token file, and the bus reads a missing one as no token.
|
||||||
|
~
|
||||||
|
+const CREATIVE_GITEA = Object.freeze({ gitea: Object.freeze({ store: true, rotateBy: "2099-01-01" }) });
|
||||||
|
~
|
||||||
|
~
|
||||||
|
// Row 213 (C2-08, #1714), deviation D1: the persona vars sit on a creative instance only, and
|
||||||
|
~
|
||||||
|
// both or neither. The var checks themselves are vars.mjs's.
|
||||||
|
~
|
||||||
|
test("persona vars: agent layer, creative definition only, both or neither", () => {
|
||||||
|
~
|
||||||
|
const sha = "a".repeat(64);
|
||||||
|
~
|
||||||
|
const persona = { "persona.name": "Bean", "persona.sha256": sha };
|
||||||
|
~
|
||||||
|
const business = check((d) => { d.roles.bean = { definition: "companion",
|
||||||
|
+credentials: CREATIVE_GITEA,
|
||||||
|
vars: { ...persona } }; });
|
||||||
|
~
|
||||||
|
assert.deepEqual({ ...business.roles.bean.vars }, persona);
|
||||||
|
~
|
||||||
|
assert.doesNotThrow(() => check((d) => { d.roles.bean = { definition:
|
||||||
|
-"ideas"
|
||||||
|
+"ideas", credentials: CREATIVE_GITEA
|
||||||
|
}; }));
|
||||||
|
~
|
||||||
|
refuses(() => check((d) => { d.vars["persona.name"] = "Bean"; }), /persona\.name can't be set at the business layer/);
|
||||||
|
~
|
||||||
|
refuses(() => check((d) => { d.roles.pm.vars = { ...d.roles.pm.vars, ...persona }; }),
|
||||||
|
~
|
||||||
|
/roles\.pm\.vars: persona vars need a creative definition \(pm isn't one\)/);
|
||||||
|
~
|
||||||
|
refuses(() => check((d) => { d.roles.chief.vars = { ...persona }; }), /chief-of-staff isn't one/);
|
||||||
|
~
|
||||||
|
for (const key of Object.keys(persona)) {
|
||||||
|
~
|
||||||
|
refuses(() => check((d) => { d.roles.bean = { definition: "research",
|
||||||
|
+credentials: CREATIVE_GITEA,
|
||||||
|
vars: { [key]: persona[key] } }; }),
|
||||||
|
~
|
||||||
|
/roles\.bean\.vars: persona\.name and persona\.sha256 are set together or not at all/);
|
||||||
|
~
|
||||||
|
}
|
||||||
|
~
|
||||||
|
for (const [key, value] of [["persona.name", "x".repeat(41)], ["persona.name", "Be\nan"], ["persona.name", "Be\u0007an"], ["persona.name", "Be\u2028an"], ["persona.name", "Be\u2029an"], ["persona.name", 7],
|
||||||
|
~
|
||||||
|
["persona.sha256", "A".repeat(64)], ["persona.sha256", sha.slice(1)], ["persona.sha256", `${sha}0`]]) {
|
||||||
|
~
|
||||||
|
refuses(() => check((d) => { d.roles.bean = { definition: "companion",
|
||||||
|
+credentials: CREATIVE_GITEA,
|
||||||
|
vars: { ...persona, [key]: value } }; }), new RegExp(`variable ${key.replace(".", "\\.")}`), 2);
|
||||||
|
~
|
||||||
|
|
||||||
|
+}
|
||||||
|
~
|
||||||
|
+});
|
||||||
|
~
|
||||||
|
~
|
||||||
|
+// Row 285 (C2-08b, #1790, mos-1330): the chief and each creative definition declare gitea, so an
|
||||||
|
~
|
||||||
|
+// instance without the reference refuses. Amendment 1 (mos-1580, sage-4060): the chief
|
||||||
|
~
|
||||||
|
+// requires its reference only in a library business; creative definitions always require it.
|
||||||
|
~
|
||||||
|
+test("row 285: a chief or creative instance without credentials.gitea refuses at load", async () => {
|
||||||
|
~
|
||||||
|
+ const { mappingEntry } = await import("../../library/tests/helpers.mjs");
|
||||||
|
~
|
||||||
|
+ refuses(() => check((d) => { d.projects.books = mappingEntry(); delete d.roles.chief.credentials; }),
|
||||||
|
~
|
||||||
|
+ /chief-library-gitea-required: .*roles\.chief\.credentials/);
|
||||||
|
~
|
||||||
|
+ for (const definition of CREATIVE_DEFINITIONS) {
|
||||||
|
~
|
||||||
|
+ refuses(() => check((d) => { d.roles.bean = { definition }; }),
|
||||||
|
~
|
||||||
|
+ /roles\.bean\.credentials must reference exactly the services its role definition needs \(gitea; got none\)/);
|
||||||
|
~
|
||||||
|
+ assert.doesNotThrow(() => check((d) => { d.roles.bean = { definition, credentials: CREATIVE_GITEA }; }), definition);
|
||||||
|
~
|
||||||
|
}
|
||||||
|
~
|
||||||
|
});
|
||||||
|
~
|
||||||
|
|
||||||
|
~
|
||||||
|
+// Row 285 (C2-08b, brief): a creative instance may carry identity and publish, under the rules at
|
||||||
|
~
|
||||||
|
+// business.mjs:155-166, which the grant path reads. The grant itself still refuses it (#giteaRole).
|
||||||
|
~
|
||||||
|
+test("row 285: a creative instance with identity and publish loads", () => {
|
||||||
|
~
|
||||||
|
+ const identity = { name: "Bean", email: "bean@example.test", gitea: { url: "https://git.example", user: "acme-bean" } };
|
||||||
|
~
|
||||||
|
+ const business = check((d) => {
|
||||||
|
~
|
||||||
|
+ d.projects.stack.remote = "https://git.example/acme/stack";
|
||||||
|
~
|
||||||
|
+ d.roles.bean = { definition: "companion", credentials: CREATIVE_GITEA, identity, publish: ["stack"] };
|
||||||
|
~
|
||||||
|
+ });
|
||||||
|
~
|
||||||
|
+ assert.deepEqual({ ...business.roles.bean.identity, gitea: { ...business.roles.bean.identity.gitea } }, identity);
|
||||||
|
~
|
||||||
|
+ assert.deepEqual([...business.roles.bean.publish], ["stack"]);
|
||||||
|
~
|
||||||
|
+});
|
||||||
|
~
|
||||||
|
~
|
||||||
|
// Row 194 (#1692, D2.5, T17): the per-agent forbid and the retired list.
|
||||||
|
~
|
||||||
|
test("row 194 keep, noHire and retired validate, and a file without them loads as before", () => {
|
||||||
|
~
|
||||||
|
const plain = check();
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/cli.test.mjs
|
||||||
|
diff --git a/packages/business/tests/cli.test.mjs b/packages/business/tests/cli.test.mjs
|
||||||
|
index 3aa1d52ee..beb367f8c 100644
|
||||||
|
--- a/packages/business/tests/cli.test.mjs
|
||||||
|
+++ b/packages/business/tests/cli.test.mjs
|
||||||
|
@@ -11,7 +11,7 @@ const CLI = join(REPO, "packages", "business", "src", "cli.mjs");
|
||||||
|
test('C2-04: business validate and resolve skip a library before code projects and credential checks', async t => {
|
||||||
|
~
|
||||||
|
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
|
||||||
|
~
|
||||||
|
const { rmSync } = await import('node:fs');
|
||||||
|
~
|
||||||
|
const s = setup(doc => {
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
doc.projects = { books: mappingEntry(), ...doc.projects }; });
|
||||||
|
~
|
||||||
|
t.after(() => rmSync(s.root, { recursive: true, force: true }));
|
||||||
|
~
|
||||||
|
writeJson(projectFilePath(s.doc.projects.stack.root), { projectVersion: 1, id: 'stack', vars: { 'tracker.project': 3 } });
|
||||||
|
~
|
||||||
|
const checked = run(s, 'validate', 'acme');
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/instance-settings.test.mjs
|
||||||
|
diff --git a/packages/business/tests/instance-settings.test.mjs b/packages/business/tests/instance-settings.test.mjs
|
||||||
|
index e85366562..54c22e0e0 100644
|
||||||
|
--- a/packages/business/tests/instance-settings.test.mjs
|
||||||
|
+++ b/packages/business/tests/instance-settings.test.mjs
|
||||||
|
@@ -9,7 +9,7 @@ import { mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync }
|
||||||
|
import { join } from "node:path";
|
||||||
|
~
|
||||||
|
import { instanceSettings } from "../src/instance-settings.mjs";
|
||||||
|
~
|
||||||
|
import { projectFilePath } from "../src/project.mjs";
|
||||||
|
~
|
||||||
|
import { businessDoc,
|
||||||
|
+FAR_DATE,
|
||||||
|
REPO, rolesCopy, systemConfig, systemFor, tmp, writeJson } from "./helpers.mjs";
|
||||||
|
~
|
||||||
|
|
||||||
|
~
|
||||||
|
const CLI = join(REPO, "packages", "business", "src", "cli.mjs");
|
||||||
|
~
|
||||||
|
const roots = [];
|
||||||
|
~
|
||||||
|
@@ -22,7 +22,7 @@ const LEVELS = { pi: ["off", "minimal", "low", "medium", "high", "xhigh", "max"]
|
||||||
|
|
||||||
|
~
|
||||||
|
test('C2-04: instance settings skip a library while checking a later code project', async () => {
|
||||||
|
~
|
||||||
|
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
|
||||||
|
~
|
||||||
|
const f = fixture(doc => {
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
doc.projects = { books: mappingEntry(), ...doc.projects }; });
|
||||||
|
~
|
||||||
|
writeJson(projectFilePath(f.doc.projects.stack.root), { projectVersion: 1, id: 'stack', vars: { 'tracker.project': 3 } });
|
||||||
|
~
|
||||||
|
const before = f.settings.read('acme');
|
||||||
|
~
|
||||||
|
f.settings.set('acme', { revision: before.revision, instance: 'gate-215', op: 'add', definition: 'merge-gate' }, 'jason');
|
||||||
|
~
|
||||||
|
@@ -286,7 +286,8 @@ test("row 213 a creative instance is the human's: add, vars and definition chang
|
||||||
|
writeFileSync(join(f.root, "config", "personas", "acme", "bean.md"), text, { mode: 0o600 });
|
||||||
|
~
|
||||||
|
const persona = { "persona.name": "Bean", "persona.sha256": createHash("sha256").update(text).digest("hex") };
|
||||||
|
~
|
||||||
|
const view = f.settings.read("acme");
|
||||||
|
~
|
||||||
|
|
||||||
|
+// Row 285 (mos-1332 item 4): the companion definition declares gitea.
|
||||||
|
~
|
||||||
|
assert.deepEqual(view.definitions.companion, { services:
|
||||||
|
-[],
|
||||||
|
+["gitea"],
|
||||||
|
accepted: true });
|
||||||
|
~
|
||||||
|
const add = { instance: "bean", op: "add", definition: "companion", vars: persona };
|
||||||
|
~
|
||||||
|
for (const actor of ["chief-of-staff.chief", "tester"]) {
|
||||||
|
~
|
||||||
|
assert.throws(() => f.settings.set("acme", { revision: view.revision, ...add }, actor), e => e.code === "organization-creative-human-only", actor);
|
||||||
|
~
|
||||||
|
@@ -331,8 +332,8 @@ test("row 213 a creative instance is the human's: add, vars and definition chang
|
||||||
|
// every actor, the human included. The listing's endProtected is that same check for its reader.
|
||||||
|
~
|
||||||
|
test("row 256 T1-T3, T5 the human deletes a creative instance, no other actor does, and the assistant stays", () => {
|
||||||
|
~
|
||||||
|
const f = fixture(doc => {
|
||||||
|
~
|
||||||
|
doc.roles.bean = { definition:
|
||||||
|
-"companion"
|
||||||
|
+"companion", credentials: { gitea: { store: true, rotateBy: FAR_DATE } }
|
||||||
|
};
|
||||||
|
~
|
||||||
|
doc.roles.muse = { definition:
|
||||||
|
-"ideas"
|
||||||
|
+"ideas", credentials: { gitea: { store: true, rotateBy: FAR_DATE } }
|
||||||
|
};
|
||||||
|
~
|
||||||
|
doc.roles.assistant = { definition: "assistant", holder: "mos" };
|
||||||
|
~
|
||||||
|
});
|
||||||
|
~
|
||||||
|
const del = (instance, actor) => () => f.settings.set("acme", { revision: f.settings.read("acme").revision, instance, op: "delete" }, actor);
|
||||||
|
~
|
||||||
|
@@ -377,7 +378,7 @@ test("row 256 T1-T3, T5 the human deletes a creative instance, no other actor do
|
||||||
|
// instance can't be kept, launch.by or an arbiter, so the check it reaches is the last-listed one.
|
||||||
|
~
|
||||||
|
test("row 256 T4 the human's delete of the only listed instance, a creative one, is the last-listed refusal", () => {
|
||||||
|
~
|
||||||
|
const f = fixture(doc => {
|
||||||
|
~
|
||||||
|
doc.roles.bean = { definition:
|
||||||
|
-"companion"
|
||||||
|
+"companion", credentials: { gitea: { store: true, rotateBy: FAR_DATE } }
|
||||||
|
};
|
||||||
|
~
|
||||||
|
doc.launch.instances = ["bean"];
|
||||||
|
~
|
||||||
|
});
|
||||||
|
~
|
||||||
|
const bytes = readFileSync(f.file, "utf8");
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/library-projects-protected.test.mjs
|
||||||
|
diff --git a/packages/business/tests/library-projects-protected.test.mjs b/packages/business/tests/library-projects-protected.test.mjs
|
||||||
|
index 51672bd7b..d4d09d94f 100644
|
||||||
|
--- a/packages/business/tests/library-projects-protected.test.mjs
|
||||||
|
+++ b/packages/business/tests/library-projects-protected.test.mjs
|
||||||
|
@@ -14,6 +14,7 @@ function fixture(t) {
|
||||||
|
books.universes.hybrid = { kind: 'hybrid', name: 'An invented crossover',
|
||||||
|
~
|
||||||
|
sources: ['harbor', 'second'], books: ['Hybrid Book'], playground: [], constraints: [], notes: 'Fixture only' };
|
||||||
|
~
|
||||||
|
doc.projects = { books, ...doc.projects };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
const dir = join(root, 'config'), file = writeJson(join(dir, 'businesses/acme.json'), doc);
|
||||||
|
~
|
||||||
|
const writer = organizationWriter({ dir, rolesDir: rolesCopy(root) });
|
||||||
|
~
|
||||||
|
// Give both snapshots an existing ordinary committed receipt to preserve.
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/library-seats.test.mjs
|
||||||
|
diff --git a/packages/business/tests/library-seats.test.mjs b/packages/business/tests/library-seats.test.mjs
|
||||||
|
index 3cd0f86cf..da76fdbc7 100644
|
||||||
|
--- a/packages/business/tests/library-seats.test.mjs
|
||||||
|
+++ b/packages/business/tests/library-seats.test.mjs
|
||||||
|
@@ -27,7 +27,9 @@ test("M7/M8: library seats come from library businesses, creative seats from the
|
||||||
|
const { root, dir } = fixture(t);
|
||||||
|
~
|
||||||
|
const doc = businessDoc(root, "acme");
|
||||||
|
~
|
||||||
|
doc.projects = { books: mappingEntry(), ...doc.projects };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.roles.bean = { definition: "companion" };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
writeJson(join(dir, "businesses", "acme.json"), doc);
|
||||||
|
~
|
||||||
|
const found = sets(dir);
|
||||||
|
~
|
||||||
|
assert.deepEqual([...found.librarySeats].sort(), ["bean", "chief", "coder", "cto", "pm", "reviewer"]);
|
||||||
|
~
|
||||||
|
@@ -39,6 +41,7 @@ test("M8: a business with no library project puts no seat in either set", (t) =>
|
||||||
|
const { root, dir } = fixture(t);
|
||||||
|
~
|
||||||
|
const doc = businessDoc(root, "other");
|
||||||
|
~
|
||||||
|
doc.roles.bean = { definition: "companion" };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
writeJson(join(dir, "businesses", "other.json"), doc);
|
||||||
|
~
|
||||||
|
const found = sets(dir);
|
||||||
|
~
|
||||||
|
assert.equal(found.librarySeats.size, 0);
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/resolve.test.mjs
|
||||||
|
diff --git a/packages/business/tests/resolve.test.mjs b/packages/business/tests/resolve.test.mjs
|
||||||
|
index b1e50f349..2fa106053 100644
|
||||||
|
--- a/packages/business/tests/resolve.test.mjs
|
||||||
|
+++ b/packages/business/tests/resolve.test.mjs
|
||||||
|
@@ -31,7 +31,7 @@ const resolve = (s, instance) => resolveInstance({ system: s.system, business: s
|
||||||
|
test('C2-04: a library first in projects does not hide a later project layer', async t => {
|
||||||
|
~
|
||||||
|
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
|
||||||
|
~
|
||||||
|
const { rmSync } = await import('node:fs');
|
||||||
|
~
|
||||||
|
const s = setup(doc => {
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
doc.projects = { books: mappingEntry(), ...doc.projects }; }, { vars: { 'tracker.project': 7 } });
|
||||||
|
~
|
||||||
|
t.after(() => rmSync(s.root, { recursive: true, force: true }));
|
||||||
|
~
|
||||||
|
const result = resolve(s, 'coder');
|
||||||
|
~
|
||||||
|
assert.equal(result.project, 'stack');
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/cli/tests/case2-install.test.mjs
|
||||||
|
diff --git a/packages/cli/tests/case2-install.test.mjs b/packages/cli/tests/case2-install.test.mjs
|
||||||
|
index cc1142510..51b606bda 100644
|
||||||
|
--- a/packages/cli/tests/case2-install.test.mjs
|
||||||
|
+++ b/packages/cli/tests/case2-install.test.mjs
|
||||||
|
@@ -51,8 +51,11 @@ function world(t, { profile = "library" } = {}) {
|
||||||
|
for (const r of Object.values(doc.roles)) r.vars = { ...r.vars, harness: "pi" };
|
||||||
|
~
|
||||||
|
if (profile === "library") {
|
||||||
|
~
|
||||||
|
doc.projects.books = { ...mappingEntry(), user: "writer" };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.roles.bean = { definition: "companion", vars: { harness: "pi" } };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.roles.chet = { definition: "companion", vars: { harness: "pi" } };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chet.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
} else doc.vars["bus.tester"] = true;
|
||||||
|
~
|
||||||
|
const input = writeJson(join(root, "input", "acme.json"), doc);
|
||||||
|
~
|
||||||
|
const staging = join(root, "staging");
|
||||||
|
~
|
||||||
|
@@ -212,6 +215,7 @@ test("the factory install refuses a library project and bus.tester off, before a
|
||||||
|
const x = world(t, { profile: "factory" });
|
||||||
|
~
|
||||||
|
const doc = JSON.parse(readFileSync(x.input, "utf8"));
|
||||||
|
~
|
||||||
|
doc.projects.books = { ...mappingEntry(), user: "writer" };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
writeJson(x.input, doc);
|
||||||
|
~
|
||||||
|
refused(install(x, { profile: "factory" }), /profile-library-business/);
|
||||||
|
~
|
||||||
|
delete doc.projects.books;
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/cli/tests/launcher.test.mjs
|
||||||
|
diff --git a/packages/cli/tests/launcher.test.mjs b/packages/cli/tests/launcher.test.mjs
|
||||||
|
index baabd843e..eeca18eb0 100644
|
||||||
|
--- a/packages/cli/tests/launcher.test.mjs
|
||||||
|
+++ b/packages/cli/tests/launcher.test.mjs
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
import {
|
||||||
|
+FAR_DATE,
|
||||||
|
launchDoc } from "../../business/tests/helpers.mjs";
|
||||||
|
~
|
||||||
|
// The S6 launcher inside a real bus host: real broker child, real runners
|
||||||
|
~
|
||||||
|
// in the bwrap sandbox, the fake adapter from packages/harness standing in for the
|
||||||
|
~
|
||||||
|
// harness. The chief of staff launches a coder through its `launch` tool (row 119: the
|
||||||
|
~
|
||||||
|
@@ -32,7 +32,7 @@ const skip = sandboxProblem() ?? false;
|
||||||
|
|
||||||
|
~
|
||||||
|
test('C2-04: launcher workspace clones code but never the library', { skip, timeout: 30000 }, async t => {
|
||||||
|
~
|
||||||
|
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
|
||||||
|
~
|
||||||
|
const f = await setup(t, doc => {
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
doc.projects = { books: mappingEntry(), ...doc.projects }; return doc; });
|
||||||
|
~
|
||||||
|
await f.launcher.launchPm();
|
||||||
|
~
|
||||||
|
const workspace = workspaceDir(f.f.dataRoot, 'acme', 'chief');
|
||||||
|
~
|
||||||
|
assert.equal(existsSync(join(workspace, 'stack', '.git')), true);
|
||||||
|
~
|
||||||
|
@@ -766,7 +766,7 @@ test("row 64 a role skill that isn't enabled refuses skill-not-enabled, and one
|
||||||
|
test("row 213 a creative instance's persona is read from <configDir>/personas: off its digest the launch fails with the mismatch as its reason", { timeout: 30000 }, async (t) => {
|
||||||
|
~
|
||||||
|
const text = "Warm. PERSONA-MARKER-d2\n";
|
||||||
|
~
|
||||||
|
const given = prepare(t, (doc) => {
|
||||||
|
~
|
||||||
|
doc.roles.bean = { definition: "companion",
|
||||||
|
+credentials: { gitea: { store: true, rotateBy: FAR_DATE } },
|
||||||
|
vars: { harness: "pi", model: "claude-sonnet-5-5", thinking: "high", "persona.name": "Bean", "persona.sha256": createHash("sha256").update(text).digest("hex") } };
|
||||||
|
~
|
||||||
|
doc.launch.instances.push("bean");
|
||||||
|
~
|
||||||
|
return doc;
|
||||||
|
~
|
||||||
|
});
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/cli/tests/thread-launch.test.mjs
|
||||||
|
diff --git a/packages/cli/tests/thread-launch.test.mjs b/packages/cli/tests/thread-launch.test.mjs
|
||||||
|
index fa3adb866..3e313e49d 100644
|
||||||
|
--- a/packages/cli/tests/thread-launch.test.mjs
|
||||||
|
+++ b/packages/cli/tests/thread-launch.test.mjs
|
||||||
|
@@ -400,6 +400,7 @@ test("REQ-THREAD-1 REQ-LAUNCH-1 the chief can't launch the assistant outside a t
|
||||||
|
test('C2-09a: fromSession refuses a creative instance outside a thread without a sandbox', { timeout: 30000 }, async t => {
|
||||||
|
~
|
||||||
|
const prepared = prepare(t, { edit: doc => {
|
||||||
|
~
|
||||||
|
doc.roles.bean = { ...doc.roles.assistant, definition: 'companion' };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.launch.instances.push('bean');
|
||||||
|
~
|
||||||
|
return doc;
|
||||||
|
~
|
||||||
|
} });
|
||||||
|
~
|
||||||
|
@@ -465,7 +466,9 @@ test('C2-09a: creative thread messages start distinct runs and keep each instanc
|
||||||
|
const vars = { ...doc.roles.assistant.vars };
|
||||||
|
~
|
||||||
|
delete doc.roles.assistant;
|
||||||
|
~
|
||||||
|
doc.roles.bean = { definition: 'companion', vars: { ...vars } };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.roles.chet = { definition: 'continuity', vars: { ...vars } };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chet.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.launch.instances = ['coder', 'bean', 'chet'];
|
||||||
|
~
|
||||||
|
return doc;
|
||||||
|
~
|
||||||
|
} });
|
||||||
|
~
|
||||||
|
@@ -501,6 +504,7 @@ test('C2-09a: creative thread messages start distinct runs and keep each instanc
|
||||||
|
test('C2-09a: terminating one creative thread does not signal an unselected peer of the same instance', { skip, timeout: 90000 }, async t => {
|
||||||
|
~
|
||||||
|
const prepared = prepare(t, { sonnet: 2, idle: 60, edit: doc => {
|
||||||
|
~
|
||||||
|
doc.roles.bean = { ...doc.roles.assistant, definition: 'companion' };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
delete doc.roles.assistant;
|
||||||
|
~
|
||||||
|
doc.launch.instances = ['coder', 'bean'];
|
||||||
|
~
|
||||||
|
return doc;
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/cli/tests/trackers-boot.test.mjs
|
||||||
|
diff --git a/packages/cli/tests/trackers-boot.test.mjs b/packages/cli/tests/trackers-boot.test.mjs
|
||||||
|
index 8d1a407c6..e7f50c947 100644
|
||||||
|
--- a/packages/cli/tests/trackers-boot.test.mjs
|
||||||
|
+++ b/packages/cli/tests/trackers-boot.test.mjs
|
||||||
|
@@ -14,7 +14,7 @@ import { fixture, tmp } from "./helpers.mjs";
|
||||||
|
|
||||||
|
~
|
||||||
|
test('C2-04: a library-only business with tracker.baseUrl boots without a project tracker', async t => {
|
||||||
|
~
|
||||||
|
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
|
||||||
|
~
|
||||||
|
const f = fixture(tmp(t), 'acme', doc => {
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
doc.projects = { books: mappingEntry() }; return doc; });
|
||||||
|
~
|
||||||
|
const warnings = [];
|
||||||
|
~
|
||||||
|
const boot = bootConfig({ system: loadSystem({ env: f.env }), businessId: 'acme', env: f.env, warn: text => warnings.push(text) });
|
||||||
|
~
|
||||||
|
assert.equal(boot.trackers, undefined);
|
||||||
|
~
|
||||||
|
@@ -40,6 +40,7 @@ test("bootConfig trackers reach the S3 adapter in the real broker child, which g
|
||||||
|
|
||||||
|
~
|
||||||
|
const f = fixture(root, "acme", (doc) => {
|
||||||
|
~
|
||||||
|
doc.projects = { books: mappingEntry(), ...doc.projects };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.vars["tracker.baseUrl"] = srv.url;
|
||||||
|
~
|
||||||
|
doc.tracker.sync.botId = bots.sync;
|
||||||
|
~
|
||||||
|
// The chief of staff (row 119) has no tracker bot.
|
||||||
|
~
|
||||||
|
@@ -51,7 +52,7 @@ test("bootConfig trackers reach the S3 adapter in the real broker child, which g
|
||||||
|
chmodSync(file, 0o600);
|
||||||
|
~
|
||||||
|
};
|
||||||
|
~
|
||||||
|
put(f.doc.tracker.sync.credentials.vikunja.file, fake.token(bots.sync, SCOPES.sync));
|
||||||
|
~
|
||||||
|
for (const r of Object.keys(f.doc.roles)) if
|
||||||
|
-(f.doc.roles[r].credentials)
|
||||||
|
+(f.doc.roles[r].credentials?.vikunja)
|
||||||
|
put(f.doc.roles[r].credentials.vikunja.file, fake.token(bots[r], r === "pm" ? SCOPES.pm : SCOPES.worker));
|
||||||
|
~
|
||||||
|
writeJson(join(root, "project", ".mosaic", "project.json"), { projectVersion: 1, id: "stack", vars: { "tracker.project": project } });
|
||||||
|
~
|
||||||
|
|
||||||
|
~
|
||||||
|
mkdirSync(f.dataRoot, { recursive: true, mode: 0o700 });
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/control-board/tests/creative-hidden.test.mjs
|
||||||
|
diff --git a/packages/control-board/tests/creative-hidden.test.mjs b/packages/control-board/tests/creative-hidden.test.mjs
|
||||||
|
index c2abd348e..12e16866e 100644
|
||||||
|
--- a/packages/control-board/tests/creative-hidden.test.mjs
|
||||||
|
+++ b/packages/control-board/tests/creative-hidden.test.mjs
|
||||||
|
@@ -20,7 +20,9 @@ function fixture(t) {
|
||||||
|
const dir = join(root, "config");
|
||||||
|
~
|
||||||
|
const doc = businessDoc(root, "acme");
|
||||||
|
~
|
||||||
|
doc.projects = { books: mappingEntry(), ...doc.projects };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.roles.bean = { definition: "companion" };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
writeJson(join(dir, "businesses", "acme.json"), doc);
|
||||||
|
~
|
||||||
|
const threadDir = join(root, "data", "threads", "acme", "t1", "session");
|
||||||
|
~
|
||||||
|
mkdirSync(threadDir, { recursive: true });
|
||||||
|
~
|
||||||
|
|
||||||
|
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/discord/tests/library-seat.test.mjs
|
||||||
|
diff --git a/packages/discord/tests/library-seat.test.mjs b/packages/discord/tests/library-seat.test.mjs
|
||||||
|
index 315f69698..a7ac869e5 100644
|
||||||
|
--- a/packages/discord/tests/library-seat.test.mjs
|
||||||
|
+++ b/packages/discord/tests/library-seat.test.mjs
|
||||||
|
@@ -31,7 +31,9 @@ function setup(overrides = {}) {
|
||||||
|
function business(s, { library, role = "sage", definition = "companion" }) {
|
||||||
|
~
|
||||||
|
const doc = businessDoc(s.root, "acme");
|
||||||
|
~
|
||||||
|
if (library) doc.projects = { books: mappingEntry(), ...doc.projects };
|
||||||
|
~
|
||||||
|
|
||||||
|
+if (library) doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
doc.roles[role] = { definition };
|
||||||
|
~
|
||||||
|
|
||||||
|
+doc.roles[role].credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
|
||||||
|
~
|
||||||
|
writeJson(join(s.root, "businesses", "acme.json"), doc);
|
||||||
|
~
|
||||||
|
}
|
||||||
|
~
|
||||||
|
|
||||||
|
~
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/bus/tests/reload.test.mjs
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/bus/tests/reload.test.mjs
|
||||||
diff --git a/packages/bus/tests/reload.test.mjs b/packages/bus/tests/reload.test.mjs
|
diff --git a/packages/bus/tests/reload.test.mjs b/packages/bus/tests/reload.test.mjs
|
||||||
index 091b37b26..342d578d0 100644
|
index 091b37b26..342d578d0 100644
|
||||||
--- a/packages/bus/tests/reload.test.mjs
|
--- a/packages/bus/tests/reload.test.mjs
|
||||||
@@ -37,8 +37,7 @@ index 091b37b26..342d578d0 100644
|
|||||||
~
|
~
|
||||||
});
|
});
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/business.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/business/tests/business.test.mjs
|
|
||||||
diff --git a/packages/business/tests/business.test.mjs b/packages/business/tests/business.test.mjs
|
diff --git a/packages/business/tests/business.test.mjs b/packages/business/tests/business.test.mjs
|
||||||
index b79576af8..f78789250 100644
|
index b79576af8..f78789250 100644
|
||||||
--- a/packages/business/tests/business.test.mjs
|
--- a/packages/business/tests/business.test.mjs
|
||||||
@@ -75,8 +74,7 @@ index b79576af8..f78789250 100644
|
|||||||
~
|
~
|
||||||
refuses(() => validateBusinessDocument(doc, join(root, 'businesses/acme.json'), { rolesDir: REPO_ROLES }), /publish.*library/);
|
refuses(() => validateBusinessDocument(doc, join(root, 'businesses/acme.json'), { rolesDir: REPO_ROLES }), /publish.*library/);
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/cli.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/business/tests/cli.test.mjs
|
|
||||||
diff --git a/packages/business/tests/cli.test.mjs b/packages/business/tests/cli.test.mjs
|
diff --git a/packages/business/tests/cli.test.mjs b/packages/business/tests/cli.test.mjs
|
||||||
index 3aa1d52ee..beb367f8c 100644
|
index 3aa1d52ee..beb367f8c 100644
|
||||||
--- a/packages/business/tests/cli.test.mjs
|
--- a/packages/business/tests/cli.test.mjs
|
||||||
@@ -98,8 +96,7 @@ index 3aa1d52ee..beb367f8c 100644
|
|||||||
~
|
~
|
||||||
const checked = run(s, 'validate', 'acme');
|
const checked = run(s, 'validate', 'acme');
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/instance-settings.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/business/tests/instance-settings.test.mjs
|
|
||||||
diff --git a/packages/business/tests/instance-settings.test.mjs b/packages/business/tests/instance-settings.test.mjs
|
diff --git a/packages/business/tests/instance-settings.test.mjs b/packages/business/tests/instance-settings.test.mjs
|
||||||
index 4b4860633..54c22e0e0 100644
|
index 4b4860633..54c22e0e0 100644
|
||||||
--- a/packages/business/tests/instance-settings.test.mjs
|
--- a/packages/business/tests/instance-settings.test.mjs
|
||||||
@@ -121,8 +118,7 @@ index 4b4860633..54c22e0e0 100644
|
|||||||
~
|
~
|
||||||
f.settings.set('acme', { revision: before.revision, instance: 'gate-215', op: 'add', definition: 'merge-gate' }, 'jason');
|
f.settings.set('acme', { revision: before.revision, instance: 'gate-215', op: 'add', definition: 'merge-gate' }, 'jason');
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/library-projects-protected.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/business/tests/library-projects-protected.test.mjs
|
|
||||||
diff --git a/packages/business/tests/library-projects-protected.test.mjs b/packages/business/tests/library-projects-protected.test.mjs
|
diff --git a/packages/business/tests/library-projects-protected.test.mjs b/packages/business/tests/library-projects-protected.test.mjs
|
||||||
index 51672bd7b..d4d09d94f 100644
|
index 51672bd7b..d4d09d94f 100644
|
||||||
--- a/packages/business/tests/library-projects-protected.test.mjs
|
--- a/packages/business/tests/library-projects-protected.test.mjs
|
||||||
@@ -143,8 +139,7 @@ index 51672bd7b..d4d09d94f 100644
|
|||||||
~
|
~
|
||||||
// Give both snapshots an existing ordinary committed receipt to preserve.
|
// Give both snapshots an existing ordinary committed receipt to preserve.
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/library-seats.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/business/tests/library-seats.test.mjs
|
|
||||||
diff --git a/packages/business/tests/library-seats.test.mjs b/packages/business/tests/library-seats.test.mjs
|
diff --git a/packages/business/tests/library-seats.test.mjs b/packages/business/tests/library-seats.test.mjs
|
||||||
index 3cd0f86cf..da76fdbc7 100644
|
index 3cd0f86cf..da76fdbc7 100644
|
||||||
--- a/packages/business/tests/library-seats.test.mjs
|
--- a/packages/business/tests/library-seats.test.mjs
|
||||||
@@ -186,8 +181,7 @@ index 3cd0f86cf..da76fdbc7 100644
|
|||||||
~
|
~
|
||||||
assert.equal(found.librarySeats.size, 0);
|
assert.equal(found.librarySeats.size, 0);
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/resolve.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/business/tests/resolve.test.mjs
|
|
||||||
diff --git a/packages/business/tests/resolve.test.mjs b/packages/business/tests/resolve.test.mjs
|
diff --git a/packages/business/tests/resolve.test.mjs b/packages/business/tests/resolve.test.mjs
|
||||||
index b1e50f349..2fa106053 100644
|
index b1e50f349..2fa106053 100644
|
||||||
--- a/packages/business/tests/resolve.test.mjs
|
--- a/packages/business/tests/resolve.test.mjs
|
||||||
@@ -209,8 +203,7 @@ index b1e50f349..2fa106053 100644
|
|||||||
~
|
~
|
||||||
assert.equal(result.project, 'stack');
|
assert.equal(result.project, 'stack');
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/cli/tests/case2-install.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/cli/tests/case2-install.test.mjs
|
|
||||||
diff --git a/packages/cli/tests/case2-install.test.mjs b/packages/cli/tests/case2-install.test.mjs
|
diff --git a/packages/cli/tests/case2-install.test.mjs b/packages/cli/tests/case2-install.test.mjs
|
||||||
index cc1142510..51b606bda 100644
|
index cc1142510..51b606bda 100644
|
||||||
--- a/packages/cli/tests/case2-install.test.mjs
|
--- a/packages/cli/tests/case2-install.test.mjs
|
||||||
@@ -257,8 +250,7 @@ index cc1142510..51b606bda 100644
|
|||||||
~
|
~
|
||||||
delete doc.projects.books;
|
delete doc.projects.books;
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/cli/tests/launcher.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/cli/tests/launcher.test.mjs
|
|
||||||
diff --git a/packages/cli/tests/launcher.test.mjs b/packages/cli/tests/launcher.test.mjs
|
diff --git a/packages/cli/tests/launcher.test.mjs b/packages/cli/tests/launcher.test.mjs
|
||||||
index 9e7518ee5..eeca18eb0 100644
|
index 9e7518ee5..eeca18eb0 100644
|
||||||
--- a/packages/cli/tests/launcher.test.mjs
|
--- a/packages/cli/tests/launcher.test.mjs
|
||||||
@@ -280,8 +272,7 @@ index 9e7518ee5..eeca18eb0 100644
|
|||||||
~
|
~
|
||||||
assert.equal(existsSync(join(workspace, 'stack', '.git')), true);
|
assert.equal(existsSync(join(workspace, 'stack', '.git')), true);
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/cli/tests/thread-launch.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/cli/tests/thread-launch.test.mjs
|
|
||||||
diff --git a/packages/cli/tests/thread-launch.test.mjs b/packages/cli/tests/thread-launch.test.mjs
|
diff --git a/packages/cli/tests/thread-launch.test.mjs b/packages/cli/tests/thread-launch.test.mjs
|
||||||
index fa3adb866..3e313e49d 100644
|
index fa3adb866..3e313e49d 100644
|
||||||
--- a/packages/cli/tests/thread-launch.test.mjs
|
--- a/packages/cli/tests/thread-launch.test.mjs
|
||||||
@@ -339,8 +330,7 @@ index fa3adb866..3e313e49d 100644
|
|||||||
~
|
~
|
||||||
return doc;
|
return doc;
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/cli/tests/trackers-boot.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/cli/tests/trackers-boot.test.mjs
|
|
||||||
diff --git a/packages/cli/tests/trackers-boot.test.mjs b/packages/cli/tests/trackers-boot.test.mjs
|
diff --git a/packages/cli/tests/trackers-boot.test.mjs b/packages/cli/tests/trackers-boot.test.mjs
|
||||||
index 8d1a407c6..e7f50c947 100644
|
index 8d1a407c6..e7f50c947 100644
|
||||||
--- a/packages/cli/tests/trackers-boot.test.mjs
|
--- a/packages/cli/tests/trackers-boot.test.mjs
|
||||||
@@ -396,8 +386,7 @@ index 8d1a407c6..e7f50c947 100644
|
|||||||
~
|
~
|
||||||
mkdirSync(f.dataRoot, { recursive: true, mode: 0o700 });
|
mkdirSync(f.dataRoot, { recursive: true, mode: 0o700 });
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/control-board/tests/creative-hidden.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/control-board/tests/creative-hidden.test.mjs
|
|
||||||
diff --git a/packages/control-board/tests/creative-hidden.test.mjs b/packages/control-board/tests/creative-hidden.test.mjs
|
diff --git a/packages/control-board/tests/creative-hidden.test.mjs b/packages/control-board/tests/creative-hidden.test.mjs
|
||||||
index c2abd348e..12e16866e 100644
|
index c2abd348e..12e16866e 100644
|
||||||
--- a/packages/control-board/tests/creative-hidden.test.mjs
|
--- a/packages/control-board/tests/creative-hidden.test.mjs
|
||||||
@@ -423,8 +412,7 @@ index c2abd348e..12e16866e 100644
|
|||||||
~
|
~
|
||||||
mkdirSync(threadDir, { recursive: true });
|
mkdirSync(threadDir, { recursive: true });
|
||||||
~
|
~
|
||||||
|
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/discord/tests/library-seat.test.mjs
|
||||||
Command: git diff --no-color --word-diff=porcelain babae6adc -- packages/discord/tests/library-seat.test.mjs
|
|
||||||
diff --git a/packages/discord/tests/library-seat.test.mjs b/packages/discord/tests/library-seat.test.mjs
|
diff --git a/packages/discord/tests/library-seat.test.mjs b/packages/discord/tests/library-seat.test.mjs
|
||||||
index 315f69698..a7ac869e5 100644
|
index 315f69698..a7ac869e5 100644
|
||||||
--- a/packages/discord/tests/library-seat.test.mjs
|
--- a/packages/discord/tests/library-seat.test.mjs
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
1: ca90d28bd = 1: 6ea4e3d37 row 285: C2-08b, creative roles hold library.write and the gitea credential, the chief of staff a read-scoped gitea credential; #giteaRole refuses the chief (#1790, mos-1309 item 5, sage-2915, sage-2921)
|
||||||
|
2: 362d1ebe3 = 2: 5e8e5f8a9 row 285: fixtures, example and README give the chief and creative instances their gitea reference (#1790, mos-1330)
|
||||||
|
3: 052e094e0 = 3: 86322bea2 row 285: a chief-of-staff or creative instance that names publish refuses at load, keeping today's N10 refusal; instance-settings :289 follows the companion's gitea (#1790, mos-1332)
|
||||||
|
4: 68e6d4588 = 4: 02fdae405 row 285: webby-0178 early read, drop the stale creative publish comment and name the example's test readers (#1790)
|
||||||
|
5: 299a8027c = 5: ee81d2ae6 row 285: mos-1333, withdraw the publish fence; N10 option (a) with an assistant instance; a chief with its gitea ref, identity and publish loads; restore the creative publish test; BUILD.md gate scope (sage-2946) (#1790)
|
||||||
|
6: 2773b0151 = 6: 059cf04ea row 285: library.write joins ACTIONS and ROUTED in the business vocabulary and the broker under PRD 1.16 REQ-WAIT-3 and REQ-LIB-6, with a hard-waits test; BUILD.md records the r2 rebase, range-diff and drift check (#1790, sage-3578)
|
||||||
|
7: 644bcaa16 = 7: 01dfecc1f row 285: BUILD.md records N1, the creative-only library.write refusal as a follow-up, and the round scope (#1790, sage-3593)
|
||||||
|
8: 87b7547f8 ! 8: 9f7adb03e docs: row 285 r3 replay and static drift evidence before CLEAR (#1790, sage-4039)
|
||||||
|
@@ Commit message
|
||||||
|
docs: row 285 r3 replay and static drift evidence before CLEAR (#1790, sage-4039)
|
||||||
|
|
||||||
|
## BUILD-LOG.md ##
|
||||||
|
-@@ BUILD-LOG.md: remain; no live state, schema or bus policy change.
|
||||||
|
+@@ BUILD-LOG.md: claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
|
||||||
|
+ 2026-10-24 | Beakley (88b97f65) | Row 217 round 2, sage-4037 | Rebased published dde5b8496 onto e0c6142f3 on new beakley/row217-r2; both append-log histories retained. Conflicts preserve landed grant dispatch, revocation hook and lookup exports. Added E4 citation-unavailable product path and real supporting-scope/index comparison tests after row283 8d2856ee3. Untested: no Node/npm/tests/mutants/build; ready for Sage CLEAR after Lena296. Full range-diff and honest discarded local rebase correction in agents/beakley/work/queue-217/BUILD.md.
|
||||||
|
|
||||||
|
- 2026-10-24 | Goldie | Row265 / #1770 verified (mos-1567, sage-3942) | Approved correction adds solely address import pin + Row265 comment to project-runtime.test and one pure-source RUNNER_FILES mount; new block checks parser has no imports. Serialized fresh-short-TMP timeout-k10: unchanged sandbox10/10, parser15/15, rooms18/18, full bus957/957, twelve named refusal mutants killed (each Node1, driver0), restored parser15/15 + rooms18/18. All positives zero fail/skip/cancel; every mutation restored full broker SHA71b32ee4. Old first-red evidence retained, no other old-test change. Slot returned goldie-0034; Boyd packet explicitly includes mount-list review, candidate push next.
|
||||||
|
- 2026-10-24T07:18:53Z | Sage | Row 327 (#1825, Bradford, Poe and Dewey) LANDED 68c08b4e7. Before: refactor at 94d9e90a6; the push guard was a scratch script with no reviewed-binary check. After: scripts/push-check.sh and scripts/test-push-check.sh on refactor, 3 commits cherry-picked onto 6a5e12511 with blobs equal to the round 3 tip d858c9f8b, plus doc commits 76f84465f and 68c08b4e7. Binaries are found by numstat or a NUL in the first 8000 committed bytes, regardless of attributes; each needs its sha256 and path in an approved latest-round candidate; an unconfirmed queue tail exits 2. Reviews: Poe c31525 rev 3882, Dewey c31526 rev 3883. Gate: 1st run 06:57Z RED, not the candidate: canonical node_modules was empty from 05:45:15Z (sage-4023). Rerun with its own root npm ci GREEN 07:15:49Z: 17 package suites 0 failures (cli 986, plugins 119, webui 418), 11 scripts exit 0, push-check 6 mutants KILLED; skips are the queue canonical-root check and the row 244 live provider cases. The landed push-check.sh passed its own push (NO_BINARY, NO_ATTRIBUTION, PUSH_READY). mos-1575: gates install their own node_modules; canonical restored with npm ci (128 packages).
|
||||||
|
-+
|
||||||
|
+ 2026-10-24T10:21Z | Beakley (88b97f65) | Row 217 round2 slot verified, sage-4042/4043 | Source 2d274a5b6: touched57/57, whole library142/142 business270/270 bus974/974 cli988/988 harness172/172 seat218/218, all zero fail/skip/cancel. M1-M5 killed, controls/restored controls green, product hashes restored after each; E4 RED stand-in observed. Only first-red was new runtime fixture invalid-authority, corrected and retained in receipts; no old test failed/edited. Local root/webui npm ci, short TMPDIR, timeout-k10; no canonical npm/rm or module link. Full evidence agents/beakley/work/queue-217/run-r2; Sage owns scripts landing gate and formal review.
|
||||||
|
+2026-10-24T10:02Z | Magica | Row 285 / #1790 r3 before/after (sage-4039, mos-1542) | Before: assigned magica/row285-r3 at b19ffa04f, Scrooge r2 untested at 53db6b7ca. After: seven commits cherry-picked through 644bcaa16; five named overlaps auto-merge preserving newer base changes. Range-diff six '=', one context-only '!'; six patch IDs identical, fixture patch ID differs with upstream import context, exact test added/removed-line comparison identical for all changed tests. business.mjs equals base; Scrooge BUILD equals r2. CREATIVE_KINDS absent in packages/roles/scripts; no 64-hex changed-path pin; 291 conservative reader candidates recorded. No npm or tests before Sage CLEAR; N1 remains follow-up. Own-branch evidence push next, not accepted/green or landed.
|
||||||
|
|
||||||
|
## agents/magica/work/queue-285/BUILD.md (new) ##
|
||||||
|
@@ agents/magica/work/queue-285/role-readers.txt (new)
|
||||||
|
|
||||||
|
## docs/SESSIONS.md ##
|
||||||
|
@@ docs/SESSIONS.md: are never rewritten or removed; corrections are new entries.
|
||||||
|
- 2026-10-24T04:27Z | Goldie (a13dd6d5-5e73-4b7d-8318-02abeff24940) | Row265 / #1770 C2-09b rooms | Goldie owns build, Boyd reviews under sage-3915. New goldie/row265 worktree at ec86f2c84, claim rev3814; room verbs/parser/new tests prepared, no old tests changed. Sage-3932 slot: new parser14/14 and rooms18/18 passed; whole bus in progress before refusal mutants, stop rule active.
|
||||||
|
- 2026-10-24T04:35Z | Goldie (a13dd6d5-5e73-4b7d-8318-02abeff24940) | Row265 / #1770 verified | First slot stopped at project-runtime import pin. mos-1567 narrowly authorizes pin and pure-source mount correction. sage-3942 rerun: sandbox10/10, parser15/15, rooms18/18, bus957/957, twelve refusal mutants killed/restored SHA71b32ee4, parser15/15 + rooms18/18 again. Slot returned goldie-0034; no further test runs. Boyd reviews RUNNER_FILES alongside rooms; own-branch push/claimant in-review next.
|
||||||
|
- 2026-10-24T07:18:53Z | Sage (1ef1e4f8) | Row 327 / #1825 push guard landed (mos-1572 option A, mos-1575) | Gate went red 06:57Z on an empty canonical node_modules (Glomgold's webui npm ci through a link to canonical, glomgold-0011); rerun with its own npm ci GREEN 07:15:49Z on 1bd214e38; pushed 68c08b4e7 07:18:03Z; #1825 closed c31530; canonical restored (128 packages); brief template rule 4db23a51f | landed
|
||||||
|
+ 2026-10-24 | Beakley (88b97f65) | Row 217 round 2 under sage-4037 | New beakley/row217-r2 rebased onto e0c6142f3, retained both log histories, E4 product fix and supporting/index tests drafted. No Node/npm/tests/mutants run; ready for CLEAR; local-only dependency installs required on CLEAR, old-test red goes to Sage.
|
||||||
|
+
|
||||||
|
+ 2026-10-24T10:21Z | Beakley (88b97f65) | Row217 #1718 round2 slot | All touched57 and six whole suites2764 pass, zero skips/cancels; M1-M5 killed/restored, E4 RED stand-in observed. First-new runtime fixture red recorded and corrected; no old-test change/failure. Evidence in agents/beakley/work/queue-217/run-r2. Verified for review on beakley/row217-r2; Sage landing scripts/review remain.
|
||||||
|
+2026-10-24T10:02Z | Magica (483bbea5-e548-4c97-9b85-8f29ba81e427) | Row 285 / #1790 r3 replay, sage-4039 | Seven Scrooge commits replayed onto b19ffa04f; five overlaps auto-merged and inspected; range-diff, stable patch IDs and 291 conservative reader inventory in agents/magica/work/queue-285/BUILD.md. Every test added/removed line matches r2; N1 deferred. Canonical queue move magica-285-start rev3889 succeeded. No npm/tests; own-branch push for CLEAR next.
|
||||||
|
9: d76021656 < -: --------- docs: correct row 285 evidence timestamps with append-only receipts
|
||||||
|
-: --------- > 9: 405b05e91 docs: correct row 285 evidence timestamps with append-only receipts
|
||||||
|
10: 66a800e15 = 10: 0882bd997 docs: trim range-diff evidence trailing whitespace
|
||||||
|
11: babae6adc ! 11: c53ea7d12 row 285: require chief gitea exactly for library businesses (mos-1580, sage-4059, sage-4060)
|
||||||
|
@@ Commit message
|
||||||
|
row 285: require chief gitea exactly for library businesses (mos-1580, sage-4059, sage-4060)
|
||||||
|
|
||||||
|
## BUILD-LOG.md ##
|
||||||
|
-@@ BUILD-LOG.md: remain; no live state, schema or bus policy change.
|
||||||
|
+@@ BUILD-LOG.md: claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
|
||||||
|
2026-10-24T10:02Z | Magica | Row 285 / #1790 r3 before/after (sage-4039, mos-1542) | Before: assigned magica/row285-r3 at b19ffa04f, Scrooge r2 untested at 53db6b7ca. After: seven commits cherry-picked through 644bcaa16; five named overlaps auto-merge preserving newer base changes. Range-diff six '=', one context-only '!'; six patch IDs identical, fixture patch ID differs with upstream import context, exact test added/removed-line comparison identical for all changed tests. business.mjs equals base; Scrooge BUILD equals r2. CREATIVE_KINDS absent in packages/roles/scripts; no 64-hex changed-path pin; 291 conservative reader candidates recorded. No npm or tests before Sage CLEAR; N1 remains follow-up. Own-branch evidence push next, not accepted/green or landed.
|
||||||
|
|
||||||
|
2026-10-24T09:58:36Z | Magica | Row 285 timestamp correction | The preceding Magica entry marked 10:02Z used an incorrect timestamp; replay/evidence commit 87b7547f8 occurred before the measured 09:58:22Z push start. Technical evidence is unchanged.
|
||||||
|
12: eee8ad776 ! 12: 826d6e1d3 row 285: align library and creative fixture credential data under B1 (mos-1581, mos-1582)
|
||||||
|
@@ Commit message
|
||||||
|
row 285: align library and creative fixture credential data under B1 (mos-1581, mos-1582)
|
||||||
|
|
||||||
|
## BUILD-LOG.md ##
|
||||||
|
-@@ BUILD-LOG.md: remain; no live state, schema or bus policy change.
|
||||||
|
+@@ BUILD-LOG.md: claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
|
||||||
|
2026-10-24T10:32:02Z | Magica | Row285 / #1790 gate STOP (sage-4048) | Before: pushed66a800e15, no tests. After: own root/webui npm ci, short scratch TMPDIR, whole files serial timeout-k10; bus958/958 green (108 files), business partial80pass/4fail, first red old row323 case1-business-file tests57/86/95/105 because committed Case1 chief lacks required gitea ref. No more tests/mutants or source edits. Static diagnosis also finds old empty-credential assertions81/112/114, requiring a specific owner ruling. Sage notified magica-0002. No in-review move or green claim.
|
||||||
|
|
||||||
|
2026-10-24T10:42:28Z | Magica | Row285 / #1790 Amendment1 before/after | Before: unconditional chief gitea broke row323. After: chief-only library conditional plus named required-reference refusal, checkCredentialMap unchanged; new three-case test file; own helper/resolve fixture hunks restored to base, own chief/business/identity hunks reconciled under sage-4060. Case1 doc/test byte-identical. M10 planned against new no-library positive and old Case1 doc test. No tests run under held slot; not green/accepted. Residual base library fixture references need authority alignment before re-CLEAR.
|
||||||
@@ -1643,3 +1643,5 @@ are never rewritten or removed; corrections are new entries.
|
|||||||
2026-10-24T10:42:28Z | Magica | Row285 Amendment1 build | mos-1580/sage-4059/4060: chief gitea exact iff library, new three-case file and M10 dual kill plan. Restore own unconditional fixture hunks; Case1 doc/test base-identical. No tests under held slot; own-branch push before CLEAR authorized. Static residual library-fixture needs reported.
|
2026-10-24T10:42:28Z | Magica | Row285 Amendment1 build | mos-1580/sage-4059/4060: chief gitea exact iff library, new three-case file and M10 dual kill plan. Restore own unconditional fixture hunks; Case1 doc/test base-identical. No tests under held slot; own-branch push before CLEAR authorized. Static residual library-fixture needs reported.
|
||||||
|
|
||||||
2026-10-24T10:59:43Z | Magica | Row285 B1 fixture build | mos-1581/1582, sage-4069/4071: 26 credential-only insertions across13 direct-reader files; one allowed trackers-boot guard. Inverse reconstruction preserves every preexisting byte/assertion. Tracker put roles remain pm/cto/coder/reviewer, chief skipped without vikunja. Exact base/incremental word diffs in BUILD.md and b1-*.txt. No tests/npm/queue since HOLD; own-branch push before CLEAR.
|
2026-10-24T10:59:43Z | Magica | Row285 B1 fixture build | mos-1581/1582, sage-4069/4071: 26 credential-only insertions across13 direct-reader files; one allowed trackers-boot guard. Inverse reconstruction preserves every preexisting byte/assertion. Tracker put roles remain pm/cto/coder/reviewer, chief skipped without vikunja. Exact base/incremental word diffs in BUILD.md and b1-*.txt. No tests/npm/queue since HOLD; own-branch push before CLEAR.
|
||||||
|
|
||||||
|
2026-10-24T11:24:17Z | Magica | Row285 r4 replay | sage-4078: new magica/row285-r4 at d0a6a87cd, twelve r3 commits replayed through826d6e1d3; both append histories preserved, source auto-merges. All row285 product/test deltas identical across bases; B1 assertions/26 refs/guard preserved; base diff evidence regenerated. No npm/tests/queue; own r4 push before CLEAR.
|
||||||
Reference in new issue
Block a user