empirical-sdd 0.30.0 → 0.32.0

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
@@ -8,6 +8,93 @@ under the alpha rules in [docs/versioning.md](docs/versioning.md).
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.32.0] - 2026-09-08
12
+
13
+ ### Added
14
+
15
+ - Added a six-step initialization wizard covering Setup, Preferences, Review
16
+ bot, Tracking, Confirm, and Apply, with Back/Edit navigation, retained
17
+ choices, and explicit Save before setup changes.
18
+ - Added clickable app and feature mockup previews through `empirical mockups`,
19
+ human approval before UI contracts freeze, and fidelity checks against the
20
+ approved design during verification.
21
+ - Added explicit reuse of exact-revision QA receipts after validating source,
22
+ specification, policy, command, runtime, executable, and artifact identities.
23
+ - Added bounded verification progress and a repeatable benchmark for measuring
24
+ final verification without treating diagnostics as promotion evidence.
25
+ - Added explicit selection of existing specs and recoverable approved worktree
26
+ handoffs, including retries after interrupted Git creation or feature setup.
27
+
28
+ ### Changed
29
+
30
+ - Capability claims are now non-exclusive: specs in separate worktrees can
31
+ progress on the same capability while integration retains semantic conflict
32
+ detection against each spec's recorded base.
33
+ - Git worktrees now use their own selected feature instead of automatically
34
+ inheriting unfinished spec histories. Multiple unclaimed specs may remain
35
+ inactive without blocking unrelated new work.
36
+ - Reviewer-bot setup is optional, includes an explicit disable choice, and
37
+ preserves saved fresh-context review without repeated credential prompts.
38
+ - Linear tracking prefers authenticated sibling MCP tools, including upgrade
39
+ recovery from legacy API-key configuration, and derives ticket content from
40
+ the specification while storing recovery identities in attachment metadata.
41
+
42
+ ### Fixed
43
+
44
+ - Prevented unrelated malformed or blocked feature histories and sibling
45
+ checkout metadata from blocking normal work in another Git checkout.
46
+ - Preserved strict tracker recovery obligations and checkout ownership across
47
+ terminal transitions, interrupted handoffs, and explicit feature selection.
48
+ - Bound reused verification evidence to the selected executable and runtime
49
+ permission metadata so changed execution conditions cannot reuse stale proof.
50
+ - Rejected blank mockup approvals and ambiguous fidelity fields, and preserved
51
+ path containment and explicit human design decisions.
52
+ - Preserved user-authored tracker content while validating bounded MCP recovery
53
+ results and avoiding repeated provider mutations after ambiguous responses.
54
+
55
+ ### Migration
56
+
57
+ After upgrading, run `empirical update` to refresh installed bootstrap guidance
58
+ and invoke `empirical-init` in existing repositories to refresh managed local
59
+ workflow instructions while retaining saved settings. Schema 5 remains in use;
60
+ no manual data conversion is required.
61
+
62
+ A Git checkout without a selected feature now remains idle. To resume an existing
63
+ spec, explicitly select its feature through `empirical_select`; unclaimed specs
64
+ are retained. UI changes must record the mockup approval and fidelity artifacts
65
+ requested by the workflow. Verification receipts without matching current runtime
66
+ and executable identities must be rerun rather than reused.
67
+
68
+ ## [0.31.0] - 2026-09-04
69
+
70
+ ### Added
71
+
72
+ - Added authenticated Linear MCP tracker transport that reuses the host's
73
+ existing OAuth connection without copying credentials, with durable
74
+ discovery, preview, prepare, reconciliation, and exactly-once acceptance.
75
+ - Added a conditional design-language knowledge page for repositories with a
76
+ product interface, supporting explicit import, repository-derived proposals,
77
+ and human-confirmed elicitation while excluding documentation-only surfaces.
78
+
79
+ ### Changed
80
+
81
+ - Projected the shipped specialist-consult protocol into living capability and
82
+ workflow-routing specifications so required, bounded advisories remain
83
+ reviewable and protected from specification drift.
84
+
85
+ ### Fixed
86
+
87
+ - Kept Linear OAuth timeout handling live on Windows and isolated its complete
88
+ test suite from the Bun coverage instrumentation hang while retaining
89
+ aggregate coverage enforcement.
90
+ - Hardened Linear MCP bridge persistence against symlink escapes and serialized
91
+ intent acceptance so concurrent submissions cannot both advance one durable
92
+ operation.
93
+
94
+ ### Migration
95
+
96
+ No migration required.
97
+
11
98
  ## [0.30.0] - 2026-09-01
12
99
 
13
100
  ### Added
@@ -351,7 +438,9 @@ Published through GitHub Actions trusted publishing with npm provenance.
351
438
 
352
439
  - Prepared and released package version `0.20.2`.
353
440
 
354
- [Unreleased]: https://github.com/goempirical/empirical-sdd/compare/v0.30.0...HEAD
441
+ [Unreleased]: https://github.com/goempirical/empirical-sdd/compare/v0.32.0...HEAD
442
+ [0.32.0]: https://github.com/goempirical/empirical-sdd/compare/v0.31.0...v0.32.0
443
+ [0.31.0]: https://github.com/goempirical/empirical-sdd/compare/v0.30.0...v0.31.0
355
444
  [0.30.0]: https://github.com/goempirical/empirical-sdd/compare/v0.29.0...v0.30.0
356
445
  [0.29.0]: https://github.com/goempirical/empirical-sdd/compare/v0.28.0...v0.29.0
357
446
  [0.28.0]: https://github.com/goempirical/empirical-sdd/compare/v0.27.0...v0.28.0
package/README.md CHANGED
@@ -6,7 +6,7 @@ Empirical is a repository-native harness for coding agents. The model writes;
6
6
  Empirical keeps the contract, progress, proof, and exact next action in Git so
7
7
  work can resume across sessions, agents, and machines.
8
8
 
9
- > Empirical 0.29 is alpha software and requires Node.js 22 or newer.
9
+ > Empirical 0.31 is alpha software and requires Node.js 22 or newer.
10
10
 
11
11
  **[Open the practical harness guide](https://goempirical.github.io/empirical-sdd/)**
12
12
  for the visual walkthrough, diagrams, generated-file explorer, and complete
@@ -26,6 +26,17 @@ workflow. Its zero-build source is [docs/index.html](docs/index.html).
26
26
  - Codex: `$empirical-init`
27
27
  - Claude Code: `/empirical-init`
28
28
 
29
+ Init guides you through six steps in your agent chat: **Setup → Preferences →
30
+ Review bot → Tracking → Confirm → Apply**. It shows your current step and asks
31
+ one question at a time. Use **Back** or **Edit** to revisit a section while
32
+ keeping your other answers. Nothing is applied until you confirm **Save**.
33
+
34
+ Bot review is optional. Init offers it once; say “no,” “skip,” or “ignore”
35
+ to save fresh-context review without a bot token. Future init runs preserve
36
+ that choice. To enable it later, tell your agent “enable bot review.”
37
+ Fresh-context review still uses an isolated reviewer, but does not count as
38
+ an independent GitHub approval.
39
+
29
40
  3. Ask for the change normally.
30
41
 
31
42
  ```text
@@ -60,6 +71,12 @@ Empirical routes by risk, not prompt length:
60
71
  Specify → Design → Plan → Implement → Context? → Verify → Review → Integrate
61
72
  ```
62
73
 
74
+ A feature that shows an interface gets its mockup at Specify, while the
75
+ contract is still open, because seeing a screen reveals states and flows that
76
+ prose misses and those belong in the criteria. `empirical mockups` serves the
77
+ directions on a local address so a person can click through and choose one;
78
+ Verify then checks what was built against what was approved.
79
+
63
80
  Context runs when repository knowledge needs refinement. Failed verification or
64
81
  requested review changes return to implementation. Evidence, review, and
65
82
  integration are different claims, and Empirical reports only the highest level
@@ -82,8 +99,10 @@ repository/
82
99
  ├── policy.json verification and delivery policy
83
100
  ├── tracker.json secret-free tracker choice
84
101
  ├── context/ repository knowledge
102
+ ├── mockups/decision.md app mockups adopted or declined
85
103
  ├── specs/<feature>/
86
104
  │ ├── spec.md + decisions.md contract and decisions
105
+ │ ├── mockups/ approved directions and fidelity
87
106
  │ ├── design.md + plan.md Complex approach and plan
88
107
  │ ├── impact.json affected behavior and surfaces
89
108
  │ ├── state.json + events/ phase and resumable journal
@@ -109,7 +128,11 @@ install or update. Linear setup then uses an in-memory OAuth client for Linear's
109
128
  official remote MCP endpoint, with browser authorization through negotiated URL
110
129
  elicitation. Empirical never reads Copilot's token store or persists the OAuth
111
130
  token. The guarded `LINEAR_SECRET_KEY` host file remains a fallback, not the
112
- default requirement for an OAuth-capable session.
131
+ default requirement for an OAuth-capable session. On Codex, Policy v2 can use
132
+ `connection: "linear-mcp"`: Empirical emits durable secret-free intents, Codex
133
+ executes them through the authenticated Linear MCP tools, and validated results
134
+ converge the same binding, milestone, and strict-gate records without sharing
135
+ the OAuth token.
113
136
 
114
137
  ## Documentation
115
138
 
@@ -134,3 +157,17 @@ reserved for validated release pull requests.
134
157
  ## License
135
158
 
136
159
  [MIT](LICENSE)
160
+
161
+ ### Shared specs across worktrees
162
+
163
+ Specs and capability contracts are repository artifacts. Each Git worktree
164
+ selects and claims its own active feature in local Git metadata; different
165
+ worktrees can execute different features concurrently. Unclaimed or temporarily
166
+ inactive specs stay in `.empirical/specs/`. They are not abandoned work.
167
+
168
+ Use the agent's `empirical_select` operation to resume an existing unclaimed
169
+ feature. Explicit new feature starts and repository setup/context repair are not
170
+ blocked by unrelated unclaimed specs. If a feature-required operation needs a
171
+ choice, it lists candidates rather than choosing or moving a spec. An approved
172
+ worktree handoff can be retried with its original input after interruption.
173
+ See [selection and recovery semantics](docs/protocol.md#shared-specs-and-checkout-selection).
@@ -1,3 +1,5 @@
1
+ /** Serialize checkout ownership across every worktree sharing Git metadata. */
2
+ export declare function withCheckoutLock<T>(root: string, operation: () => Promise<T>): Promise<T>;
1
3
  export interface CheckoutSelection {
2
4
  feature: string | null;
3
5
  linked: boolean;
@@ -5,4 +7,17 @@ export interface CheckoutSelection {
5
7
  claimedElsewhere: Set<string>;
6
8
  }
7
9
  export declare function readCheckoutSelection(rootInput: string): Promise<CheckoutSelection>;
8
- export declare function writeCheckoutSelection(rootInput: string, feature: string | null): Promise<void>;
10
+ export declare function writeCheckoutSelection(rootInput: string, feature: string | null, expectedFeature?: string): Promise<void>;
11
+ /** Read only this checkout's recovery anchor, never sibling selections. */
12
+ export declare function readCheckoutLastFeature(rootInput: string): Promise<{
13
+ git: boolean;
14
+ feature: string | null;
15
+ }>;
16
+ export declare function readCheckoutRecoveryFeatures(rootInput: string): Promise<{
17
+ git: boolean;
18
+ features: string[];
19
+ }>;
20
+ /** Write-ahead ownership: call after validation but before a terminal journal
21
+ * commit, so a process exit before selector cleanup cannot orphan the effect. */
22
+ export declare function recordCheckoutRecoveryFeature(rootInput: string, feature: string): Promise<void>;
23
+ export declare function forgetCheckoutRecoveryFeatures(rootInput: string, resolvedFeatures: string[]): Promise<void>;