@chllming/wave-orchestration 0.7.2 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.7.3 - 2026-03-23
6
+
7
+ ### Changed
8
+
9
+ - Updated the shipped package metadata, release manifest, README, migration guide, sample-wave docs, and npm publishing runbook to advertise `0.7.3` as the current release surface.
10
+
11
+ ### Fixed And Hardened
12
+
13
+ - Implementation summary parsing now falls back to normal line-by-line structured-marker extraction when a log tail ends inside an unmatched fenced block, so malformed prompt or transcript tails cannot hide later final implementation markers.
14
+ - Proof-centric summary repair now refreshes stale `.summary.json` files when required proof/doc/component fields are missing, even if a prior run already wrote a `structuredSignalDiagnostics` object with incorrect zero-count data.
15
+
16
+ ### Testing And Validation
17
+
18
+ - Added regression coverage for unmatched end-of-tail fenced logs and stale diagnostics-backed implementation summaries.
19
+
5
20
  ## 0.7.2 - 2026-03-23
6
21
 
7
22
  ### Changed
package/README.md CHANGED
@@ -79,18 +79,18 @@ Wave is built to mitigate those failures with canonical shared state, generated
79
79
 
80
80
  Current release:
81
81
 
82
- - `@chllming/wave-orchestration@0.7.2`
83
- - Release tag: [`v0.7.2`](https://github.com/chllming/agent-wave-orchestrator/releases/tag/v0.7.2)
82
+ - `@chllming/wave-orchestration@0.7.3`
83
+ - Release tag: [`v0.7.3`](https://github.com/chllming/agent-wave-orchestrator/releases/tag/v0.7.3)
84
84
  - Public install path: npmjs
85
85
  - Authenticated fallback: GitHub Packages
86
86
 
87
- Highlights in `0.7.2`:
87
+ Highlights in `0.7.3`:
88
88
 
89
- - Final implementation markers now parse correctly when agents emit the structured proof/doc/component block as Markdown list items.
90
- - Runtime validation now distinguishes truly missing markers from malformed marker syntax, so proof-centric failures surface actionable parse errors.
91
- - Legacy proof-centric summaries repair themselves from source logs only when the stored summary is actually missing required closure markers.
89
+ - Malformed end-of-tail fenced blocks no longer hide later final `[wave-proof]`, `[wave-doc-delta]`, and `[wave-component]` markers from the structured-signal collector.
90
+ - Legacy proof-centric summaries now rebuild from source logs when required proof/doc/component fields are missing, even if a stale `structuredSignalDiagnostics` object already exists.
91
+ - Final implementation marker diagnostics still distinguish truly missing markers from malformed marker syntax, so proof-centric failures stay actionable instead of collapsing into generic missing-marker noise.
92
92
  - Implementation prompts now keep incomplete work inside the required final markers with `state=gap` and route unresolved issues through `wave coord post`.
93
- - Upgrade and operator docs now cover the full `0.7.2` package surface end to end.
93
+ - Upgrade and operator docs now cover the full `0.7.3` package surface end to end.
94
94
 
95
95
  Requirements:
96
96
 
@@ -1,6 +1,6 @@
1
1
  # Current State
2
2
 
3
- - The starter workspace in this source repo reflects the `0.7.2` package release surface.
3
+ - The starter workspace in this source repo reflects the `0.7.3` package release surface.
4
4
  - The repository contains the published `@chllming/wave-orchestration` package plus the starter scaffold used by `wave init`.
5
5
  - The runtime is package-first and non-destructive for adopting repos: `wave init --adopt-existing` records existing repo-owned plans, waves, prompts, and config without overwriting them, and `wave upgrade` writes only `.wave/install-state.json` plus `.wave/upgrade-history/`.
6
6
  - Runtime launch entrypoints now perform a best-effort npmjs version check, cache the result under `.wave/package-update-check.json`, and point operators at `pnpm exec wave self-update` when a newer published package exists.
@@ -2,7 +2,7 @@
2
2
 
3
3
  This is a showcase-first sample wave.
4
4
 
5
- Use it as the single reference example for the current `0.7.2` Wave surface.
5
+ Use it as the single reference example for the current `0.7.3` Wave surface.
6
6
 
7
7
  It intentionally combines more sections than a normal production wave so one file can demonstrate:
8
8
 
@@ -22,13 +22,13 @@ GitHub Packages remains available as an authenticated fallback path, and maintai
22
22
  - Fresh `wave init` seeds the starter `skills/` library. `wave init --adopt-existing` records existing repo-owned skill bundles when they are already present, but does not replace or rewrite them.
23
23
  - The current runtime expects the post-roadmap model: typed coordination, compiled inboxes, `A8` integration, staged closure, orchestrator-first clarification, and operational runtime policy.
24
24
 
25
- ## Upgrading From 0.6.x To 0.7.2
25
+ ## Upgrading From 0.6.x To 0.7.3
26
26
 
27
27
  Read `CHANGELOG.md` first, then treat this section as the repo-owned migration checklist for adopted `0.6.x` workspaces.
28
28
 
29
29
  `wave upgrade` updates the installed runtime only. It does not copy planner starter files into a repo that already owns its docs, skills, and Context7 bundles.
30
30
 
31
- `0.7.2` also hardens proof-centric closure handling: final implementation markers now parse when emitted as Markdown list items, malformed marker syntax now surfaces explicit parse errors instead of generic missing-marker failures, and incomplete implementation work should stay inside the required final markers with `state=gap` instead of trailing `[wave-gap]` lines.
31
+ `0.7.3` keeps the proof-centric closure hardening from `0.7.2` and closes the remaining parser hole: malformed unmatched end-of-tail fenced blocks no longer hide later final implementation markers, stale summaries rebuild when required proof/doc/component fields are still missing even if diagnostics already exist, malformed marker syntax still surfaces explicit parse errors, and incomplete implementation work should stay inside the required final markers with `state=gap` instead of trailing `[wave-gap]` lines.
32
32
 
33
33
  ### Required Repo Changes
34
34
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  This repo now includes a dedicated npmjs publish workflow at [publish-npm.yml](../../.github/workflows/publish-npm.yml).
4
4
 
5
- The current `0.7.2` release procedure publishes through a repository Actions secret named `NPM_TOKEN`.
5
+ The current `0.7.3` release procedure publishes through a repository Actions secret named `NPM_TOKEN`.
6
6
 
7
7
  ## What This Repo Already Does
8
8
 
@@ -47,6 +47,6 @@ If this repo later needs private npm dependencies during CI, consider a separate
47
47
  1. Confirm [publish-npm.yml](../../.github/workflows/publish-npm.yml) is on the default branch.
48
48
  2. Confirm `NPM_TOKEN` exists in the GitHub repo secrets.
49
49
  3. Confirm the package version has been bumped and committed.
50
- 4. Push the release commit and release tag, for example `v0.7.2`.
50
+ 4. Push the release commit and release tag, for example `v0.7.3`.
51
51
  5. Verify both `publish-npm.yml` and `publish-package.yml` start from the tag push.
52
52
  6. Verify the npmjs publish completes successfully for the tagged source.
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  title: "Sample Waves"
3
- summary: "Showcase-first sample waves that demonstrate the current 0.7.2 Wave surface."
3
+ summary: "Showcase-first sample waves that demonstrate the current 0.7.3 Wave surface."
4
4
  ---
5
5
 
6
6
  # Sample Waves
7
7
 
8
- This guide points to showcase-first sample waves that demonstrate the current `0.7.2` authored Wave surface.
8
+ This guide points to showcase-first sample waves that demonstrate the current `0.7.3` authored Wave surface.
9
9
 
10
10
  The examples are intentionally denser than typical production waves. Their job is to teach the current authoring and runtime surface quickly, not to be the smallest possible launch-ready files.
11
11
 
@@ -15,7 +15,7 @@ The examples are intentionally denser than typical production waves. Their job i
15
15
  Shows what a good `repo-landed` outcome looks like when one promoted component only closes honestly if desired-state records, reconcile-loop substrate, and cluster-view surfaces land together. It emphasizes maturity discipline, explicit deliverables, and shared-plan closure without drifting into `pilot-live` claims.
16
16
 
17
17
  - [Full modern sample wave](../plans/examples/wave-example-live-proof.md)
18
- Shows the combined `0.7.2` authored surface in one file: closure roles, `E0`, optional security review, delegated and pinned benchmark targets, richer executor config, `### Skills`, `### Capabilities`, `### Deliverables`, `### Exit contract`, `### Proof artifacts`, sticky retry, deploy environments, and proof-first live-wave structure.
18
+ Shows the combined `0.7.3` authored surface in one file: closure roles, `E0`, optional security review, delegated and pinned benchmark targets, richer executor config, `### Skills`, `### Capabilities`, `### Deliverables`, `### Exit contract`, `### Proof artifacts`, sticky retry, deploy environments, and proof-first live-wave structure.
19
19
 
20
20
  ## What These Examples Teach
21
21
 
@@ -38,7 +38,7 @@ The examples are intentionally denser than typical production waves. Their job i
38
38
 
39
39
  ## Feature Coverage Map
40
40
 
41
- Together these samples cover the main surfaces added or hardened for `0.7.2`:
41
+ Together these samples cover the main surfaces added or hardened for `0.7.3`:
42
42
 
43
43
  - repo-landed maturity discipline and anti-overclaim framing
44
44
  - explicit shared-plan closure for future-wave safety
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chllming/wave-orchestration",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "license": "MIT",
5
5
  "description": "Generic wave-based multi-agent orchestration for repository work.",
6
6
  "repository": {
@@ -2,6 +2,23 @@
2
2
  "schemaVersion": 1,
3
3
  "packageName": "@chllming/wave-orchestration",
4
4
  "releases": [
5
+ {
6
+ "version": "0.7.3",
7
+ "date": "2026-03-23",
8
+ "summary": "Unmatched-fence structured-signal recovery, stale-summary rebuild hardening, and 0.7.3 release-surface alignment.",
9
+ "features": [
10
+ "Implementation summaries now recover final `[wave-proof]`, `[wave-doc-delta]`, and `[wave-component]` markers even when the log tail ends inside a malformed unmatched fenced block.",
11
+ "Legacy proof-centric summaries now refresh from source logs when required proof, doc-delta, or owned-component fields are still missing, even if stale `structuredSignalDiagnostics` data already exists.",
12
+ "Regression coverage now exercises unmatched end-of-tail fence handling and stale diagnostics-backed summary refresh directly.",
13
+ "Shipped package metadata, README, migration guidance, sample-wave docs, and npm publishing instructions now point at the `0.7.3` release surface."
14
+ ],
15
+ "manualSteps": [
16
+ "If an older lane still contains proof-centric `.summary.json` files with missing proof/doc/component fields, rerun the relevant launcher or status surface once after upgrading so the summaries can self-refresh from the source logs.",
17
+ "If an adopted `0.6.x` repo fails `wave doctor` after the `0.7.x` upgrade, sync the repo-owned planner starter surface (`docs/agents/wave-planner-role.md`, `skills/role-planner/`, `docs/context7/planner-agent/`, `docs/reference/wave-planning-lessons.md`, and the `planner-agentic` bundle entry) before relying on planner-aware validation.",
18
+ "Run `pnpm exec wave doctor` and `pnpm exec wave launch --lane main --dry-run --no-dashboard` after upgrading once your repo-owned wave files satisfy the current validation contract."
19
+ ],
20
+ "breaking": false
21
+ },
5
22
  {
6
23
  "version": "0.7.2",
7
24
  "date": "2026-03-23",
@@ -140,6 +140,21 @@ function parseStructuredSignalCandidate(line) {
140
140
  };
141
141
  }
142
142
 
143
+ function appendParsedStructuredSignalCandidates(lines, candidates, { requireAll = false } = {}) {
144
+ const parsedCandidates = [];
145
+ for (const line of lines || []) {
146
+ const candidate = parseStructuredSignalCandidate(line);
147
+ if (candidate) {
148
+ parsedCandidates.push(candidate);
149
+ continue;
150
+ }
151
+ if (requireAll) {
152
+ return;
153
+ }
154
+ }
155
+ candidates.push(...parsedCandidates);
156
+ }
157
+
143
158
  function collectStructuredSignalCandidates(text) {
144
159
  if (!text) {
145
160
  return [];
@@ -153,12 +168,7 @@ function collectStructuredSignalCandidates(text) {
153
168
  fenceLines = [];
154
169
  continue;
155
170
  }
156
- const fenceCandidates = fenceLines
157
- .map((line) => parseStructuredSignalCandidate(line))
158
- .filter(Boolean);
159
- if (fenceCandidates.length > 0 && fenceCandidates.length === fenceLines.length) {
160
- candidates.push(...fenceCandidates);
161
- }
171
+ appendParsedStructuredSignalCandidates(fenceLines, candidates, { requireAll: true });
162
172
  fenceLines = null;
163
173
  continue;
164
174
  }
@@ -174,6 +184,9 @@ function collectStructuredSignalCandidates(text) {
174
184
  candidates.push(candidate);
175
185
  }
176
186
  }
187
+ if (fenceLines !== null) {
188
+ appendParsedStructuredSignalCandidates(fenceLines, candidates);
189
+ }
177
190
  return candidates;
178
191
  }
179
192
 
@@ -576,27 +589,27 @@ function summaryNeedsStructuredSignalRefresh(payload, options = {}) {
576
589
  if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
577
590
  return false;
578
591
  }
579
- if (payload.structuredSignalDiagnostics && typeof payload.structuredSignalDiagnostics === "object") {
580
- return false;
581
- }
582
592
  const agent = options.agent;
583
593
  const contract = normalizeExitContract(agent?.exitContract);
584
594
  if (!contract) {
585
595
  return false;
586
596
  }
587
- if (!payload.proof || !payload.docDelta) {
588
- return true;
589
- }
597
+ const missingProofOrDocDelta = !payload.proof || !payload.docDelta;
590
598
  const ownedComponents = Array.isArray(agent?.components) ? agent.components : [];
591
- if (ownedComponents.length === 0) {
592
- return false;
593
- }
594
599
  const componentMarkers = new Map(
595
600
  Array.isArray(payload.components)
596
601
  ? payload.components.map((component) => [component.componentId, component])
597
602
  : [],
598
603
  );
599
- return ownedComponents.some((componentId) => !componentMarkers.has(componentId));
604
+ const missingOwnedComponents =
605
+ ownedComponents.length > 0 && ownedComponents.some((componentId) => !componentMarkers.has(componentId));
606
+ if (missingProofOrDocDelta || missingOwnedComponents) {
607
+ return true;
608
+ }
609
+ if (payload.structuredSignalDiagnostics && typeof payload.structuredSignalDiagnostics === "object") {
610
+ return false;
611
+ }
612
+ return false;
600
613
  }
601
614
 
602
615
  function refreshExecutionSummaryIfStale(summaryPathOrStatusPath, payload, options = {}) {