empirical-sdd 0.29.0 → 0.30.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 +40 -1
- package/README.md +88 -115
- package/dist/agent-catalog.d.ts +2 -0
- package/dist/cli.js +2534 -14
- package/dist/demo-integration-repair.js +86 -8
- package/dist/demo-ticket-policy.js +86 -8
- package/dist/index.d.ts +2 -0
- package/dist/index.js +31126 -14981
- package/dist/integrations.js +85 -7
- package/dist/linear-mcp-oauth.d.ts +52 -0
- package/dist/mcp.d.ts +1 -0
- package/dist/mcp.js +2535 -14
- package/dist/protocol.d.ts +1 -1
- package/dist/protocol.js +3 -1
- package/dist/types.d.ts +1 -0
- package/docs/demo.md +5 -5
- package/docs/mcp.md +27 -14
- package/docs/protocol.md +4 -2
- package/docs/security.md +6 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,44 @@ under the alpha rules in [docs/versioning.md](docs/versioning.md).
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
+
## [0.30.0] - 2026-09-01
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Added a zero-build, responsive project wiki with practical onboarding,
|
|
16
|
+
architecture and workflow guidance, searchable task-oriented navigation,
|
|
17
|
+
accessible Agentum motion, strict content security, reduced-motion support,
|
|
18
|
+
and meaningful no-JavaScript fallbacks.
|
|
19
|
+
- Added exact GitHub Copilot MCP configuration management that preserves
|
|
20
|
+
unrelated servers and user-owned collisions while installing and removing
|
|
21
|
+
only Empirical's managed stdio bridge.
|
|
22
|
+
- Added in-memory OAuth for Linear's official remote MCP endpoint through the
|
|
23
|
+
standalone `empirical mcp` bridge, using dynamic client registration, PKCE,
|
|
24
|
+
a state-bound ephemeral loopback callback, URL-mode elicitation, bounded
|
|
25
|
+
remote operations, sanitized failures, and complete session cleanup.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Replaced the long-form README with a concise project introduction derived
|
|
30
|
+
from the wiki while retaining strict tracker recovery guidance and keeping
|
|
31
|
+
obsolete public integration examples out of generated onboarding.
|
|
32
|
+
- Generated initialization guidance now recommends an OAuth-capable Empirical
|
|
33
|
+
host when the current skill-only host cannot perform the browser handoff,
|
|
34
|
+
while retaining the secure host-only secret-file fallback.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- Linear discovery, lifecycle suggestion, and preview now accept any finite
|
|
39
|
+
workflow-state position, including the negative floating-point ordering
|
|
40
|
+
values Linear legitimately assigns to backlog states.
|
|
41
|
+
- Fixed standalone Linear OAuth lifecycle behavior so cancellation, timeout,
|
|
42
|
+
callback races, invalid responses, and transport shutdown remain bounded and
|
|
43
|
+
cannot leak credentials or leave callback listeners running.
|
|
44
|
+
|
|
45
|
+
### Migration
|
|
46
|
+
|
|
47
|
+
No migration required.
|
|
48
|
+
|
|
11
49
|
## [0.29.0] - 2026-08-28
|
|
12
50
|
|
|
13
51
|
### Added
|
|
@@ -313,7 +351,8 @@ Published through GitHub Actions trusted publishing with npm provenance.
|
|
|
313
351
|
|
|
314
352
|
- Prepared and released package version `0.20.2`.
|
|
315
353
|
|
|
316
|
-
[Unreleased]: https://github.com/goempirical/empirical-sdd/compare/v0.
|
|
354
|
+
[Unreleased]: https://github.com/goempirical/empirical-sdd/compare/v0.30.0...HEAD
|
|
355
|
+
[0.30.0]: https://github.com/goempirical/empirical-sdd/compare/v0.29.0...v0.30.0
|
|
317
356
|
[0.29.0]: https://github.com/goempirical/empirical-sdd/compare/v0.28.0...v0.29.0
|
|
318
357
|
[0.28.0]: https://github.com/goempirical/empirical-sdd/compare/v0.27.0...v0.28.0
|
|
319
358
|
[0.27.0]: https://github.com/goempirical/empirical-sdd/compare/v0.26.1...v0.27.0
|
package/README.md
CHANGED
|
@@ -1,162 +1,135 @@
|
|
|
1
1
|
# Empirical SDD
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Agent work that survives the chat.**
|
|
4
4
|
|
|
5
|
-
Empirical
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
the result. State lives in the repository, so work can resume across sessions,
|
|
9
|
-
agents, and machines without relying on chat history.
|
|
5
|
+
Empirical is a repository-native harness for coding agents. The model writes;
|
|
6
|
+
Empirical keeps the contract, progress, proof, and exact next action in Git so
|
|
7
|
+
work can resume across sessions, agents, and machines.
|
|
10
8
|
|
|
11
9
|
> Empirical 0.29 is alpha software and requires Node.js 22 or newer.
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
**[Open the practical harness guide](https://goempirical.github.io/empirical-sdd/)**
|
|
12
|
+
for the visual walkthrough, diagrams, generated-file explorer, and complete
|
|
13
|
+
workflow. Its zero-build source is [docs/index.html](docs/index.html).
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
you use:
|
|
15
|
+
## Start in three steps
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
npm install -g empirical-sdd
|
|
20
|
-
empirical install
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
In each repository, initialize Empirical once from your agent:
|
|
24
|
-
|
|
25
|
-
- Codex: `$empirical-init`
|
|
26
|
-
- Claude Code: `/empirical-init`
|
|
27
|
-
- Windsurf: `@empirical-init`
|
|
28
|
-
|
|
29
|
-
Reload the agent if prompted. Then ask for work normally:
|
|
17
|
+
1. Install the package and the agent integrations you use.
|
|
30
18
|
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Empirical activates automatically for repository changes. Read-only questions
|
|
36
|
-
stay read-only and do not start a workflow.
|
|
19
|
+
```sh
|
|
20
|
+
npm install -g empirical-sdd
|
|
21
|
+
empirical install
|
|
22
|
+
```
|
|
37
23
|
|
|
38
|
-
|
|
24
|
+
2. Initialize each repository once from your coding agent.
|
|
39
25
|
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
- Persists specifications, decisions, journal events, capability contracts, and
|
|
43
|
-
evidence under `.empirical/`.
|
|
44
|
-
- Links every acceptance criterion to executable evidence or an explicit human
|
|
45
|
-
QA step.
|
|
46
|
-
- Selects focused, integration, fault-injection, cross-platform, clean-consumer,
|
|
47
|
-
and full-CI checks according to risk.
|
|
48
|
-
- Requires fresh-context review of the exact committed diff.
|
|
49
|
-
- Keeps concurrent work isolated with Git worktrees and detects overlapping
|
|
50
|
-
capability changes before they collide.
|
|
51
|
-
- Optionally mirrors progress to Linear, GitHub Issues + Projects, or Jira.
|
|
52
|
-
- Reports only the highest level actually proven: implemented, verified,
|
|
53
|
-
integrated, delivered, or published.
|
|
26
|
+
- Codex: `$empirical-init`
|
|
27
|
+
- Claude Code: `/empirical-init`
|
|
54
28
|
|
|
55
|
-
|
|
29
|
+
3. Ask for the change normally.
|
|
56
30
|
|
|
57
|
-
|
|
31
|
+
```text
|
|
32
|
+
Add rate limiting to the public API and prove the failure path.
|
|
33
|
+
```
|
|
58
34
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
35
|
+
Repository mutations route automatically. Read-only questions remain
|
|
36
|
+
read-only. If work stops, reopen the same checkout and ask the agent to
|
|
37
|
+
continue—the committed journal provides the resume point.
|
|
62
38
|
|
|
63
|
-
|
|
64
|
-
command, platform, source tree, duration, attempts, and output digests; changing
|
|
65
|
-
the code makes stale evidence unusable. Failed retries, skipped checks, missing
|
|
66
|
-
environments, and unsupported platforms remain visible.
|
|
39
|
+
## Why use it?
|
|
67
40
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
41
|
+
| Without a harness | With Empirical |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| Lost chat | **Continuity** — resume from repository state. |
|
|
44
|
+
| Ambiguous request | **Shared contract** — agree on observable outcomes first. |
|
|
45
|
+
| Confidence without proof | **Honest evidence** — bind claims to exact source, commands, attempts, and results. |
|
|
46
|
+
| Scope drift | **Reviewable scope** — keep decisions, diffs, failures, and gaps visible. |
|
|
47
|
+
| Unsafe convergence | **Safer integration** — isolate parallel work and validate against an independent target. |
|
|
48
|
+
| Accidental publication | **Bounded authority** — keep implementation, delivery, and publication separate. |
|
|
71
49
|
|
|
72
|
-
|
|
73
|
-
infer permission to merge pull requests, bypass protection, create releases, or
|
|
74
|
-
publish packages from ordinary implementation work.
|
|
50
|
+
## How it works
|
|
75
51
|
|
|
76
|
-
|
|
52
|
+
Empirical routes by risk, not prompt length:
|
|
77
53
|
|
|
78
|
-
|
|
54
|
+
- **Fast** handles explicit, tiny, localized, reversible, contract-neutral work
|
|
55
|
+
with focused proof.
|
|
56
|
+
- **Complex** carries material work through a durable contract, decisions,
|
|
57
|
+
verification, exact-diff review, and independent integration.
|
|
79
58
|
|
|
80
59
|
```text
|
|
81
|
-
|
|
82
|
-
Continue the active feature.
|
|
83
|
-
Show me which acceptance criteria still lack evidence.
|
|
84
|
-
Why did this change require the clean package-consumer check?
|
|
60
|
+
Specify → Design → Plan → Implement → Context? → Verify → Review → Integrate
|
|
85
61
|
```
|
|
86
62
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
| Command | Purpose |
|
|
93
|
-
| --- | --- |
|
|
94
|
-
| `empirical install` | Select agents and install or repair integrations. |
|
|
95
|
-
| `empirical update` | Upgrade Empirical and refresh integrations. |
|
|
96
|
-
| `empirical uninstall` | Remove managed global integrations and the package. |
|
|
97
|
-
| `empirical help` | Explain commands, routing, phases, and documentation. |
|
|
98
|
-
|
|
99
|
-
`empirical uninstall` preserves repository `.empirical` history and
|
|
100
|
-
configuration. Workflow operations are machine-facing and reached by agents
|
|
101
|
-
over MCP; there is no human CLI command for manually advancing a phase.
|
|
63
|
+
Context runs when repository knowledge needs refinement. Failed verification or
|
|
64
|
+
requested review changes return to implementation. Evidence, review, and
|
|
65
|
+
integration are different claims, and Empirical reports only the highest level
|
|
66
|
+
actually proven: `implemented`, `verified`, `integrated`, `delivered`, or
|
|
67
|
+
`published`.
|
|
102
68
|
|
|
103
|
-
|
|
69
|
+
Delivery is never implied. Empirical does not infer permission to merge a pull
|
|
70
|
+
request, bypass protection, create a release, or publish a package.
|
|
104
71
|
|
|
105
|
-
|
|
106
|
-
genuinely non-author. Teams that do not use a second identity can explicitly
|
|
107
|
-
choose fresh-context review; Empirical records that distinction rather than
|
|
108
|
-
mislabeling it as independent forge approval.
|
|
72
|
+
## What it creates
|
|
109
73
|
|
|
110
|
-
|
|
111
|
-
tracking. Best-effort tracking never rewinds local work when a provider is
|
|
112
|
-
unavailable. Strict tracking is opt-in and blocks only work whose configured
|
|
113
|
-
ticket rule is required. Policy exposes `enforcement: "best-effort" | "strict"`;
|
|
114
|
-
strict recovery retries the exact feature after credentials or provider state
|
|
115
|
-
recover, without accepting a token through chat.
|
|
74
|
+
Init installs the harness; selected work fills in the record:
|
|
116
75
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
76
|
+
```text
|
|
77
|
+
repository/
|
|
78
|
+
├── AGENTS.md / CLAUDE.md / GEMINI.md bounded activation markers
|
|
79
|
+
├── agent skill + MCP entries selected integrations
|
|
80
|
+
└── .empirical/
|
|
81
|
+
├── config.json project setup
|
|
82
|
+
├── policy.json verification and delivery policy
|
|
83
|
+
├── tracker.json secret-free tracker choice
|
|
84
|
+
├── context/ repository knowledge
|
|
85
|
+
├── specs/<feature>/
|
|
86
|
+
│ ├── spec.md + decisions.md contract and decisions
|
|
87
|
+
│ ├── design.md + plan.md Complex approach and plan
|
|
88
|
+
│ ├── impact.json affected behavior and surfaces
|
|
89
|
+
│ ├── state.json + events/ phase and resumable journal
|
|
90
|
+
│ ├── evidence/receipts/ immutable attempts and artifacts
|
|
91
|
+
│ ├── reviews/ exact-diff review, when reached
|
|
92
|
+
│ └── integration-receipt.json convergence proof, when reached
|
|
93
|
+
└── capabilities/<capability>/ living behavior after integration
|
|
94
|
+
```
|
|
123
95
|
|
|
124
|
-
|
|
96
|
+
Exact host files depend on the integrations selected during install. Init
|
|
97
|
+
creates durable setup and empty work containers; a real mutation creates a
|
|
98
|
+
feature record, and conditional artifacts appear only when their phases run.
|
|
125
99
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
- no hiding a failed attempt by reporting a later retry as first-pass green.
|
|
100
|
+
Optional tracking mirrors approved milestones to Linear, GitHub, or Jira; the
|
|
101
|
+
repository remains authoritative. Policy supports
|
|
102
|
+
`enforcement: "best-effort" | "strict"`; strict recovery retries the exact
|
|
103
|
+
feature. Credentials never belong in chat, prompts, repository files, tool
|
|
104
|
+
arguments, or evidence.
|
|
132
105
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
or
|
|
106
|
+
When GitHub Copilot is selected, installation also reconciles the exact
|
|
107
|
+
Empirical stdio bridge in `~/.copilot/mcp-config.json`; start a new session after
|
|
108
|
+
install or update. Linear setup then uses an in-memory OAuth client for Linear's
|
|
109
|
+
official remote MCP endpoint, with browser authorization through negotiated URL
|
|
110
|
+
elicitation. Empirical never reads Copilot's token store or persists the OAuth
|
|
111
|
+
token. The guarded `LINEAR_SECRET_KEY` host file remains a fallback, not the
|
|
112
|
+
default requirement for an OAuth-capable session.
|
|
136
113
|
|
|
137
114
|
## Documentation
|
|
138
115
|
|
|
116
|
+
- [Practical guide](https://goempirical.github.io/empirical-sdd/) — visual onboarding and diagrams
|
|
117
|
+
- [Demo](docs/demo.md) — installation and representative scenarios
|
|
139
118
|
- [Protocol](docs/protocol.md) — state machine, artifacts, and completion rules
|
|
140
|
-
- [Architecture](docs/architecture.md) —
|
|
119
|
+
- [Architecture](docs/architecture.md) — persistence and trust boundaries
|
|
141
120
|
- [MCP and tracking](docs/mcp.md) — agent operations and tracker configuration
|
|
142
|
-
- [
|
|
143
|
-
- [
|
|
144
|
-
- [Versioning](docs/versioning.md) — alpha compatibility policy
|
|
145
|
-
- [Releasing](docs/releasing.md) — guarded repository release procedure
|
|
146
|
-
- [Changelog](CHANGELOG.md) — shipped behavior and migrations
|
|
121
|
+
- [Security](docs/security.md) — credentials, execution, review, and authority
|
|
122
|
+
- [Releasing](docs/releasing.md) — guarded maintainer playbook
|
|
147
123
|
|
|
148
124
|
## Development
|
|
149
125
|
|
|
150
|
-
Development requires Node.js 22+ and the Bun version pinned by CI.
|
|
151
|
-
|
|
152
126
|
```sh
|
|
153
127
|
bun install --frozen-lockfile
|
|
154
128
|
bun run ci
|
|
155
129
|
```
|
|
156
130
|
|
|
157
131
|
CI covers Node.js 22, 24, and 26. Ordinary changes target `develop`; `main` is
|
|
158
|
-
reserved for validated release
|
|
159
|
-
`./mcp`, and `./integrations`.
|
|
132
|
+
reserved for validated release pull requests.
|
|
160
133
|
|
|
161
134
|
## License
|
|
162
135
|
|
package/dist/agent-catalog.d.ts
CHANGED
|
@@ -189,6 +189,8 @@ export declare const AGENT_SKILL_TARGETS: readonly [{
|
|
|
189
189
|
readonly label: "GitHub Copilot";
|
|
190
190
|
readonly globalSkillPath: ".copilot/skills";
|
|
191
191
|
readonly detectPaths: readonly [".copilot"];
|
|
192
|
+
readonly reload: "Start a new Copilot CLI or Agent Host session so it reloads the global Empirical MCP bridge.";
|
|
193
|
+
readonly projectMcp: true;
|
|
192
194
|
}, {
|
|
193
195
|
readonly id: "goose";
|
|
194
196
|
readonly label: "Goose";
|