A record from the Factory repository, docs/service-access-merge-receipt.json, shown as committed except that its local paths appear as placeholders in angle brackets, such as <local evidence archive>, standing for files that are not published. Every hash, date and count is as recorded. The build review says what the Factory's receipts support.
{
"recordedAt": "2026-09-29",
"component": "Merge of service access increment 1 into main: the Intelligence registry (src/intelligence.ts), docs, generated site and website",
"branch": "factory/service-access-merge",
"parents": {
"main": "21bb1463c177a8a7044f849943d7b5032e84df88",
"factory/service-access": "4bf1fa6dfa72e5ba3edee2b44527bde41e8192a5"
},
"mergeBase": "985b5f9b538185fc494d702ed598c62f4cd68b95",
"disposition": "merged and resolved by Opus 5.5; independent review of the resolution pending (an interim Fable 5.1 review under the owner's decision \"Fable interim, Astra later\", then Astra from 2026-10-03 18:00), with reports under <local evidence archive>; nothing is pushed and main is not moved here",
"scope": "Joins main (step 1 increments 3 and 3b, lifecycle increments 0-2, the website, CI and intent r10) with service access increment 1, which is provisionally accepted — Fable 5.1 (max) round 1; Astra review pending (Codex usage limit until 2026-10-03 18:00). The merge changes no service-access source or test file and no test anywhere. Nothing composes service access or any lifecycle module; all 27 epics stay open.",
"conflicts": {
"resolvedByHand": "README.md, docs/agents/factory-model.md, docs/build-review.md, docs/guide/index.md, src/intelligence.ts: each side's facts kept (combined diff part1-conflicts-cc.diff)",
"generated": "site/ and website/ regenerated (rm -rf site && npm run docs; rm -rf website && npm run website), never hand-merged; the README Intelligence table is the output of renderIntelligenceTable(), and the two planned tables in docs/agents/intelligence.md were re-rendered and are unchanged",
"autoMergedThenMoved": "docs/design.md merged without a conflict, but the branch's Service access terms, inserted before Progressive release, pushed line 101 (which docs/lifecycle.md cites and test/intelligence-lifecycle-adversarial.test.ts holds) to 112; the section now follows main's Discovery and post-development terms, so every cited line of docs/design.md is where it was on main"
},
"nonMechanical": [
"src/intelligence.ts: the branch's inline service-access entry would add seven lines above the implicit-retries refusal that docs/lifecycle.md cites as src/intelligence.ts:709; it becomes a hoisted function, serviceAccessDeclaration(), called from the last line of MODULE_INTELLIGENCE after discoverySourcesDeclaration(), with its fields unchanged",
"README.md: main's layout (the start marker above the heading, which main's README test requires; the branch had moved it below to fit its row), main's paragraph naming service-access as provisionally accepted with its Astra review pending, and the rendered table of 20 rows: a 25-line section, at the cap",
"docs/agents/factory-model.md: the branch's Service access sentence follows main's lifecycle sentences under What exists, which now also names Service access among the modules not counted there; ACCESS_LIMITS is named with its module beside SCHEDULE_LIMITS; the introduction and the Intelligence row record this merge",
"docs/agents/intelligence.md: the status and the MODULE_INTELLIGENCE description name service-access as in review, and a new section, Merge with service access, records the change; lines above 81 (cited by docs/lifecycle.md) are edited in place only",
"docs/build-review.md and docs/guide/intelligence.md: the Intelligence row and the guide's status record this merge",
"docs/guide/service-access.md: Fable merge review round 1 finding 1 (the docs site badged Service access Accepted, because its Status paragraph began with neither In progress nor In review); the Status paragraph now begins \"In review:\" (provisionally accepted on Fable 5.1's interim round 1; Astra's review pending until 3 October 2026), the rest unchanged, so the guide page and the home card read In progress. docs/service-access-receipt.json's evidence hash for that page is regenerated, its disposition still provisional; its earlier bytes stay at 4bf1fa6",
"website: no content change; apps/website names no service-access claim, and service access is provisionally accepted, not accepted, so the progress log of accepted steps and the claims about accepted modules stay as they are"
],
"policyDigests": {
"method": "taskPolicyDigest(taskId) for every task of each parent and of the merge (policy-digests.ts; policy-digests-main.json, -branch.json and -merged.json under the log directory)",
"result": "the merge's eleven task digests equal main's byte for byte, and the branch's six equal their merged counterparts; the only difference from main is service-access at the end of MODULE_INTELLIGENCE (policy-digests-main-vs-merged.diff)"
},
"files": {
"src/intelligence.ts": "2e4a60e52e2fda4e1ea9bf5625de13230498725ee5c0fabe57ba1eecc222695e",
"README.md": "adca95e15da200194665e278f4952a0ceb9c41438176224cebb140d1a016fc2b",
"docs/agents/factory-model.md": "f5fcc1f187dd57d6f12bd86b82109417ff60faabd2951943c6373234d0191ed3",
"docs/agents/intelligence.md": "1bea6322bf775254f3dd45066e708642071cce0ab5b0a49e900c912ae832f99a",
"docs/build-review.md": "8e832ec23774bc081b99aef72e59c53c39d822a14ee425f5d87a3ef57fd9616c",
"docs/design.md": "7ecbcc135e00364dd7021ac308ebe472439e4278859287e7cc3db7eeff44dbd6",
"docs/guide/index.md": "c4390f6ff3da811a75444482765b7e3bb76b04d07bdbbe54b87b37dc9f2dec7c",
"docs/guide/intelligence.md": "decb2940c7983d1657b8f25ae896ef16d790f49e05b4a1502b6ebac4c8e813e7",
"docs/guide/service-access.md": "cc1c9a982ff22074587d454f4a660a5c84b415ac0a5136d4d9ebcd7ba9d6b2b1",
"docs/service-access-receipt.json": "b0cc8d3a1a16e6aa8eb3fdc8a9c2873eecd2e4e3a624518b78baaa5703f2e568",
"site/build-manifest.json": "a52fef2342ac27984ca36e4e231be94a83fb2b12066a7b6b85369d4d38de0603",
"website/build-manifest.json": "65479727d43135c5d73874fe817a05effb78a6210a680643565a3b109a13eea0"
},
"producer": {
"model": "claude-opus-5-5",
"role": "merge and resolution; not the verifier"
},
"verification": {
"logDirectory": "<local evidence archive>",
"docs": {
"command": "rm -rf site && npm run docs",
"result": "Built 66 pages and copied 13 assets into site",
"log": "r2-01-docs-build.log",
"logSha256": "3f3c9d627fc5166eef047565e6136f671f6459adc65b519c274b5ff0f8b49799",
"note": "rebuilt after the Fable round 1 correction; the round 1 build log 01-docs-build.log has identical bytes"
},
"website": {
"command": "rm -rf website && npm run website",
"result": "Built 4 pages and 12 other files into website; byte-identical to main's website/",
"log": "02-website-build.log",
"logSha256": "981c860b8b227ac9b71c4975a99bf36ba81e72e19c18eba1a58cc5486e93bcd1"
},
"typecheck": {
"command": "npx tsc --project tsconfig.json",
"exitCode": 0,
"log": "03-tsc.log",
"logSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
"focused": {
"command": "node --test test/intelligence.test.ts test/intelligence-adversarial.test.ts test/intelligence-lifecycle.test.ts test/intelligence-lifecycle-adversarial.test.ts test/lifecycle-schedule.test.ts test/lifecycle-schedule-time.test.ts test/lifecycle-schedule-processes.test.ts test/lifecycle-schedule-adversarial.test.ts test/discovery-sources.test.ts test/discovery-text.test.ts test/discovery-sources-adversarial.test.ts test/service-kinds.test.ts test/service-discovery.test.ts test/service-access.test.ts test/service-access-canaries.test.ts test/service-access-boundaries.test.ts test/service-access-adversarial.test.ts test/service-access-regressions.test.ts test/docs-site.test.ts test/design-tokens.test.ts test/website.test.ts test/delivery-boundaries.test.ts",
"passed": 347,
"failed": 0,
"skipped": 0,
"log": "04-focused.log",
"logSha256": "fd28a19d5e80f3734a6cc7a2e3031ea419d170eec93e93a49fb936fffd58ef47"
},
"full": {
"command": "npm run check",
"passed": 1214,
"failed": 0,
"skipped": 0,
"exitCode": 0,
"log": "05-full-check.log",
"logSha256": "e15d6830be54ce11f77fd73e709f31aa00661b27ced3be41a4a752af10afd13d",
"note": "run with this receipt at a placeholder; only this receipt changed afterwards"
},
"afterFableR1Correction": {
"note": "rerun after the Fable merge review round 1 correction (docs/guide/service-access.md and the regenerated site and receipts); run with this entry at a placeholder, and only this receipt changed afterwards",
"docsRecheck": { "command": "npm run docs", "result": "site already holds this build of 66 pages and 13 assets; nothing written", "log": "r2-01b-docs-recheck.log", "logSha256": "54184d28cdfdfcd13dcedc90a712f6a599c837a8afa4c57970f5d891b9eab22f" },
"typecheck": { "command": "npx tsc --project tsconfig.json", "exitCode": 0, "log": "r2-03-tsc.log", "logSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" },
"focused": { "command": "node --test test/docs-site.test.ts test/intelligence.test.ts", "passed": 36, "failed": 0, "skipped": 0, "exitCode": 0, "log": "r2-04-focused.log", "logSha256": "f2458576ebd1a3981fe32b4428af6c2f883e9bb776696a6bcbc45842f60a8e07" },
"full": { "command": "npm run check", "passed": 1214, "failed": 0, "skipped": 0, "exitCode": 0, "log": "r2-05-full-check.log", "logSha256": "cc2ff5710cab3b226adf50b37196a77634b9ca5d0bc506b8d855033e15330b0a" }
},
"dashboard": {
"command": "npm --prefix apps/dashboard run check",
"passed": 10,
"failed": 0,
"skipped": 0,
"exitCode": 0,
"log": "06-dashboard-check.log",
"logSha256": "384896d9c607f22e79f8b07dfe255be903faab694e3b5884c7d9747c0173a577"
}
},
"notEstablished": [
"The independent review of this resolution, and Astra's review of service access increment 1 itself (from 2026-10-03 18:00)",
"That main has moved: the coordinator commits and fast-forwards it after review",
"Fable round 1 finding 2 (organisation-level secrets and variables) stays open until before service access increment 2 reads any live repository",
"Any composition of service access or the lifecycle modules, a live source, a model call, a release or customer value; all 27 epics stay open"
]
}
