empirical-sdd 0.34.0 → 0.35.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,138 @@ under the alpha rules in [docs/versioning.md](docs/versioning.md).
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.35.0] - 2026-09-15
12
+
13
+ ### Added
14
+
15
+ - Approved mockup files and the chosen direction now accompany Implement, with
16
+ instructions to preserve the approved layout and styles. Missing or unreadable
17
+ mockup files do not introduce a new implementation gate.
18
+
19
+ - Added default discovery of ignored, untracked local environment files for
20
+ worktrees through `isolation.localFiles` (`discover`, `include`, `exclude`;
21
+ defaults `**/.env` and `**/.env.*` excluding `.env.example`, `.env.sample` and
22
+ `.env.template`, never under `node_modules`, `.git` or `.empirical`). Proposals
23
+ list every explicit and discovered path and every refusal; approving the
24
+ proposal approves exactly those copies. Discovery is bounded to 200 candidates
25
+ and 1 MiB per file, with refusals reported by path and reason.
26
+ - Added `empirical_worktree_prepare` (library `prepareWorktree`, internal CLI
27
+ `worktree-prepare`) to preview and apply local file copies for worktrees
28
+ created by host tools, `git worktree add`, delegation or transfer.
29
+ - Added `localFiles: { copied, skippedExisting, missingOptional, unapproved, refused }`
30
+ to worktree handoffs and prepare results, plus local file lines in proposal,
31
+ handoff, configuration and Init text.
32
+
33
+ - Fast features iterate through `empirical_iterate` from Implement or
34
+ implemented Done without promotion or test runs: the lifecycle iteration
35
+ counter increments, the journal keeps every `Iterate:` event, and `id`
36
+ addresses a Done feature. Fast consolidate requires explicit promotion.
37
+ - Fast starts create `decisions.md`; status and explain list Accepted Fast
38
+ decisions and report format issues as non-blocking `decisionWarnings`.
39
+ - QA planning, QA execution and evidence execution accept an explicit
40
+ `verificationProfile`: `iterate` runs only `testFiles: "changed"` commands and
41
+ `final` runs the configured final scope (Fast `final` excludes full CI and stays
42
+ unverified). Action packets report `verificationProfiles`.
43
+ - `empirical_yolo` accepts `profile`; explicit Fast defaults to and is limited to
44
+ the `implemented` ceiling.
45
+ - Routes report `matchedFloors`.
46
+ - Policy v2 accepts optional `promotion.fullCi` (`local` or `remote-checks`);
47
+ policy and configure results report a read-only `effective` value. Empirical
48
+ versions before this release reject a policy that sets `promotion`.
49
+ - Opt-in `remote-checks` promotion proof: passing, app-pinned GitHub required
50
+ check runs for the exact pushed commit create an immutable `remote-checks`
51
+ receipt through an injectable checks reader. Integrate accepts it only for an
52
+ already pushed commit; Deliver may push and open the source pull request and
53
+ returns `promotion-proof-required` until it passes, binding proof per head
54
+ before any merge; Publish rejects it. Remote proof is refused when the branch
55
+ changes policy, package scripts, workflows, composite actions, `scripts/**`,
56
+ lockfiles, `.gitmodules`, symlinks or gitlinks, or when target workflows use
57
+ unpinned `uses:` references. Repositories whose protection uses legacy
58
+ unpinned status contexts or ruleset entries without an app pin must pin the app,
59
+ and must SHA-pin workflow and action references, before `remote-checks` can pass.
60
+
61
+ ### Changed
62
+
63
+ - Init now declares `.empirical/** -text` in `.gitattributes` to preserve
64
+ digest-bound journal bytes across Git checkouts. Existing project-specific
65
+ Empirical attribute rules are preserved.
66
+ - Lock waiters renew their wait budget as ownership changes, while retaining a
67
+ bounded overall wait, so healthy contention does not report a stuck repository.
68
+
69
+ - Existing configurations now discover local environment files by default
70
+ without being rewritten, so worktree proposals and their approval tokens change
71
+ when ignored environment files exist; pass the proposal's `localFiles`
72
+ unchanged to `empirical_worktree_create`. Set `discover: false` to opt out.
73
+ - Worktrees created outside Empirical can now receive local files through
74
+ prepare, and generated agent guidance routes local file provisioning through
75
+ the Empirical proposal and prepare operation.
76
+
77
+ - Deliver accepts the full-CI receipt Integrate recorded for an identical
78
+ candidate instead of requiring a second local full-CI run; `reuseReceiptId` and
79
+ Publish keep exact revision matching. The delivered source pull request head is
80
+ bound to the proven commit before review, ready or merge.
81
+ - A failed Fast completion now blocks the same Fast feature with `retry` and
82
+ explicit `promote` as recovery paths instead of promoting it to Complex, and
83
+ `promote` accepts that block.
84
+ - An explicit Fast request is no longer promoted by integration or delivery
85
+ wording; sensitive, migration and publication signals still promote it.
86
+ - Integrate, Deliver and Publish refuse Fast features with `PROMOTION_REQUIRED`
87
+ guidance; only explicit `empirical_promote` changes a Fast feature to Complex.
88
+ - `receiptIds` is optional on `empirical_integrate` and `empirical_deliver`.
89
+ - Generated skills and phase instructions explain lane choice, Fast iteration,
90
+ explicit promotion, the phrase-to-profile mapping, one-request test
91
+ authorization, carry-over and remote-checks, and no longer state that
92
+ consolidation authorizes tests.
93
+
94
+ - Fast action packets no longer list every living capability specification;
95
+ agents open a capability only when the change touches it. Complex and
96
+ promoted features keep the full list.
97
+ - Verification commands can opt into `testFiles: "changed"` to run only the
98
+ test files matching changed files, failing with `NO_CHANGED_TESTS` rather than
99
+ falling back to the whole suite.
100
+ - Independent integration validation no longer re-runs verification commands
101
+ whose declared checks a full-CI command in the same directory already covers,
102
+ unless the feature changes the policy or package scripts, and reports which
103
+ commands executed or were covered.
104
+
105
+ ### Fixed
106
+
107
+ - Windows worktree creation and recovery recognize canonical directory identity
108
+ across separator, case and short-path spellings. Recovery errors identify the
109
+ mismatched check and explain when a newer runtime is needed to load the base.
110
+ - Invalid mockup approval feedback now shows the approval document shape, even
111
+ during Verify, instead of the fidelity-report shape.
112
+
113
+ - `empirical update` and `empirical uninstall` work on Windows again. Node refuses
114
+ to spawn `.cmd` wrappers without a shell (CVE-2024-27980), so npm and the
115
+ PATH-visible CLI now run through `cmd.exe` by quoted absolute path and the
116
+ npm-installed CLI runs through Node, including prefixes containing spaces (SDD-66).
117
+
118
+ ### Migration
119
+
120
+ - Update the package and installed global skills with `empirical update`, restart
121
+ the coding agent/MCP host, invoke `empirical-init` in each existing repository
122
+ to refresh managed instructions and local skills, then reload affected sessions.
123
+ - Existing configurations discover ignored, untracked `.env` and `.env.*` files
124
+ by default. Review the paths in worktree proposals; set
125
+ `isolation.localFiles.discover` to `false` to retain explicit-only copying.
126
+ Existing `isolation.copyFiles` entries remain required. Use worktree prepare
127
+ to provision worktrees created by another tool without overwriting files.
128
+ - Fast failures now stay Fast. Retry or explicitly promote the same feature
129
+ when stronger verification or integration is needed. To iterate on an existing
130
+ Complex implementation, request iterative development and explicitly request
131
+ final verification when ready; iteration alone does not authorize tests.
132
+ - `promotion.fullCi` remains `local` by default. Opt into `remote-checks` only
133
+ after configuring app-pinned required checks and SHA-pinned workflow/action
134
+ references. Upgrade every participating agent before adding this policy field;
135
+ older versions reject it. Publication still requires local proof.
136
+ - When refreshing an existing repository, review and commit the `.gitattributes`
137
+ journal rule added by Init. An existing rule for `.empirical` is left untouched;
138
+ ensure it preserves journal bytes across worktrees. Keep existing journal and
139
+ receipt files intact.
140
+ - Schema 5 and existing specifications, journals, tracker bindings and receipts
141
+ are retained. Do not delete workflow state to upgrade.
142
+
11
143
  ## [0.34.0] - 2026-09-14
12
144
 
13
145
  ### Added
@@ -543,7 +675,8 @@ Published through GitHub Actions trusted publishing with npm provenance.
543
675
 
544
676
  - Prepared and released package version `0.20.2`.
545
677
 
546
- [Unreleased]: https://github.com/goempirical/empirical-sdd/compare/v0.34.0...HEAD
678
+ [Unreleased]: https://github.com/goempirical/empirical-sdd/compare/v0.35.0...HEAD
679
+ [0.35.0]: https://github.com/goempirical/empirical-sdd/compare/v0.34.0...v0.35.0
547
680
  [0.34.0]: https://github.com/goempirical/empirical-sdd/compare/v0.33.0...v0.34.0
548
681
  [0.33.0]: https://github.com/goempirical/empirical-sdd/compare/v0.32.0...v0.33.0
549
682
  [0.32.0]: https://github.com/goempirical/empirical-sdd/compare/v0.31.0...v0.32.0
package/README.md CHANGED
@@ -108,10 +108,19 @@ integration are different claims, and Empirical reports only the highest level
108
108
  actually proven: `implemented`, `verified`, `integrated`, `delivered`, or
109
109
  `published`.
110
110
 
111
- Fast trades verification confidence for less waiting and process. If a quick
112
- feature needs the full workflow, promote that same spec to Complex; its history
113
- and original identity are preserved. Historical completed Fast records retain
114
- the evidence and completion level they originally earned.
111
+ Choose Fast for small, self-contained changes. Work that builds on an existing
112
+ foundation and will be integrated belongs in Complex iterative
113
+ (`empirical_complex` with `iterative: true`): adjust with `empirical_iterate`
114
+ without test runs, then say "ready to close" to run final verification once.
115
+
116
+ Fast trades verification confidence for less waiting and process. A follow-up
117
+ adjustment to the same Fast feature uses `empirical_iterate`, from Implement or
118
+ after Done: no promotion, no test run, and the journal keeps every adjustment.
119
+ A failed Fast completion blocks in place for `retry` or explicit promotion.
120
+ Promotion is always explicit: Fast consolidate, Integrate and Deliver require
121
+ `empirical_promote`, which continues the same spec through Complex Specify and
122
+ preserves its history and identity. Historical completed Fast records retain the
123
+ evidence and completion level they originally earned.
115
124
 
116
125
  Delivery is never implied. Empirical does not infer permission to merge a pull
117
126
  request, bypass protection, create a release, or publish a package.
@@ -121,11 +130,16 @@ request, bypass protection, create a release, or publish a package.
121
130
  Fast and Complex iteration do not automatically run tests after edits. Ask for a
122
131
  run when ready:
123
132
 
124
- - “Run tests for this featureselects the smallest relevant configured checks.
133
+ - “Run the changed testsor “run the affected tests” uses the `iterate`
134
+ verification profile: only commands configured with `testFiles: "changed"`.
135
+ - “Now run it”, “run everything” or “ready to close” uses the `final` profile.
125
136
  - “Keep iterating; skip tests for now” leaves verification pending.
126
- - “Run the full suite” explicitly requests broader verification.
127
137
 
128
- One test request does not enable automatic reruns after subsequent changes.
138
+ One test request does not enable automatic reruns after subsequent changes, and
139
+ no phase, iteration or consolidation runs tests by itself. One exact full-CI
140
+ receipt recorded at Integrate also serves Deliver when nothing changed, and a
141
+ repository can opt into `promotion.fullCi: "remote-checks"` so passing GitHub
142
+ required checks on the exact pushed commit stand in for local full CI.
129
143
  If no focused command is configured, the agent reports the gap instead of
130
144
  silently running the entire suite. Complex still requires real evidence before
131
145
  claiming verified completion; Fast can finish implemented and unverified.
@@ -225,6 +239,15 @@ their original checkout. Transferring an unfinished spec to another worktree
225
239
  requires its exact source revision and matching destination history; it keeps
226
240
  the original capability bases and receipts.
227
241
 
242
+ Ignored local environment files such as `apps/api/.env` or `apps/web/.env.local`
243
+ are discovered by default, listed by path in each worktree proposal, and copied
244
+ into the new worktree when you approve it. Copies are independent, never
245
+ overwrite existing files and never enter Git. Set `isolation.localFiles.discover`
246
+ to `false` to opt out, or adjust its `include` and `exclude` patterns. For a
247
+ worktree created by another tool or `git worktree add`, your agent previews and
248
+ applies Empirical prepare to fill in the missing files.
249
+ See [local environment files](docs/protocol.md#local-environment-files-in-worktrees).
250
+
228
251
  Ask your agent for the read-only overview to see specs, owners, branches,
229
252
  profiles, progress and verification status together. Unrelated malformed records
230
253
  appear as local diagnostics without selecting or deleting any spec. Independent
@@ -0,0 +1,18 @@
1
+ /** Paths changed on this branch since `base`, plus uncommitted and untracked work. */
2
+ export declare function changedPaths(root: string, base: string | null): string[];
3
+ /**
4
+ * Existing test files that correspond to the changed paths: changed test files
5
+ * themselves, and tests whose name stem matches a changed source file.
6
+ */
7
+ export declare function selectChangedTests(root: string, changed: readonly string[]): string[];
8
+ /**
9
+ * The argv to execute for a configured command. Commands that opt into
10
+ * `testFiles: "changed"` receive only matching test paths and never fall back
11
+ * to their bare argv, which would usually run the whole suite.
12
+ */
13
+ export declare function resolveCommandArgv(root: string, command: {
14
+ id: string;
15
+ argv: readonly string[];
16
+ cwd: string;
17
+ testFiles?: "changed" | undefined;
18
+ }, base: string | null): string[];