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 +134 -1
- package/README.md +30 -7
- package/dist/changed-tests.d.ts +18 -0
- package/dist/cli.js +8401 -5255
- package/dist/core.d.ts +66 -3
- package/dist/decisions.d.ts +8 -0
- package/dist/delivery.d.ts +87 -2
- package/dist/demo-integration-repair.js +8299 -5417
- package/dist/demo-ticket-policy.js +8291 -5409
- package/dist/index.d.ts +7 -3
- package/dist/index.js +8123 -5233
- package/dist/integrations.js +1904 -454
- package/dist/journal-attributes.d.ts +8 -0
- package/dist/lifecycle.d.ts +28 -1
- package/dist/local-file-patterns.d.ts +24 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.js +8151 -5207
- package/dist/mockups.d.ts +9 -0
- package/dist/policy.d.ts +5 -1
- package/dist/promotion-proof.d.ts +225 -0
- package/dist/protocol.d.ts +163 -1
- package/dist/protocol.js +95 -8
- package/dist/qa.d.ts +85 -2
- package/dist/routing.d.ts +8 -0
- package/dist/storage.d.ts +3 -1
- package/dist/types.d.ts +152 -5
- package/dist/worktree-files.d.ts +92 -2
- package/dist/worktree-prepare.d.ts +8 -0
- package/dist/worktrees.d.ts +34 -3
- package/docs/mcp.md +177 -25
- package/docs/protocol.md +338 -48
- package/docs/security.md +15 -0
- package/docs/verification-performance.md +13 -1
- package/docs/versioning.md +11 -9
- package/package.json +1 -1
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.
|
|
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
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
|
133
|
+
- “Run the changed tests” or “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[];
|