Skip to content

Commit bc8a8f2

Browse files
Sync Boatstack from Intelligence Flow Labs @ 9a20177c48c2
1 parent 4b4e7b2 commit bc8a8f2

8 files changed

Lines changed: 160 additions & 55 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/17376b5e74eb69d341c6df1b69251f2e07d47c4f/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/9a20177c48c292c1c6e1b967e0fd710f2e410a7c/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: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
},
1313
"files": {
1414
".gitignore": "a7079e923a776f14f1bb3a6aa0a11a133a8e1dfb35af020f327623357b7e3957",
15-
"CONTRIBUTING.md": "f679c93d361def0a2c8903c1b5714d4bf707add3eeeeec88370b8ceef936a8e0",
15+
"CONTRIBUTING.md": "486ff0833aa62521ba078542bc648f4cb868550bc5bd7372393e3befccbde35d",
1616
"README.md": "a840004db57a129ecd361bb0421adfe02065d86751736dd91953c8a8b178e5ef",
1717
"assets/boatstack-journey.svg": "c1f7fe2741f5e9ca66bb3fe9b103e6364ba5acbca8b7a8054768ffd85cf325ea",
1818
"assets/boatstack-mark.svg": "ec96165583b15cfd446c27049d49217973f3e9b1defa5771cc08eec0c9542ce4",
@@ -47,8 +47,8 @@
4747
"boatstack/init_test.go": "fa48be69d07691fa7842224ec831e5f290504d8b6565263c9735d2dabd9b43b8",
4848
"boatstack/init_transaction.go": "112456c4e1c4db54c4137bcf4f7a9a9e63399a6f5971e9b3dc952d0c4b2aa4b6",
4949
"boatstack/integrations.go": "75b39ce2e662fccd66bf4b9bff0e097a4db558f23b3aa1d9bc83a5fc6373444c",
50-
"boatstack/next.go": "9a9b3b9dde0a528991d2b6ac358638b249a791a4eb3e7a2656bd43b652a2c628",
51-
"boatstack/next_test.go": "1244fdf5e447646793ffdab81b8ff9403b849e9fa050a41bc9e7145bca08a0d2",
50+
"boatstack/next.go": "80ac943af42127177549c33bb87a1a226f6b2e6e4bad64c0bcf15046120dcbe1",
51+
"boatstack/next_test.go": "57828f76257ad7344c383084a97399f6523cbbced28ac2bbe4c14b9da84ccf32",
5252
"boatstack/plan.go": "2497e1d32d88a8e433bc5996b57d175bda4e6ba334cf2510efb7c84fd88a98f3",
5353
"boatstack/plan_test.go": "006cdc6681f77e579c5a0f709e30ede759c337132d4f2f5193b7b79b29bd7149",
5454
"boatstack/planning.go": "1237ae552a72d5312c1ef61e30f430976f526d5473d91c7fbfcb9148eb7079b9",
@@ -80,10 +80,10 @@
8080
"docs/account-recovery-walkthrough.md": "676034974594a7d1a559b24dbed31d7ccc429eb81404b203ca07bbdaa19ec3d3",
8181
"docs/benchmark-corpus-audit.md": "f2d206fe8579a514f9da82b2c96c19b343ac004be67617e1bd34f0f8e0e5e6c6",
8282
"docs/benchmark-submission-audit.md": "9518abdd17690729c6423f87cab20418ed47b0915b5faa44b9ef975e9e9c3b79",
83-
"docs/evidence-engineered-coding.md": "c418dfc92d3e0a38996162f4b4c120693817c93056be15dfa7828295011457eb",
83+
"docs/evidence-engineered-coding.md": "159f34fbd92328ea7f887db304b4fe2d5cbed178859318e3349b68a940615b5f",
8484
"docs/generated-files.md": "136422baf0c7fc2bd5100cfe0ebdb3d9d0705dfd7e7d54bf745dd1037e63492c",
8585
"docs/getting-started.md": "eacc814fdffdfa3c7d8052b7cd99a79c04da5c75d88d8b44f3fb68d9afec0316",
86-
"docs/public-claims.json": "df3d78d6c2a9b20d3a6c20bbea1c3d5eb5d7fbedfad60e34cbb121498e9a7c84",
86+
"docs/public-claims.json": "8e6ff12e30ae1bc6646814154e91dcd34646f5aad146dbea6f8ca3639dfe8224",
8787
"docs/public-surface.md": "713f7a050b5f339cf948299103ef3800417dccfecf2cc1a4166397ea6f978907",
8888
"docs/research-and-design.md": "d65c66e323037bda5d45aacef5d48afa6bf93da55901378891d235aca3a5684f",
8989
"docs/safety.md": "7b9b5c515d36e683767ec8d3d9d6d119ac93650b2f629d351deadd4c600ed6a6",
@@ -97,7 +97,7 @@
9797
"labs/diagram-json/compiled/evidence.md": "1ba1c989ade070a8ef9a508fbd788d100d7292f2dbacbb2bce895468019f619d",
9898
"labs/diagram-json/compiled/tasks.json": "88f60851abf79d851e9fccc754ff3040034ae595306bc87d64784c19eb403e71",
9999
"labs/diagram-json/compiled/test-matrix.json": "424657ff505768e50fa113801fd8363364a18269d5297480907a993d44063a39",
100-
"labs/diagram-json/plan.lock.json": "f18205ea54ae03756bd5bb7513a48ac494b9ed6e5bce8015bd72fee7d8b46c42",
100+
"labs/diagram-json/plan.lock.json": "18d2b1c3b0045e8d43e28ad130ddafc2f0edefdea8ffcba437b2ecb9e9cc88e6",
101101
"labs/diagram-json/plan.md": "3cc4f533b8d69386deff16b3a594a3ba09d4c0c3db636cccd8c4380084ce6a51",
102102
"labs/diagram-json/questions.md": "74733b015002c8a6777c558e7e997fa48c94850b9bd39054fe9366c97ecf728d",
103103
"labs/diagram-json/request.md": "0808fc41c36779c404f4a3a121167da6e76cac56df526e70f9ed6d3e0d4c02ed",
@@ -123,13 +123,14 @@
123123
"release-notes/2026-07-18-startup-recovery-routing.md": "c305a1c2b8347e1bc6d7fcbd4a8e629438cdeb4bcf6f181a7d6fc154a88f4318",
124124
"release-notes/2026-07-19-cross-harness-hook-conformance.md": "15dc22cc3b534c6d0bd89f34cd69cabf94a3610d445a039ba111fd8bce727e68",
125125
"release-notes/2026-07-19-minimal-dated-changelogs.md": "6f525e5c5cf26cc72969a161bbdaeb4a5c1f14759c5985335e97e3d3f45b1daf",
126+
"release-notes/2026-07-19-new-worktree-intent.md": "969beaf8ef7c0635fb45a816cf762a7f66e5ea20b45847a564ee53153863b120",
126127
"release-notes/2026-07-19-optional-repository-changelog.md": "7ae6bed436c269335ac5055e04438489451bef00836fecb3e5fcb06a18501853",
127128
"release-notes/2026-07-19-valid-skill-frontmatter.md": "a0a002f7891474d7d1eea49e3234cae5ddbd941158726b83555dc48474181a92"
128129
},
129130
"generator": "operatorstack/intelligence-flow:boatstack-distribution",
130131
"schema_version": 1,
131132
"source": {
132-
"commit": "17376b5e74eb69d341c6df1b69251f2e07d47c4f",
133+
"commit": "9a20177c48c292c1c6e1b967e0fd710f2e410a7c",
133134
"path": "labs/12-product-engineering-loop",
134135
"repository": "operatorstack/intelligence-flow"
135136
}

boatstack/next.go

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,34 @@ func ResolveNext(repoPath string) (NextStatus, error) {
224224
return status, nil
225225
}
226226

227+
orphans, err := orphanedFeatureArtifacts(repo)
228+
if err != nil {
229+
return NextStatus{}, err
230+
}
231+
if len(orphans) > 0 {
232+
return blockedNextStatus("INVALID_STATE", "repair-state", "Boatstack found a PR preview without the plan lock required to verify it. Preserve the artifacts and restore the feature evidence before continuing.", orphans...), nil
233+
}
234+
235+
sourcePlans, sourceErr := unclaimedSourcePlanCandidates(repo)
236+
if sourceErr != nil {
237+
return NextStatus{}, sourceErr
238+
}
239+
if len(sourcePlans) == 1 {
240+
base.VerificationStatus = "VERIFIED"
241+
base.ObservedStage = "SOURCE_PLAN_READY"
242+
base.NextOperation = "auto-plan"
243+
base.Reason = fmt.Sprintf("Saved Plan-mode file %q is ready to become a Boatstack feature.", sourcePlans[0])
244+
return base, nil
245+
}
246+
if len(sourcePlans) > 1 {
247+
base.VerificationStatus = "BLOCKED"
248+
base.ObservedStage = "AMBIGUOUS"
249+
base.NextOperation = "resolve-ambiguity"
250+
base.Reason = "Multiple unclaimed Plan-mode files are available; Boatstack will not choose by recency."
251+
base.BlockingAmbiguity = sourcePlans
252+
return base, nil
253+
}
254+
227255
candidates, err := featurePlanCandidates(repo)
228256
if err != nil {
229257
return NextStatus{}, err
@@ -253,34 +281,6 @@ func ResolveNext(repoPath string) (NextStatus, error) {
253281
return base, nil
254282
}
255283

256-
orphans, err := orphanedFeatureArtifacts(repo)
257-
if err != nil {
258-
return NextStatus{}, err
259-
}
260-
if len(orphans) > 0 {
261-
return blockedNextStatus("INVALID_STATE", "repair-state", "Boatstack found a PR preview without the plan lock required to verify it. Preserve the artifacts and restore the feature evidence before continuing.", orphans...), nil
262-
}
263-
264-
sourcePlans, sourceErr := unclaimedSourcePlanCandidates(repo)
265-
if sourceErr != nil {
266-
return NextStatus{}, sourceErr
267-
}
268-
if len(sourcePlans) == 1 {
269-
base.VerificationStatus = "VERIFIED"
270-
base.ObservedStage = "SOURCE_PLAN_READY"
271-
base.NextOperation = "auto-plan"
272-
base.Reason = fmt.Sprintf("Saved Plan-mode file %q is ready to become a Boatstack feature.", sourcePlans[0])
273-
return base, nil
274-
}
275-
if len(sourcePlans) > 1 {
276-
base.VerificationStatus = "BLOCKED"
277-
base.ObservedStage = "AMBIGUOUS"
278-
base.NextOperation = "resolve-ambiguity"
279-
base.Reason = "Multiple unclaimed Plan-mode files are available; Boatstack will not choose by recency."
280-
base.BlockingAmbiguity = sourcePlans
281-
return base, nil
282-
}
283-
284284
completed, err := completedManagedStates(repo)
285285
if err != nil {
286286
return blockedNextStatus("INVALID_STATE", "repair-state", "Boatstack found invalid completed delivery state. Preserve the artifacts and restore its evidence before continuing: "+err.Error()), nil

boatstack/next_test.go

Lines changed: 102 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,28 @@ func writeNextDelivery(t *testing.T, repo, feature, status string, activeIndex i
4545
}
4646
}
4747

48+
func writeSavedFeaturePlan(t *testing.T, repo, feature string) {
49+
t.Helper()
50+
directory := filepath.Join(repo, ".product-loop", "features", feature)
51+
if err := os.MkdirAll(directory, 0o755); err != nil {
52+
t.Fatal(err)
53+
}
54+
if err := os.WriteFile(filepath.Join(directory, "plan.md"), []byte("# Plan\n"), 0o644); err != nil {
55+
t.Fatal(err)
56+
}
57+
}
58+
59+
func writeIntakePlan(t *testing.T, repo, name string) {
60+
t.Helper()
61+
directory := filepath.Join(repo, ".product-loop", "intake")
62+
if err := os.MkdirAll(directory, 0o755); err != nil {
63+
t.Fatal(err)
64+
}
65+
if err := os.WriteFile(filepath.Join(directory, name), []byte("# Source plan\n"), 0o644); err != nil {
66+
t.Fatal(err)
67+
}
68+
}
69+
4870
func TestResolveNextReportsNotStartedWhenNoFeatureExists(t *testing.T) {
4971
repo := nextTestRepo(t)
5072
status, err := ResolveNext(repo)
@@ -58,19 +80,94 @@ func TestResolveNextReportsNotStartedWhenNoFeatureExists(t *testing.T) {
5880

5981
func TestResolveNextReportsSavedSourcePlan(t *testing.T) {
6082
repo := nextTestRepo(t)
61-
intake := filepath.Join(repo, ".product-loop", "intake")
62-
if err := os.MkdirAll(intake, 0o755); err != nil {
83+
writeIntakePlan(t, repo, "feature.md")
84+
status, err := ResolveNext(repo)
85+
if err != nil {
6386
t.Fatal(err)
6487
}
65-
if err := os.WriteFile(filepath.Join(intake, "feature.md"), []byte("# Feature\n"), 0o644); err != nil {
88+
if status.ObservedStage != "SOURCE_PLAN_READY" || status.NextOperation != "auto-plan" {
89+
t.Fatalf("unexpected status: %+v", status)
90+
}
91+
}
92+
93+
func TestResolveNextPrefersUniqueSourcePlanOverHistoricalPlans(t *testing.T) {
94+
repo := nextTestRepo(t)
95+
writeSavedFeaturePlan(t, repo, "historical-one")
96+
writeSavedFeaturePlan(t, repo, "historical-two")
97+
writeIntakePlan(t, repo, "current.md")
98+
99+
status, err := ResolveNext(repo)
100+
if err != nil {
66101
t.Fatal(err)
67102
}
103+
if status.VerificationStatus != "VERIFIED" || status.ObservedStage != "SOURCE_PLAN_READY" || status.NextOperation != "auto-plan" {
104+
t.Fatalf("new source plan did not outrank historical plans: %+v", status)
105+
}
106+
}
107+
108+
func TestResolveNextBlocksMultipleSourcePlansBeforeHistoricalPlans(t *testing.T) {
109+
repo := nextTestRepo(t)
110+
writeSavedFeaturePlan(t, repo, "historical-one")
111+
writeSavedFeaturePlan(t, repo, "historical-two")
112+
writeIntakePlan(t, repo, "first.md")
113+
writeIntakePlan(t, repo, "second.md")
114+
68115
status, err := ResolveNext(repo)
69116
if err != nil {
70117
t.Fatal(err)
71118
}
72-
if status.ObservedStage != "SOURCE_PLAN_READY" || status.NextOperation != "auto-plan" {
73-
t.Fatalf("unexpected status: %+v", status)
119+
want := []string{".product-loop/intake/first.md", ".product-loop/intake/second.md"}
120+
if status.VerificationStatus != "BLOCKED" || status.ObservedStage != "AMBIGUOUS" || !reflect.DeepEqual(status.BlockingAmbiguity, want) {
121+
t.Fatalf("unexpected source-plan ambiguity: %+v", status)
122+
}
123+
}
124+
125+
func TestResolveNextActiveDeliveryOutranksSourcePlan(t *testing.T) {
126+
repo := nextTestRepo(t)
127+
writeNextDelivery(t, repo, "active-feature", "BUILD", 0)
128+
writeIntakePlan(t, repo, "new-feature.md")
129+
130+
status, err := ResolveNext(repo)
131+
if err != nil {
132+
t.Fatal(err)
133+
}
134+
if status.Feature != "active-feature" || status.ObservedStage != "BUILD" || status.NextOperation != "build" {
135+
t.Fatalf("source plan displaced active delivery: %+v", status)
136+
}
137+
}
138+
139+
func TestResolveNextOrphanedEvidenceOutranksSourcePlan(t *testing.T) {
140+
repo := nextTestRepo(t)
141+
directory := filepath.Join(repo, ".product-loop", "features", "orphan")
142+
if err := os.MkdirAll(directory, 0o755); err != nil {
143+
t.Fatal(err)
144+
}
145+
if err := os.WriteFile(filepath.Join(directory, "pr.md"), []byte("# Preview\n"), 0o644); err != nil {
146+
t.Fatal(err)
147+
}
148+
writeIntakePlan(t, repo, "new-feature.md")
149+
150+
status, err := ResolveNext(repo)
151+
if err != nil {
152+
t.Fatal(err)
153+
}
154+
if status.VerificationStatus != "BLOCKED" || status.ObservedStage != "INVALID_STATE" || status.NextOperation != "repair-state" {
155+
t.Fatalf("source plan bypassed orphaned evidence: %+v", status)
156+
}
157+
}
158+
159+
func TestResolveNextBlocksHistoricalPlansWithoutSourceIntent(t *testing.T) {
160+
repo := nextTestRepo(t)
161+
writeSavedFeaturePlan(t, repo, "historical-one")
162+
writeSavedFeaturePlan(t, repo, "historical-two")
163+
164+
status, err := ResolveNext(repo)
165+
if err != nil {
166+
t.Fatal(err)
167+
}
168+
want := []string{"historical-one", "historical-two"}
169+
if status.VerificationStatus != "BLOCKED" || status.ObservedStage != "AMBIGUOUS" || !reflect.DeepEqual(status.BlockingAmbiguity, want) {
170+
t.Fatalf("unexpected historical-plan ambiguity: %+v", status)
74171
}
75172
}
76173

docs/evidence-engineered-coding.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,6 @@ Delivery and system improvement also remain separate. A failed task may suggest
146146

147147
## What is evidence-backed
148148

149-
The current moves were derived from the Intelligence Flow benchmark corpus and product-repository studies. The generated source commit is [`17376b5e74eb69d341c6df1b69251f2e07d47c4f`](https://github.com/operatorstack/intelligence-flow/tree/17376b5e74eb69d341c6df1b69251f2e07d47c4f/labs/12-product-engineering-loop).
149+
The current moves were derived from the Intelligence Flow benchmark corpus and product-repository studies. The generated source commit is [`9a20177c48c292c1c6e1b967e0fd710f2e410a7c`](https://github.com/operatorstack/intelligence-flow/tree/9a20177c48c292c1c6e1b967e0fd710f2e410a7c/labs/12-product-engineering-loop).
150150

151151
The evidence supports specific failure mechanisms and guardrails. It does not establish that Boatstack is optimal, that control-theory notation proves software quality, or that one workflow dominates every team. Those are evaluation questions, so the distribution preserves measurements, provenance, gaps, and negative results.

docs/public-claims.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schema_version": 1,
3-
"source_commit": "17376b5e74eb69d341c6df1b69251f2e07d47c4f",
3+
"source_commit": "9a20177c48c292c1c6e1b967e0fd710f2e410a7c",
44
"statuses": ["verified", "observed", "still_being_evaluated"],
55
"claims": [
66
{
@@ -12,7 +12,7 @@
1212
"readable_evidence": "why-these-steps.md#portable-workflow-and-state",
1313
"implementation": ["../boatstack/export.go", "../boatstack/references/artifacts.md", "../boatstack/references/workflow.md"],
1414
"verification": ["../boatstack/export_test.go"],
15-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
15+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
1616
},
1717
{
1818
"id": "human-decisions",
@@ -23,7 +23,7 @@
2323
"readable_evidence": "why-these-steps.md#human-decisions",
2424
"implementation": ["../boatstack/references/workflow.md", "../boatstack/plan.go"],
2525
"verification": ["../boatstack/plan_test.go", "../boatstack/planning_test.go"],
26-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
26+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
2727
},
2828
{
2929
"id": "validation-provenance",
@@ -34,7 +34,7 @@
3434
"readable_evidence": "why-these-steps.md#validation-provenance",
3535
"implementation": ["validation-and-evidence.md", "../boatstack/plan.go"],
3636
"verification": ["../boatstack/plan_test.go"],
37-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
37+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
3838
},
3939
{
4040
"id": "irreversible-operations",
@@ -46,7 +46,7 @@
4646
"readable_evidence": "why-these-steps.md#irreversible-operations",
4747
"implementation": ["safety.md", "../boatstack/safety.go", "../boatstack/hooks.go"],
4848
"verification": ["../boatstack/safety_test.go", "../boatstack/hooks_test.go"],
49-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
49+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
5050
},
5151
{
5252
"id": "reviewer-ready-pr",
@@ -57,7 +57,7 @@
5757
"readable_evidence": "why-these-steps.md#reviewer-ready-pr",
5858
"implementation": ["../boatstack/pr.go", "getting-started.md"],
5959
"verification": ["../boatstack/pr_test.go"],
60-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
60+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
6161
},
6262
{
6363
"id": "phase-scoped-delivery",
@@ -68,7 +68,7 @@
6868
"readable_evidence": "why-these-steps.md#phase-scoped-delivery",
6969
"implementation": ["../boatstack/delivery.go", "../boatstack/safety.go", "../boatstack/hooks.go", "../boatstack/references/workflow.md"],
7070
"verification": ["../boatstack/delivery_test.go", "../boatstack/pr_test.go"],
71-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
71+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
7272
},
7373
{
7474
"id": "model-neutral-contract",
@@ -79,7 +79,7 @@
7979
"readable_evidence": "why-these-steps.md#model-choice-and-budget",
8080
"implementation": ["research-and-design.md", "../boatstack/references/workflow.md"],
8181
"verification": ["../boatstack/export_test.go", "../boatstack/planning_test.go"],
82-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
82+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
8383
},
8484
{
8585
"id": "cross-model-failures",
@@ -90,7 +90,7 @@
9090
"readable_evidence": "why-these-steps.md#model-choice-and-budget",
9191
"implementation": ["research-and-design.md"],
9292
"verification": ["benchmark-corpus-audit.md", "benchmark-submission-audit.md"],
93-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
93+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
9494
},
9595
{
9696
"id": "lower-cost-outcomes",
@@ -101,7 +101,7 @@
101101
"readable_evidence": "why-these-steps.md#model-choice-and-budget",
102102
"implementation": ["research-and-design.md"],
103103
"verification": ["benchmark-corpus-audit.md", "benchmark-submission-audit.md"],
104-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
104+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
105105
},
106106
{
107107
"id": "git-worktree-activation",
@@ -112,7 +112,7 @@
112112
"readable_evidence": "why-these-steps.md#git-worktree-activation",
113113
"implementation": ["../boatstack/runtime_cache.go", "../boatstack/hooks.go"],
114114
"verification": ["../boatstack/runtime_cache_test.go", "../boatstack/hooks_test.go"],
115-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
115+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
116116
},
117117
{
118118
"id": "visible-updates",
@@ -123,7 +123,7 @@
123123
"readable_evidence": "why-these-steps.md#visible-updates",
124124
"implementation": ["../boatstack/update.go", "../boatstack/init.go"],
125125
"verification": ["../boatstack/update_test.go", "../boatstack/init_test.go", "../boatstack/export_test.go"],
126-
"last_verified_version": "source:17376b5e74eb69d341c6df1b69251f2e07d47c4f"
126+
"last_verified_version": "source:9a20177c48c292c1c6e1b967e0fd710f2e410a7c"
127127
}
128128
]
129129
}

labs/diagram-json/plan.lock.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"plan_path": "labs/diagram-json/plan.md",
77
"plan_sha256": "3cc4f533b8d69386deff16b3a594a3ba09d4c0c3db636cccd8c4380084ce6a51",
88
"schema_version": 1,
9-
"source_commit": "17376b5e74eb69d341c6df1b69251f2e07d47c4f",
9+
"source_commit": "9a20177c48c292c1c6e1b967e0fd710f2e410a7c",
1010
"source_plan_path": "labs/diagram-json/source-plan.md",
1111
"source_plan_sha256": "e10593ddaa7522ab80cc991d0a09399257139799e37f737794cd49d68a39985b",
1212
"spec_path": "labs/diagram-json/spec.md",

0 commit comments

Comments
 (0)