Skip to content

Commit 06331ae

Browse files
Sync Boatstack from Intelligence Flow Labs @ a063adb7e10c (#71)
Co-authored-by: operator-stack-publisher[bot] <operator-stack-publisher[bot]@users.noreply.github.com>
1 parent e661cdd commit 06331ae

22 files changed

Lines changed: 823 additions & 132 deletions

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Contributing
44

5-
Boatstack is a generated content distribution. Propose changes to workflow semantics, templates, evidence rules, or generated presentation in [Intelligence Flow](https://github.com/operatorstack/intelligence-flow/tree/c457045039b798a9db660b0f102753fc6bb0a975/labs/12-product-engineering-loop).
5+
Boatstack is a generated content distribution. Propose changes to workflow semantics, templates, evidence rules, or generated presentation in [Intelligence Flow](https://github.com/operatorstack/intelligence-flow/tree/a063adb7e10c577e95906f6cc1bb2dd7d3b99ed9/labs/12-product-engineering-loop).
66

77
The Boatstack repository receives product/runtime changes through a generated pull request. Review the PR's `UPSTREAM.json`, tests, adapter diff, and context-size change; do not hand-edit generated output on `main`. `.github/workflows` is the exception: it is Boatstack's executable control plane, excluded from scheduled projection and changed only through a separate manually reviewed Boatstack PR.
88

UPSTREAM.json

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"canonical_context": {
3-
"characters": 51814,
4-
"estimated_tokens": 12954,
3+
"characters": 53187,
4+
"estimated_tokens": 13297,
55
"estimator": "ceil(total characters / 4); compactness signal, not provider billing",
66
"files": [
77
"product-engineering-loop/references/workflow.md",
@@ -12,7 +12,7 @@
1212
},
1313
"files": {
1414
".gitignore": "a7079e923a776f14f1bb3a6aa0a11a133a8e1dfb35af020f327623357b7e3957",
15-
"CONTRIBUTING.md": "bf4632277b4acced8795c57427be006a3d998b9a536fff24c143480f5152ecf4",
15+
"CONTRIBUTING.md": "224a7dc56b254511c0f149effcce668590f3df06c8eedfdc88798c17e75ffe0d",
1616
"README.md": "125b47671a68556df382f19756fb61fa18925606cbbaf54d6bc9df8872b36870",
1717
"assets/boatstack-journey.svg": "e465befc50c8ce30f3e07e8fd97012931beeb053392c8fbf38ad645023b3cc63",
1818
"assets/boatstack-mark.svg": "be1f984da1bfa69fa5d1f986d8343d21f7e20921b71db888c928b4d2e54b09b5",
@@ -21,67 +21,67 @@
2121
"boatstack/agents/gemini.yaml": "cbf43b387399e456fa6178f86d83e6e35567e6142ff800f8de6ffca306fa963e",
2222
"boatstack/agents/openai.yaml": "68a30a60859556c5a26e16d184594ca243a6043d99c8cf7d66b5dd6d50a93cd1",
2323
"boatstack/assets/templates/adr.md": "c577a3c1c1319061f61deb053597e6e853657022185fe28b8f733327e2a78565",
24-
"boatstack/assets/templates/approval.md": "74b0b816703a6dce3c96c8f95f981af910b020b6908e7f76cf5630778637e9f5",
24+
"boatstack/assets/templates/approval.md": "b4a400b14c0a42338ae985475078eb8c4d14d87dca6d1d6d3e80646f3d0b1b82",
2525
"boatstack/assets/templates/evidence.md": "12dac552bc5373ab443367d5797f41988f14284bcf46d16dfd72015cfddf9ad1",
2626
"boatstack/assets/templates/feature-spec.md": "c7e007cc4295ed4c599642c0587021ef978e729cf0946f6bf3a6c4f01d366ad4",
2727
"boatstack/assets/templates/gaps.md": "911cc2f086104d35071b952950c2ec44258641419f10b2355c594f33eb492cbe",
2828
"boatstack/assets/templates/move.md": "91bfd9a9b9426ac023eb88fd19f4f638190481c1855f1239acc73830528e50f0",
29-
"boatstack/assets/templates/plan-lock.json": "fe5507bfdb99ff892e56be0f3015056a72171183a06930b4555d6075b3ee04d9",
29+
"boatstack/assets/templates/plan-lock.json": "526ba903c42eed3a1dee4c46c47ca90837db35ff79631a737984bf9f5988bb9b",
3030
"boatstack/assets/templates/plan.md": "46b3f9017fe72d97efc429191aafa1711515101b7372cc5488813abc29a64547",
3131
"boatstack/assets/templates/questions.md": "1133b557a832d4988545f3694b365ebffa808640ed696b6c04b5a390266eed80",
3232
"boatstack/assets/templates/test-plan.md": "6db8a9f27dd171fb80222a501cae50eb051e7278c04703fa43b5ff86dd4d2df4",
3333
"boatstack/atomic_unix.go": "89f2723361591de2bb8bd22ce7e34ec529d3278509f0df78fd5c4a7d4140fbe9",
3434
"boatstack/atomic_windows.go": "cefd775cbe7e7c3bd8a3f5673b11cdd784c6d3ebd6de7dcb8f39406b0bee511f",
3535
"boatstack/changelog.go": "c5e1f31440b44d61e6037ad27af0333540af3545d655e35819a0241cbbebd8ec",
3636
"boatstack/changelog_test.go": "ce792f23a7fe1e09fb3096cd1314130a6ab69321d4877b12a8e994027541baf7",
37-
"boatstack/cmd/boatstack-helper/main.go": "dada2c26e5947cd4cf7c47b3c853781b4834a721eb833fc290c393f585367597",
37+
"boatstack/cmd/boatstack-helper/main.go": "e769b9aa4894260a53352865741bc52ad1e257213e270fa3a1d13cf68d07d5d3",
3838
"boatstack/cmd/boatstack-helper/main_test.go": "ff73003b6a5157202fa09ddf1129fb13c3d79702b2e05a8721ce5a11bf5ab779",
3939
"boatstack/config_documentation_test.go": "bd34ac570d08c8d1d1e4f5e86c327c02a55dd5e96bd785b895a05f28fcd3f7a2",
4040
"boatstack/decision.go": "257ca328da6ae19ab252f10ee5d06bd7daf49dd8141d083ab1b32f106ea7a94c",
4141
"boatstack/decision_test.go": "1a92ff832610f9559bd47ccac7fc1755a8b4f8261c35bc72a092830dff05f7c0",
4242
"boatstack/delivery.go": "f203cbfa78a79609fb4f9e66dd013c0c9d8ff8da478cc1ab7e75b425c66b3920",
4343
"boatstack/delivery_test.go": "e669e24bb5bb3cc5d48c6dcfb1e20ad83ddaa26161785254a7aab9d3b1219e11",
4444
"boatstack/evidence.go": "497a31e6ff632cb1d7c3adfc9f269af3f6aa84e948dd5d417c162767542a27df",
45-
"boatstack/export.go": "0f12f06796d0748a14d99118f1b20bcc75631b8c557915af94a854b6c4e8d850",
45+
"boatstack/export.go": "71a3e1493947537cdf271c7a2445ecd7157dee89af84ea548a06f3165cb69780",
4646
"boatstack/export_test.go": "51b0340bec3decdb3e13b2a6cd73dd15e16e906031acb0c98cc553da54622162",
4747
"boatstack/go.mod": "6086ef1b2a83f5696190dca692c653925f27b61f652f659fd3fca43ed54a1641",
4848
"boatstack/go.sum": "26c315c867b11b886f3c9402fce7f341f6a9115a5d61f54afbb5e1b1fb5f6017",
49-
"boatstack/hooks.go": "2b7d899f92efef8a68a160c423a46bcd6fd37daa0eba2ac8ad44ffa3dc5f88c9",
50-
"boatstack/hooks_test.go": "d71271c0b9ea59b907cc0407a7173d3542281fb2984e6e3c3062ac39b131ec59",
51-
"boatstack/init.go": "bc484058959202a832c9b6a76c121fcc5a666b5bcfc52ab7a7e9e3f9b37c0887",
49+
"boatstack/hooks.go": "2895ecb6f20397f2c39b3af8fe37c704a6048cc05d742efce6aae554ce659cfe",
50+
"boatstack/hooks_test.go": "eedef3fe5d0f5b6d27c3290965cadc10f76f6b4fef5860c690d62672850caf3f",
51+
"boatstack/init.go": "013e1fe1f4d058442558e8057e261178af53b0dfd7ea4d72517d0ad8d9d8ca23",
5252
"boatstack/init_test.go": "fa48be69d07691fa7842224ec831e5f290504d8b6565263c9735d2dabd9b43b8",
5353
"boatstack/init_transaction.go": "112456c4e1c4db54c4137bcf4f7a9a9e63399a6f5971e9b3dc952d0c4b2aa4b6",
5454
"boatstack/integrations.go": "75b39ce2e662fccd66bf4b9bff0e097a4db558f23b3aa1d9bc83a5fc6373444c",
5555
"boatstack/migrate.go": "eaf589e2b266238068e42c6d78e01dc040266d28e342cb24f09e33e8541749b3",
5656
"boatstack/migrate_test.go": "9f4bda2fb158c5e54bcc0242dace1da3c1965f9846a213c573956a35b7d1724e",
5757
"boatstack/next.go": "6bf119965704e8979921aaf514b205f85082716f34a5d1901ed63c175103227b",
5858
"boatstack/next_test.go": "641bf32cf160c426531134a4756b0c41c6a6d876d515bb151cd01fd9c1ae5056",
59-
"boatstack/plan.go": "dc34c2b37767574b6bd1327688f002e09b7ed39465a2851712434f151a169825",
59+
"boatstack/plan.go": "8189ee42902bce62dcd39ce7a2e423cecb4c9e0d1dd34a5497e5a732a45c851f",
6060
"boatstack/plan_test.go": "ea96bf0047a43e8224f02e0b8761978ce48636a83a63b6296c9bd3336f51250c",
6161
"boatstack/plan_validation.go": "412f06750832fe46f01190ea5e475fc6f6ea59c8ba78131f94ec031053a405d2",
6262
"boatstack/plan_validation_test.go": "6cbde4ac719baef6b73aa569515d6a9daadcbf14b33f76fa78159826954e20fa",
63-
"boatstack/planning.go": "4b86ae9dc16393f099ca26812bf3e62909fee42a541b33c33275cc16a80262aa",
64-
"boatstack/planning_test.go": "6b156a64182ed76d4c3d392b4c5a26abe5d8b81cea27ee12ac7c4627c827e186",
63+
"boatstack/planning.go": "ef4507a9fecc900f0691372c50883f328c9232c3dfd6986fbde26fb7ef436ae3",
64+
"boatstack/planning_test.go": "c105a9c78c342be06614bf54d0bc1b661b0f7af64d63b79e43bd1fcc2769edd5",
6565
"boatstack/pr.go": "173392fd40ff1c111ec89b1f3dabaf666347be299ac7653bfe5ea2de407fc26f",
6666
"boatstack/pr_test.go": "838e6c244aed84317d00e6f49de6b65bb08f6fe1e1a11fb37aad8428ae2f6ea1",
6767
"boatstack/recovery.go": "dd816b18b54a0085b8d8276a93ee98d2b1e90099059a0d85cf6e24edf6f37d5b",
6868
"boatstack/recovery_test.go": "29490e7477ba602491330036a491289dd9117b99ff862f66dae421ba17e04c9f",
69-
"boatstack/references/artifacts.md": "20bc466f7eac1c834a5d4d0b4cd102e6898e1af908e1905ff9ebf9b1c347baf6",
69+
"boatstack/references/artifacts.md": "d49b3c207546ba788a833078c422c3d04390a4997a3322451dcb8fddd4ccff08",
7070
"boatstack/references/config-schema.md": "c07c2d532ef95ea6ae538a1fffefb92ded1f8dc6a06eb3b8d463e371d1ed8416",
7171
"boatstack/references/failure-moves.md": "3c3f654fd3a2319ca21218e921d37b31b4d926c2df5febd9c92402bffae40cd4",
72-
"boatstack/references/host-hook-contracts.md": "8e97bc3591367afd82c6822c8e45283b97fdd84faaa9cc8a21862df8f61e403b",
72+
"boatstack/references/host-hook-contracts.md": "36b125ac121b9ace5de30f0783e2068a47e8cb6d20a75852e5aff52f25334622",
7373
"boatstack/references/irreversible-operation-boundary.md": "631743991ace65977586e4537f8dd50f8ae88f8e16f27cf7baad93b2791a73df",
7474
"boatstack/references/portability.md": "fb683095991bb0cb06ec56fb8884c49038b283172a7d2f8b203483b7cacb4bae",
75-
"boatstack/references/workflow.md": "5a6d3ae0c7f267b4a9a773f0cd8a2d4f6bcf58cfc1c7e48f8a47ca432aeffebc",
75+
"boatstack/references/workflow.md": "a9e5a6330e1ce850b8a2a3e5af3ed9d9ea4c62d56a16638a7c9cd8ef015a5fbd",
7676
"boatstack/release.go": "fa2ac926df89c90c5844e938a2e02d4b8dbbaefbf85bb7a1a89fc51690bea520",
7777
"boatstack/release_test.go": "5cf2d76fe9b836a91ca68eba53d5585e2c4be5b9421aaf939ea0723063a24690",
7878
"boatstack/run.go": "fbdbf583c862c41f23d1a200f53d042842db72f19c29fe94e4288a69b0ac4a6b",
7979
"boatstack/run_test.go": "34484285fd2457b84faf6d5353117b74af73d4601cd60a96e270b7fd0a7a6a8e",
8080
"boatstack/runtime.go": "687b3543c22acbbed91c94e798c2a813bd828e087ac180ab29a21e3a429f9971",
8181
"boatstack/runtime_cache.go": "60c4eb0c7dde91d40d6ef3f05adc1a1282d17ff1ca12470d0a008454f7ca7489",
8282
"boatstack/runtime_cache_test.go": "b981467ddc9f0f562da6bff5de7a80a9fe5a433a0317541d1e48df268546ac85",
83-
"boatstack/safety.go": "546a2c9c6d164185990ce7f515f95bb962f8b2e7d82947895fb651400b20e11b",
84-
"boatstack/safety_test.go": "efe5990631134cf469d09e8ff1138007132006b50b8e757ff55749f0d968dec7",
83+
"boatstack/safety.go": "6e213386fcaa6471f178cceb4154baca2d07254a2eb0274b40b6bfebe4f3b8c0",
84+
"boatstack/safety_test.go": "c889117eee9d288da67781747886ddde01c4552abd6a6c389a9361ee4fa2c177",
8585
"boatstack/skill_frontmatter.go": "73364df463ce828c2d005aab55f72bb92f7a34d99cf3f53d4e0cd5a4da9dbd0e",
8686
"boatstack/skill_frontmatter_test.go": "a3ec52e7df357a72265c95dd66db15d9c0effc7e5f90f14ce69c27792ce394eb",
8787
"boatstack/testdata/reviewer-pr-body.md": "4c64e3788e5d61a377aeb0f797f7fc8d2316ab6e49572d15636eea7ba9e34ac4",
@@ -97,14 +97,14 @@
9797
"docs/benchmark-corpus-audit.md": "f2d206fe8579a514f9da82b2c96c19b343ac004be67617e1bd34f0f8e0e5e6c6",
9898
"docs/benchmark-submission-audit.md": "9518abdd17690729c6423f87cab20418ed47b0915b5faa44b9ef975e9e9c3b79",
9999
"docs/configuration.md": "f530c5dcbacf32dcb6fdab590901d8f658a4f29bd93f6264cec5d4f449c2cbd1",
100-
"docs/evidence-engineered-coding.md": "315080bb71a2fccb673db2bcbd2792ce7662bfbcd3172bb32aa802a6912072c0",
100+
"docs/evidence-engineered-coding.md": "9dcbd6ba9ba02aa263de2cb15fa8ed7722e07358e04913fd4b63aa9aeb00295e",
101101
"docs/generated-files.md": "bb8cd6e4b7d0042c899685a916ea0170ece363388328786cb0ba8fad6df3b780",
102102
"docs/getting-started.md": "eacc814fdffdfa3c7d8052b7cd99a79c04da5c75d88d8b44f3fb68d9afec0316",
103-
"docs/public-claims.json": "e639e90ecd2905089e54864c77da36ede26768120524ded054eb5e3fb2673ab3",
103+
"docs/public-claims.json": "e00c0b7cf4a5bc4d3cc672ccf7162c650aa315a5e0ed8a6bd3bf8ce8e6ad0f98",
104104
"docs/public-surface.md": "713f7a050b5f339cf948299103ef3800417dccfecf2cc1a4166397ea6f978907",
105105
"docs/research-and-design.md": "d65c66e323037bda5d45aacef5d48afa6bf93da55901378891d235aca3a5684f",
106106
"docs/safety.md": "7b9b5c515d36e683767ec8d3d9d6d119ac93650b2f629d351deadd4c600ed6a6",
107-
"docs/troubleshooting.md": "648a189f260834a1923ef1f27b4b2cc6f7314dd6153b8bf5699369fc2f29945b",
107+
"docs/troubleshooting.md": "b975f818360440d992d19f601040c7248c9fc23edc0c4f902e09daf056df926d",
108108
"docs/validation-and-evidence.md": "e7d91ad49c6adb44784ebe7d94feceb6abd445857f9a0716f0758bf6b55296c5",
109109
"docs/why-these-steps.md": "80957af13979070e8b2f2a8db78ce06d20d152bbc8ec41c3a8003f28393f6369",
110110
"install.ps1": "960b2b20b406bb2878a560e9ace53fe7226bc510be6ee8466ce4e608beb5625a",
@@ -114,7 +114,7 @@
114114
"labs/diagram-json/compiled/evidence.md": "1ba1c989ade070a8ef9a508fbd788d100d7292f2dbacbb2bce895468019f619d",
115115
"labs/diagram-json/compiled/tasks.json": "88f60851abf79d851e9fccc754ff3040034ae595306bc87d64784c19eb403e71",
116116
"labs/diagram-json/compiled/test-matrix.json": "424657ff505768e50fa113801fd8363364a18269d5297480907a993d44063a39",
117-
"labs/diagram-json/plan.lock.json": "4810b9344d3944a692b0f68408ac583fb1d70fd39986bebf53cb953d817cab32",
117+
"labs/diagram-json/plan.lock.json": "e112e544a997e89821b3a49ada2d789cd47c2bbcd974f6cf5a08b1b2ed687218",
118118
"labs/diagram-json/plan.md": "3cc4f533b8d69386deff16b3a594a3ba09d4c0c3db636cccd8c4380084ce6a51",
119119
"labs/diagram-json/questions.md": "74733b015002c8a6777c558e7e997fa48c94850b9bd39054fe9366c97ecf728d",
120120
"labs/diagram-json/request.md": "0808fc41c36779c404f4a3a121167da6e76cac56df526e70f9ed6d3e0d4c02ed",
@@ -167,14 +167,15 @@
167167
"release-notes/2026-07-22-boundary-oracle-loop.md": "698c2ed7dd0a000e6e210f521989992b8fa476376987819ba92c12feb3528f7c",
168168
"release-notes/2026-07-22-enforce-public-configuration-controls.md": "3c0904e206c483fa1c148c20125dd0f63e4fdac165775fbde984f168e62f4a96",
169169
"release-notes/2026-07-22-pr-visual-evidence.md": "097e66a778a1d3197796c44c374b346a0cf29f24baa895080863372816696921",
170+
"release-notes/2026-07-22-pre-activation-mutation-interlock.md": "bebc6104159acc7c91e45c3d80d6e714b79486ab204c619fc715971303adedd1",
170171
"release-notes/2026-07-22-product-configuration-guide.md": "45e96862336bd53a2628ce3fe718c829ea20315555f53187eb7f04ba749f3a97",
171172
"release-notes/2026-07-22-projection-layout-validation.md": "fd0d2935f3f0c4caa41bda678e3bd9a9b496eb2652ab38d80c1c1434cbba3159",
172173
"release-notes/2026-07-22-value-translation-boundary.md": "9cf168ff7caaf3906b78533935bdfb2c86e753984ed1e5ec8204cb373d083390"
173174
},
174175
"generator": "operatorstack/intelligence-flow:boatstack-distribution",
175176
"schema_version": 1,
176177
"source": {
177-
"commit": "c457045039b798a9db660b0f102753fc6bb0a975",
178+
"commit": "a063adb7e10c577e95906f6cc1bb2dd7d3b99ed9",
178179
"path": "labs/12-product-engineering-loop",
179180
"repository": "operatorstack/intelligence-flow"
180181
}

boatstack/assets/templates/approval.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ This receipt may be created only after the named human explicitly approves the e
55
<!-- boatstack-approval:v1 -->
66
```json
77
{
8-
"schema_version": 1,
8+
"schema_version": 2,
99
"status": "APPROVED",
1010
"approved_by": "<human identity>",
1111
"approved_at": "<ISO-8601 timestamp>",
12-
"approval_fingerprint": "<PLAN_FINGERPRINT>"
12+
"approval_fingerprint": "<PLAN_FINGERPRINT>",
13+
"baseline_diff_sha256": "<empty only when the product baseline is clean>",
14+
"baseline_changed_paths": []
1315
}
1416
```
1517
<!-- /boatstack-approval -->

boatstack/assets/templates/plan-lock.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
"plan_sha256": "<sha256>",
1515
"task_graph_path": "compiled/tasks.json",
1616
"task_graph_sha256": "<sha256>",
17+
"baseline_diff_sha256": "<empty only when the product baseline was clean>",
18+
"baseline_changed_paths": [],
1719
"invalidated_at": null,
1820
"invalidation_reason": null
1921
}

boatstack/cmd/boatstack-helper/main.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,12 @@ func checkPlanCommand(arguments []string) int {
197197
if err != nil {
198198
return fail(fmt.Errorf("invalid Markdown plan: %w", err))
199199
}
200-
fmt.Printf("PASS: Markdown plan is structurally valid\nPLAN_FINGERPRINT=%s\nSOURCE_PLAN=%s\nSPEC=%s\n", check.Fingerprint, check.SourcePlanPath, check.SpecPath)
200+
baseline, err := boatstack.PlanningBaselineForPlan(*plan)
201+
if err != nil {
202+
return fail(fmt.Errorf("cannot fingerprint the pre-activation product baseline: %w", err))
203+
}
204+
paths, _ := json.Marshal(baseline.ChangedPaths)
205+
fmt.Printf("PASS: Markdown plan is structurally valid\nPLAN_FINGERPRINT=%s\nSOURCE_PLAN=%s\nSPEC=%s\nBASELINE_DIFF_SHA256=%s\nBASELINE_CHANGED_PATHS=%s\n", check.Fingerprint, check.SourcePlanPath, check.SpecPath, baseline.DiffSHA256, paths)
201206
return 0
202207
}
203208

@@ -269,6 +274,7 @@ func recordApprovalCommand(arguments []string) int {
269274
approvedBy := flags.String("approved-by", "", "named human approver")
270275
approvedAt := flags.String("approved-at", "", "RFC3339 approval timestamp")
271276
fingerprint := flags.String("fingerprint", "", "exact fingerprint displayed before approval")
277+
baselineDiffSHA256 := flags.String("baseline-diff-sha256", "", "exact product baseline fingerprint displayed before approval; omit only when clean")
272278
if err := flags.Parse(arguments); err != nil {
273279
return 2
274280
}
@@ -277,7 +283,7 @@ func recordApprovalCommand(arguments []string) int {
277283
}
278284
if err := boatstack.RecordApproval(boatstack.ApprovalRecordOptions{
279285
PlanPath: *plan, OutputPath: *output, ApprovedBy: *approvedBy,
280-
ApprovedAt: *approvedAt, Fingerprint: *fingerprint,
286+
ApprovedAt: *approvedAt, Fingerprint: *fingerprint, BaselineDiffSHA256: *baselineDiffSHA256,
281287
}); err != nil {
282288
return fail(err)
283289
}

0 commit comments

Comments
 (0)