Skip to content

Commit 73e33fe

Browse files
Sync Boatstack from Intelligence Flow Labs @ e3430a3bb67d (#51)
Co-authored-by: operator-stack-publisher[bot] <operator-stack-publisher[bot]@users.noreply.github.com>
1 parent 07b14b0 commit 73e33fe

14 files changed

Lines changed: 1099 additions & 48 deletions

File tree

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/7faf0ffbc012b9830eb7c23c8b845ebba4be6da1/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/e3430a3bb67d28b0f3bd540d90787f88dc018056/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: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"canonical_context": {
3-
"characters": 44732,
4-
"estimated_tokens": 11183,
3+
"characters": 47557,
4+
"estimated_tokens": 11890,
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": "daad309d104bf02268f3cf89fe0820309ad5f00b470c3c74bf54d199ba72de1e",
15+
"CONTRIBUTING.md": "196fa0c593ee9f0c2148af1f40651a74a61aefcc8c453c411190ecaf5c2d64a2",
1616
"README.md": "590821a4cf3c4b196d3cfb39c972ccbebef7d4d558df817c1f1e88b4fd7ceb07",
1717
"assets/boatstack-journey.svg": "9f016fbfd2881675551a44dafa282cbc7510a7091131005be490c2dbe5e4e051",
1818
"assets/boatstack-mark.svg": "ec96165583b15cfd446c27049d49217973f3e9b1defa5771cc08eec0c9542ce4",
@@ -34,21 +34,21 @@
3434
"boatstack/atomic_windows.go": "cefd775cbe7e7c3bd8a3f5673b11cdd784c6d3ebd6de7dcb8f39406b0bee511f",
3535
"boatstack/changelog.go": "c5e1f31440b44d61e6037ad27af0333540af3545d655e35819a0241cbbebd8ec",
3636
"boatstack/changelog_test.go": "ce792f23a7fe1e09fb3096cd1314130a6ab69321d4877b12a8e994027541baf7",
37-
"boatstack/cmd/boatstack-helper/main.go": "c74b18681d3e7804de6888e35f63ad45baddf62e19d4a5b5188e421e55fb7d9d",
37+
"boatstack/cmd/boatstack-helper/main.go": "0b682aa4fc528c6c4e736ae6afa2a8c7c33aab65dca49ce1f5340521357225be",
3838
"boatstack/cmd/boatstack-helper/main_test.go": "ff73003b6a5157202fa09ddf1129fb13c3d79702b2e05a8721ce5a11bf5ab779",
3939
"boatstack/delivery.go": "565bc8465252a798124a29874e1aeffff16e9027d1a86715e11b3e4bc0743bd2",
4040
"boatstack/delivery_test.go": "2545c26389d330a92c11e7b09fb2342101db5d09a825a2a9e81b4ea9eea9407b",
41-
"boatstack/export.go": "44498da493987a6a5bc3a7055d06afe04e72bc99dfc70a7b32dfec6d1e5bd4fc",
41+
"boatstack/export.go": "16bce2e599baa62b1fb46806c5f126215e32a196e1909f57cbdf1852e81ba82b",
4242
"boatstack/export_test.go": "b38875e004c1a0003f8e377b25ac14e9f4898cf949e91f3d9bfd9531a2867d76",
4343
"boatstack/go.mod": "6086ef1b2a83f5696190dca692c653925f27b61f652f659fd3fca43ed54a1641",
4444
"boatstack/go.sum": "26c315c867b11b886f3c9402fce7f341f6a9115a5d61f54afbb5e1b1fb5f6017",
4545
"boatstack/hooks.go": "2b7d899f92efef8a68a160c423a46bcd6fd37daa0eba2ac8ad44ffa3dc5f88c9",
4646
"boatstack/hooks_test.go": "d71271c0b9ea59b907cc0407a7173d3542281fb2984e6e3c3062ac39b131ec59",
47-
"boatstack/init.go": "b0619af89a108442decb8848b670bb648e2a81726faa8e8aa22510a522248de5",
47+
"boatstack/init.go": "c29904ff437aa063eb1ecb1870aa2e6b019afb09210c227dce85e34ef00c7ea8",
4848
"boatstack/init_test.go": "fa48be69d07691fa7842224ec831e5f290504d8b6565263c9735d2dabd9b43b8",
4949
"boatstack/init_transaction.go": "112456c4e1c4db54c4137bcf4f7a9a9e63399a6f5971e9b3dc952d0c4b2aa4b6",
5050
"boatstack/integrations.go": "75b39ce2e662fccd66bf4b9bff0e097a4db558f23b3aa1d9bc83a5fc6373444c",
51-
"boatstack/next.go": "80ac943af42127177549c33bb87a1a226f6b2e6e4bad64c0bcf15046120dcbe1",
51+
"boatstack/next.go": "df4164280ecd77a417a02fe4bc3b1f16d7012ea22b6fc8988faf8c71f41bc8e6",
5252
"boatstack/next_test.go": "57828f76257ad7344c383084a97399f6523cbbced28ac2bbe4c14b9da84ccf32",
5353
"boatstack/plan.go": "2497e1d32d88a8e433bc5996b57d175bda4e6ba334cf2510efb7c84fd88a98f3",
5454
"boatstack/plan_test.go": "006cdc6681f77e579c5a0f709e30ede759c337132d4f2f5193b7b79b29bd7149",
@@ -61,12 +61,12 @@
6161
"boatstack/references/host-hook-contracts.md": "1382213ad004389de6da5a03af43ec28ace6329c9e7a3f07148566cf2ea12727",
6262
"boatstack/references/irreversible-operation-boundary.md": "631743991ace65977586e4537f8dd50f8ae88f8e16f27cf7baad93b2791a73df",
6363
"boatstack/references/portability.md": "fb683095991bb0cb06ec56fb8884c49038b283172a7d2f8b203483b7cacb4bae",
64-
"boatstack/references/workflow.md": "e449ebea6b3ff42a9e2a82d8974f3b2056c95b8db8e8069091e39405f11acbf8",
64+
"boatstack/references/workflow.md": "664a827a64393c335d3deab15cf1fa2e47e1e27ab507f11b1815c90d93791c1f",
6565
"boatstack/release.go": "fa2ac926df89c90c5844e938a2e02d4b8dbbaefbf85bb7a1a89fc51690bea520",
6666
"boatstack/release_test.go": "5cf2d76fe9b836a91ca68eba53d5585e2c4be5b9421aaf939ea0723063a24690",
6767
"boatstack/run.go": "a9afb239c5e2cb80f96dab594f0dc94852f2f16625b1de05c5110ee85f61cfaa",
6868
"boatstack/run_test.go": "fdc416f15e787b5c8401fc0f0e3aeb58b4891c828a8a869c8dce4e8f1541d809",
69-
"boatstack/runtime.go": "504b7b68e550ed178c2c12bb815aa21e67300cad65cf2311bb5e8b2860747f81",
69+
"boatstack/runtime.go": "60fa6e78d1a7d99a591a9dea3537f3d3a0192ab7b85a798573d5afdc0922f7b4",
7070
"boatstack/runtime_cache.go": "60c4eb0c7dde91d40d6ef3f05adc1a1282d17ff1ca12470d0a008454f7ca7489",
7171
"boatstack/runtime_cache_test.go": "b981467ddc9f0f562da6bff5de7a80a9fe5a433a0317541d1e48df268546ac85",
7272
"boatstack/safety.go": "7574820a1b3802b59153defb9bf11e2a0ecd3b1f86af13fe4630a99adb740e19",
@@ -78,13 +78,15 @@
7878
"boatstack/testdata/safety/unsafe_apply.py.txt": "42db1751865cc15c4dd69a03146b5deca8f21f916d258e433b27bbef5f884ab1",
7979
"boatstack/update.go": "d538c3f44aa869a2c7c20b9552f51fadbe4ec82ebf40f7130bc90ed3b04690f3",
8080
"boatstack/update_test.go": "aa0c2ca97038aad661c46321600034e206e88639f89e0216b3c4cf597312cbae",
81+
"boatstack/workspace.go": "91b343400b3506a6f516c28fabc3f1575f22024a5b19f934a020be660a20482e",
82+
"boatstack/workspace_test.go": "d99ee417954f529a333b8330c32104d96b0368c1b07223a42cbf304d5363ad0d",
8183
"docs/account-recovery-walkthrough.md": "676034974594a7d1a559b24dbed31d7ccc429eb81404b203ca07bbdaa19ec3d3",
8284
"docs/benchmark-corpus-audit.md": "f2d206fe8579a514f9da82b2c96c19b343ac004be67617e1bd34f0f8e0e5e6c6",
8385
"docs/benchmark-submission-audit.md": "9518abdd17690729c6423f87cab20418ed47b0915b5faa44b9ef975e9e9c3b79",
84-
"docs/evidence-engineered-coding.md": "91c25a6ee6d0553bb2420f2d4c79223e84f3e40b6923378fe227437d4d1e7345",
86+
"docs/evidence-engineered-coding.md": "2b9d1824f5a5a88ca0c521e0f89dd320d863a75a8a0f3ebe08860adf6b10cac6",
8587
"docs/generated-files.md": "136422baf0c7fc2bd5100cfe0ebdb3d9d0705dfd7e7d54bf745dd1037e63492c",
8688
"docs/getting-started.md": "eacc814fdffdfa3c7d8052b7cd99a79c04da5c75d88d8b44f3fb68d9afec0316",
87-
"docs/public-claims.json": "c79f56cdf2ecf18e5d38e2492b5846fa169ce768842689a870f5252042ebc0f1",
89+
"docs/public-claims.json": "696c580ce9147afe25b07392b550858e335719baa0cae1cce717907947f5dfdd",
8890
"docs/public-surface.md": "713f7a050b5f339cf948299103ef3800417dccfecf2cc1a4166397ea6f978907",
8991
"docs/research-and-design.md": "d65c66e323037bda5d45aacef5d48afa6bf93da55901378891d235aca3a5684f",
9092
"docs/safety.md": "7b9b5c515d36e683767ec8d3d9d6d119ac93650b2f629d351deadd4c600ed6a6",
@@ -98,7 +100,7 @@
98100
"labs/diagram-json/compiled/evidence.md": "1ba1c989ade070a8ef9a508fbd788d100d7292f2dbacbb2bce895468019f619d",
99101
"labs/diagram-json/compiled/tasks.json": "88f60851abf79d851e9fccc754ff3040034ae595306bc87d64784c19eb403e71",
100102
"labs/diagram-json/compiled/test-matrix.json": "424657ff505768e50fa113801fd8363364a18269d5297480907a993d44063a39",
101-
"labs/diagram-json/plan.lock.json": "55f1f675530f83307fab542423fc021248abae1601bb1da88aa9814696a0a63c",
103+
"labs/diagram-json/plan.lock.json": "35268055d4a6b4fe357a462ded9a87e0a6a9b85a276aa9878c3e887ec41a2092",
102104
"labs/diagram-json/plan.md": "3cc4f533b8d69386deff16b3a594a3ba09d4c0c3db636cccd8c4380084ce6a51",
103105
"labs/diagram-json/questions.md": "74733b015002c8a6777c558e7e997fa48c94850b9bd39054fe9366c97ecf728d",
104106
"labs/diagram-json/request.md": "0808fc41c36779c404f4a3a121167da6e76cac56df526e70f9ed6d3e0d4c02ed",
@@ -131,13 +133,14 @@
131133
"release-notes/2026-07-19-optional-repository-changelog.md": "7ae6bed436c269335ac5055e04438489451bef00836fecb3e5fcb06a18501853",
132134
"release-notes/2026-07-19-valid-skill-frontmatter.md": "a0a002f7891474d7d1eea49e3234cae5ddbd941158726b83555dc48474181a92",
133135
"release-notes/2026-07-20-gemini-cli-integration.md": "d829b4fafb3a02dd766e018558b20bf1bc948dd5e337911d6a7c8b54c83c9942",
136+
"release-notes/2026-07-20-managed-workspace-lifecycle.md": "e84e9c5a393ca88f9fc14d1f2a99ee9a2a1c525a16d141e9f9981bc9354d8f73",
134137
"release-notes/2026-07-20-portability-diagram-dark-theme.md": "b06bebec1361b21ef6deb8c8f43168d189803a32588aeb803ea4b441525a77e2",
135138
"release-notes/2026-07-20-speak-software-standards.md": "a8890ed7eb38868bdf3035572d71785ca89abd3ffc3a314a5dc5315150afe397"
136139
},
137140
"generator": "operatorstack/intelligence-flow:boatstack-distribution",
138141
"schema_version": 1,
139142
"source": {
140-
"commit": "7faf0ffbc012b9830eb7c23c8b845ebba4be6da1",
143+
"commit": "e3430a3bb67d28b0f3bd540d90787f88dc018056",
141144
"path": "labs/12-product-engineering-loop",
142145
"repository": "operatorstack/intelligence-flow"
143146
}

boatstack/cmd/boatstack-helper/main.go

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,9 +597,75 @@ func publishPRCommand(arguments []string) int {
597597
return 0
598598
}
599599

600+
func workspaceCutCommand(arguments []string) int {
601+
flags := flag.NewFlagSet("workspace-cut", flag.ContinueOnError)
602+
repo := flags.String("repo", ".", "repository to cut the feature workspace in")
603+
feature := flags.String("feature", "", "feature slug used to derive the branch name")
604+
branch := flags.String("branch", "", "explicit branch name; overrides --feature derivation")
605+
if err := flags.Parse(arguments); err != nil {
606+
return 2
607+
}
608+
result, err := boatstack.CutFeatureWorkspace(boatstack.WorkspaceCutOptions{Repo: *repo, Feature: *feature, Branch: *branch})
609+
if err != nil {
610+
return fail(err)
611+
}
612+
value, err := boatstack.MarshalJSON(result)
613+
if err != nil {
614+
return fail(err)
615+
}
616+
fmt.Print(string(value))
617+
if result.VerificationStatus != "VERIFIED" {
618+
return 1
619+
}
620+
return 0
621+
}
622+
623+
func workspaceCleanupCommand(arguments []string) int {
624+
flags := flag.NewFlagSet("workspace-cleanup", flag.ContinueOnError)
625+
repo := flags.String("repo", ".", "repository whose finished workspace should be removed")
626+
branch := flags.String("branch", "", "branch whose workspace should be cleaned up")
627+
confirm := flags.Bool("confirm", false, "human confirmation to remove the workspace")
628+
force := flags.Bool("force", false, "override the merge gate and discard uncommitted or unmerged work")
629+
if err := flags.Parse(arguments); err != nil {
630+
return 2
631+
}
632+
result, err := boatstack.CleanupFeatureWorkspace(boatstack.WorkspaceCleanupOptions{Repo: *repo, Branch: *branch, Confirm: *confirm, Force: *force})
633+
if err != nil {
634+
return fail(err)
635+
}
636+
value, err := boatstack.MarshalJSON(result)
637+
if err != nil {
638+
return fail(err)
639+
}
640+
fmt.Print(string(value))
641+
if result.VerificationStatus == "BLOCKED" {
642+
return 1
643+
}
644+
return 0
645+
}
646+
647+
func workspaceStatusCommand(arguments []string) int {
648+
flags := flag.NewFlagSet("workspace-status", flag.ContinueOnError)
649+
repo := flags.String("repo", ".", "repository to inspect")
650+
branch := flags.String("branch", "", "branch whose workspace should be reported")
651+
if err := flags.Parse(arguments); err != nil {
652+
return 2
653+
}
654+
result, err := boatstack.FeatureWorkspaceStatus(*repo, *branch)
655+
if err != nil {
656+
return fail(err)
657+
}
658+
value, err := boatstack.MarshalJSON(result)
659+
if err != nil {
660+
return fail(err)
661+
}
662+
fmt.Print(string(value))
663+
return 0
664+
}
665+
600666
func run() int {
601667
if len(os.Args) < 2 {
602-
fmt.Fprintln(os.Stderr, "usage: boatstack-helper <init|update|check-update|release-classify|next-patch|export|check-source-plan|planning-write|check-plan|record-approval|activate-plan|delivery-status|next-status|run-preflight|record-change|record-delivery-gate|check-safety|safety-hook|diagnose-hook|pr-context|check-pr|publish-pr|doctor|version>")
668+
fmt.Fprintln(os.Stderr, "usage: boatstack-helper <init|update|check-update|release-classify|next-patch|export|check-source-plan|planning-write|check-plan|record-approval|activate-plan|delivery-status|next-status|run-preflight|record-change|record-delivery-gate|check-safety|safety-hook|diagnose-hook|pr-context|check-pr|publish-pr|workspace-cut|workspace-cleanup|workspace-status|doctor|version>")
603669
return 2
604670
}
605671
switch os.Args[1] {
@@ -651,6 +717,12 @@ func run() int {
651717
return bootstrapSafetyHookCommand(os.Args[2:])
652718
case "check-safety":
653719
return checkSafetyCommand(os.Args[2:])
720+
case "workspace-cut":
721+
return workspaceCutCommand(os.Args[2:])
722+
case "workspace-cleanup":
723+
return workspaceCleanupCommand(os.Args[2:])
724+
case "workspace-status":
725+
return workspaceStatusCommand(os.Args[2:])
654726
case "version":
655727
fmt.Printf("Boatstack %s (%s)\n", boatstack.Version, boatstack.SourceCommit)
656728
return 0

0 commit comments

Comments
 (0)