@matt82198/aesop 0.1.0-beta.4 → 0.1.0-rc.1
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 +187 -5
- package/LICENSE +66 -21
- package/README.md +143 -23
- package/aesop.config.example.json +14 -1
- package/bin/CLAUDE.md +42 -5
- package/bin/cli.js +479 -95
- package/daemons/CLAUDE.md +5 -2
- package/daemons/backup-fleet.sh +209 -51
- package/daemons/run-watchdog.sh +211 -62
- package/dash/dash-extra.mjs +73 -4
- package/dash/watchdog-gui.sh +41 -35
- package/docs/ARCHITECTURE.md +296 -0
- package/docs/CONCEPTS.md +254 -0
- package/docs/CONFIGURE.md +256 -0
- package/docs/FIRST-WAVE.md +276 -0
- package/docs/INSTALL.md +224 -0
- package/docs/README.md +176 -27
- package/docs/RELEASING.md +159 -0
- package/docs/archive/README.md +3 -0
- package/docs/{spikes → archive/spikes}/tiered-cognition/README.md +1 -3
- package/docs/autonomous-swe.md +149 -0
- package/docs/case-study-portfolio.md +61 -0
- package/docs/reproduce.md +121 -0
- package/docs/self-stats-data.json +11 -0
- package/docs/templates/FLEET-OPS-ANALYSIS.example.md +27 -0
- package/docs/templates/FLEET-OPS-RECOMMENDATIONS.example.md +24 -0
- package/docs/templates/PROPOSALS-LOG.example.md +64 -0
- package/hooks/CLAUDE.md +51 -0
- package/hooks/install-waveguard.sh +68 -0
- package/hooks/pre-commit-waveguard.sh +26 -0
- package/hooks/pre-push-policy.sh +253 -15
- package/mcp/CLAUDE.md +213 -0
- package/mcp/package.json +26 -0
- package/mcp/server.mjs +543 -0
- package/monitor/CHARTER.md +76 -110
- package/monitor/CLAUDE.md +3 -3
- package/monitor/collect-signals.mjs +218 -20
- package/package.json +17 -6
- package/scan/CLAUDE.md +30 -0
- package/scan/fleet-scan.example.mjs +292 -0
- package/skills/CLAUDE.md +1 -0
- package/skills/healthcheck/SKILL.md +44 -0
- package/state_store/CLAUDE.md +39 -0
- package/state_store/__init__.py +24 -0
- package/state_store/api.py +35 -0
- package/state_store/export.py +19 -0
- package/state_store/ingest.py +41 -0
- package/state_store/projections.py +126 -0
- package/state_store/store.py +197 -0
- package/tools/CLAUDE.md +37 -149
- package/tools/alert_bridge.py +453 -0
- package/tools/bench_runner.py +438 -0
- package/tools/buildlog.py +4 -7
- package/tools/ci_merge_wait.py +308 -14
- package/tools/common.py +62 -0
- package/tools/cost_ceiling.py +191 -0
- package/tools/dash.js +102 -0
- package/tools/doctor.js +220 -0
- package/tools/fleet_ledger.py +189 -17
- package/tools/fleet_prompt_extractor.py +134 -0
- package/tools/halt.py +172 -0
- package/tools/healthcheck.py +299 -0
- package/tools/heartbeat.py +4 -7
- package/tools/metrics_gate.py +8 -2
- package/tools/orchestrator_status.py +4 -9
- package/tools/reconcile.py +277 -0
- package/tools/rotate_logs.py +152 -62
- package/tools/scanner_selftest.py +28 -3
- package/tools/secret_scan.py +367 -91
- package/tools/self_stats.py +797 -0
- package/tools/session_usage_summary.py +198 -0
- package/tools/status.js +187 -0
- package/tools/svg_to_png.mjs +50 -0
- package/tools/transcript_replay.py +236 -0
- package/tools/transcript_timeline.py +184 -0
- package/tools/verify_agent_inspector.py +289 -0
- package/tools/verify_dash.py +361 -542
- package/tools/verify_prboard.py +344 -0
- package/tools/verify_submit_encoding.py +12 -4
- package/tools/watch.js +49 -0
- package/ui/CLAUDE.md +59 -41
- package/ui/agents.py +337 -34
- package/ui/api/submit.py +44 -5
- package/ui/api/tracker.py +15 -7
- package/ui/collectors.py +294 -52
- package/ui/config.py +31 -2
- package/ui/cost.py +355 -0
- package/ui/csrf.py +9 -4
- package/ui/handler.py +450 -12
- package/ui/render.py +26 -6
- package/ui/sse.py +114 -13
- package/ui/wave_prs.py +230 -0
- package/ui/web/dist/assets/index-0qQYnvMC.js +9 -0
- package/ui/web/dist/assets/index-BdIlFieV.css +1 -0
- package/ui/web/dist/index.html +14 -0
- package/monitor/.signal-state.json +0 -3
- package/monitor/ACTIONS.log +0 -1
- package/monitor/BRIEF.md +0 -24
- package/monitor/SIGNALS.json +0 -54
- package/tools/__pycache__/buildlog.cpython-314.pyc +0 -0
- package/tools/__pycache__/ci_merge_wait.cpython-314.pyc +0 -0
- package/tools/__pycache__/ensure_state.cpython-314.pyc +0 -0
- package/tools/__pycache__/eod_sweep.cpython-314.pyc +0 -0
- package/tools/__pycache__/fleet_ledger.cpython-314.pyc +0 -0
- package/tools/__pycache__/heartbeat.cpython-314.pyc +0 -0
- package/tools/__pycache__/inbox_drain.cpython-314.pyc +0 -0
- package/tools/__pycache__/launch_tui.cpython-314.pyc +0 -0
- package/tools/__pycache__/orchestrator_status.cpython-314.pyc +0 -0
- package/tools/__pycache__/power_selftest.cpython-314.pyc +0 -0
- package/tools/__pycache__/prepublish_scan.cpython-314.pyc +0 -0
- package/tools/__pycache__/rotate_logs.cpython-314.pyc +0 -0
- package/tools/__pycache__/scanner_selftest.cpython-314.pyc +0 -0
- package/tools/__pycache__/secret_scan.cpython-314.pyc +0 -0
- package/tools/__pycache__/stall_check.cpython-314.pyc +0 -0
- package/tools/__pycache__/verify_dash.cpython-314.pyc +0 -0
- package/tools/__pycache__/verify_submit_encoding.cpython-314.pyc +0 -0
- package/ui/__pycache__/agents.cpython-314.pyc +0 -0
- package/ui/__pycache__/collectors.cpython-314.pyc +0 -0
- package/ui/__pycache__/config.cpython-314.pyc +0 -0
- package/ui/__pycache__/csrf.cpython-314.pyc +0 -0
- package/ui/__pycache__/handler.cpython-314.pyc +0 -0
- package/ui/__pycache__/render.cpython-314.pyc +0 -0
- package/ui/__pycache__/serve.cpython-314.pyc +0 -0
- package/ui/__pycache__/sse.cpython-314.pyc +0 -0
- package/ui/api/__pycache__/__init__.cpython-314.pyc +0 -0
- package/ui/api/__pycache__/submit.cpython-314.pyc +0 -0
- package/ui/api/__pycache__/tracker.cpython-314.pyc +0 -0
- package/ui/templates/dashboard.html +0 -1202
- /package/docs/{spikes → archive/spikes}/tiered-cognition/ACTIVATION.md +0 -0
- /package/docs/{spikes → archive/spikes}/tiered-cognition/DESIGN.md +0 -0
- /package/docs/{spikes → archive/spikes}/tiered-cognition/FINDINGS.md +0 -0
- /package/docs/{spikes → archive/spikes}/tiered-cognition/aesop-cognition.example.md +0 -0
- /package/docs/{spikes → archive/spikes}/tiered-cognition/force-model-policy.merged.mjs +0 -0
- /package/docs/{spikes → archive/spikes}/tiered-cognition/strip-tools-hook.mjs +0 -0
package/docs/README.md
CHANGED
|
@@ -1,44 +1,193 @@
|
|
|
1
|
-
# Aesop Documentation
|
|
1
|
+
# Aesop Documentation
|
|
2
2
|
|
|
3
|
-
Aesop is a fable-fleet orchestration harness for Claude Code. It runs fast, cheap delivery waves: parallel Haiku agents,
|
|
3
|
+
Aesop is a fable-fleet orchestration harness for Claude Code. It runs fast, cheap delivery waves: parallel Haiku agents, durable state, observable machinery, security gates.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Adopter Journey (Start Here)
|
|
8
|
+
|
|
9
|
+
If you're new to Aesop, follow this 4-stage path:
|
|
10
|
+
|
|
11
|
+
### Stage 1: Install
|
|
12
|
+
**[INSTALL.md](INSTALL.md)** — Prerequisites, `npx` scaffold, what gets created
|
|
13
|
+
|
|
14
|
+
- System requirements (Claude Code CLI, Git, Bash, Node.js, Python)
|
|
15
|
+
- Quick-start: `npx @matt82198/aesop@beta my-fleet`
|
|
16
|
+
- Manual setup for development (git clone)
|
|
17
|
+
- Pre-push hook installation
|
|
18
|
+
|
|
19
|
+
### Stage 2: Configure
|
|
20
|
+
**[CONFIGURE.md](CONFIGURE.md)** — aesop.config.json, repos, ports, brain root
|
|
21
|
+
|
|
22
|
+
- Field reference (`aesopRoot`, `braindRoot`, `repos`, `dashboardPort`, `dashboardOrigin`)
|
|
23
|
+
- Example configurations (single repo, microservices, Windows paths)
|
|
24
|
+
- Security notes (git-ignore config, no secrets in config)
|
|
25
|
+
- Environment variables
|
|
6
26
|
|
|
7
|
-
|
|
27
|
+
### Stage 3: First Wave
|
|
28
|
+
**[FIRST-WAVE.md](FIRST-WAVE.md)** — Run `/power` then `/buildsystem` end-to-end
|
|
29
|
+
|
|
30
|
+
- What to expect from each phase (rank → dispatch → verify → close)
|
|
31
|
+
- Monitoring (dashboard, TUI, logs)
|
|
32
|
+
- When agents hang (watchdog protocol, retry cap)
|
|
33
|
+
- Common Q&A (wave duration, cost, cancellation, failure handling)
|
|
34
|
+
|
|
35
|
+
### Stage 4: Concepts
|
|
36
|
+
**[CONCEPTS.md](CONCEPTS.md)** — Dispatch model, cost, state, security, governance
|
|
37
|
+
|
|
38
|
+
- The wave cycle at a glance
|
|
39
|
+
- Dispatch model (Haiku-first subagents, cost model, patterns)
|
|
40
|
+
- State & checkpointing (STATE.md, BUILDLOG.md, durable recovery)
|
|
41
|
+
- Security gates (secret-scan, branch discipline)
|
|
42
|
+
- Governance (single-writer files, heartbeat protocol)
|
|
43
|
+
- Reliability core (inputs always produce outputs, pride bar)
|
|
44
|
+
- Links to all deep-dive reference docs
|
|
8
45
|
|
|
9
46
|
---
|
|
10
47
|
|
|
11
|
-
##
|
|
48
|
+
## System Architecture
|
|
12
49
|
|
|
13
|
-
|
|
50
|
+
**[ARCHITECTURE.md](ARCHITECTURE.md)** — Visual flow diagram + component overview
|
|
51
|
+
|
|
52
|
+
- Mermaid diagram: orchestrator → parallel fleet → merge train → checkpoint → audit → next backlog
|
|
53
|
+
- Component breakdown (watchdog, monitor, dashboard, durable state)
|
|
54
|
+
- Cost model and scaling characteristics
|
|
55
|
+
- Security model (pre-push hook + GitHub branch protection)
|
|
56
|
+
|
|
57
|
+
---
|
|
14
58
|
|
|
15
|
-
##
|
|
59
|
+
## Deep-Dive Reference Docs
|
|
16
60
|
|
|
17
|
-
|
|
18
|
-
- [RELIABILITY.md](RELIABILITY.md) — Reliability core: never wait, inputs always produce outputs, pride bar for completion
|
|
19
|
-
- [CHECKPOINTING.md](CHECKPOINTING.md) — Durable STATE.md/BUILDLOG.md lifecycle, recovery on resume, log rotation patterns
|
|
20
|
-
- [SCRIPTS-POLICY.md](SCRIPTS-POLICY.md) — Local-only execution, shared script library, task-local vs. reusable heuristics
|
|
21
|
-
- [DISPATCH-MODEL.md](DISPATCH-MODEL.md) — Fable/Haiku orchestration patterns and cost calculations
|
|
22
|
-
- [GOVERNANCE.md](GOVERNANCE.md) — Single-instance loops, single-writer files, heartbeat protocol, security gates
|
|
61
|
+
Once you've completed the adopter journey, use these for operational reference:
|
|
23
62
|
|
|
24
|
-
|
|
63
|
+
### Wave Cycle & Orchestration
|
|
64
|
+
- **[HOW-THE-LOOP-WORKS.md](HOW-THE-LOOP-WORKS.md)** — Concrete walkthrough of one complete `/buildsystem` wave cycle (rank → fan-out → verify → merge → close)
|
|
65
|
+
|
|
66
|
+
### Dispatch & Cost
|
|
67
|
+
- **[DISPATCH-MODEL.md](DISPATCH-MODEL.md)** — Haiku-first subagent dispatch, cost analysis, patterns (fan-out, sequential, hierarchical)
|
|
68
|
+
|
|
69
|
+
### State Management & Recovery
|
|
70
|
+
- **[CHECKPOINTING.md](CHECKPOINTING.md)** — STATE.md and BUILDLOG.md lifecycle, recovery on resume, log rotation patterns
|
|
71
|
+
|
|
72
|
+
### Foundational Principles
|
|
73
|
+
- **[CARDINAL-RULES.md](CARDINAL-RULES.md)** — 10 foundational principles (dispatch model, cost, subagent discipline, TDD, reliability, orchestrator isolation, orchestrator focus, durable handoff, control files, security & version control)
|
|
74
|
+
|
|
75
|
+
### Operational Governance
|
|
76
|
+
- **[GOVERNANCE.md](GOVERNANCE.md)** — Single-instance loops, single-writer files, heartbeat protocol, inbox pattern, AUTO/PROPOSE action tiers
|
|
77
|
+
|
|
78
|
+
### Reliability Guarantees
|
|
79
|
+
- **[RELIABILITY.md](RELIABILITY.md)** — Reliability core (inputs always produce outputs, no silent waits, pride bar for completion), failure scenarios, recovery patterns
|
|
80
|
+
|
|
81
|
+
### Security & Hooks
|
|
82
|
+
- **[HOOK-INSTALL.md](HOOK-INSTALL.md)** — Install and customize `hooks/pre-push-policy.sh` (branch discipline, secret-scan enforcement at push time)
|
|
83
|
+
|
|
84
|
+
### Team Onboarding
|
|
85
|
+
- **[MEMORY-TEMPLATE.md](MEMORY-TEMPLATE.md)** — Canonical format for team memory and facts (to be stored in `~/.claude/MEMORY.md`)
|
|
86
|
+
|
|
87
|
+
### Behavioral Review Checklist
|
|
88
|
+
- **[BEHAVIORAL-PR-REVIEW.md](BEHAVIORAL-PR-REVIEW.md)** — Checklist for reviewing PRs that modify rules, policies, or orchestration behavior
|
|
89
|
+
|
|
90
|
+
### Operational Guides
|
|
91
|
+
- **[FORENSICS.md](FORENSICS.md)** — Reconstruct agent failures using `tools/agent-forensics.sh`; make agent behavior git-debuggable
|
|
92
|
+
- **[RESTORE.md](RESTORE.md)** — Reconstitute Aesop & fleet on a new machine from git + watchdog backups
|
|
93
|
+
- **[PUBLISHING.md](PUBLISHING.md)** — Release Aesop to npm using GitHub Actions with OIDC trusted publishing
|
|
94
|
+
- **[av-resilience.md](av-resilience.md)** — Antivirus and behavioral-engine resilience patterns for reliable agent execution
|
|
95
|
+
|
|
96
|
+
### Lessons & Case Studies
|
|
97
|
+
- **[autonomous-swe.md](autonomous-swe.md)** — The 0.1.0-rc.1 milestone told honestly: what "autonomous SWE" means here (a fleet running the wave loop under a human who owns the outward gates), the committed evidence behind each claim (held-out benchmark, verified audit, proven kill-switch, reproducible package), and the limits the project owns
|
|
98
|
+
- **[case-study-portfolio.md](case-study-portfolio.md)** — How Aesop built its own portfolio site; full audit trail and cost breakdown
|
|
99
|
+
- **[SCRIPTS-POLICY.md](SCRIPTS-POLICY.md)** — Local-only execution, shared script library (`~/scripts`), task-local vs. reusable heuristics
|
|
100
|
+
|
|
101
|
+
---
|
|
25
102
|
|
|
26
|
-
|
|
27
|
-
- [MEMORY-TEMPLATE.md](MEMORY-TEMPLATE.md) — Canonical index format and structure for team memory & facts
|
|
103
|
+
## Quick Index by Use Case
|
|
28
104
|
|
|
29
|
-
|
|
30
|
-
|
|
105
|
+
**I'm setting up Aesop for the first time**
|
|
106
|
+
→ [INSTALL.md](INSTALL.md) → [CONFIGURE.md](CONFIGURE.md) → [FIRST-WAVE.md](FIRST-WAVE.md)
|
|
31
107
|
|
|
32
|
-
|
|
33
|
-
- [
|
|
108
|
+
**I want to understand the cost model**
|
|
109
|
+
→ [DISPATCH-MODEL.md](DISPATCH-MODEL.md) or [HOW-THE-LOOP-WORKS.md](HOW-THE-LOOP-WORKS.md#why-its-fast--cheap)
|
|
34
110
|
|
|
35
|
-
|
|
36
|
-
|
|
111
|
+
**I want to know what's actually proven vs. claimed (the rc.1 milestone)**
|
|
112
|
+
→ [autonomous-swe.md](autonomous-swe.md)
|
|
37
113
|
|
|
38
|
-
|
|
39
|
-
|
|
114
|
+
**I need to understand how state survives a crash**
|
|
115
|
+
→ [CHECKPOINTING.md](CHECKPOINTING.md)
|
|
116
|
+
|
|
117
|
+
**I'm reviewing a PR that changes orchestration behavior**
|
|
118
|
+
→ [BEHAVIORAL-PR-REVIEW.md](BEHAVIORAL-PR-REVIEW.md)
|
|
119
|
+
|
|
120
|
+
**An agent failed and I need to debug it**
|
|
121
|
+
→ [FORENSICS.md](FORENSICS.md)
|
|
122
|
+
|
|
123
|
+
**I need to set up Aesop on a new machine after a wipe**
|
|
124
|
+
→ [RESTORE.md](RESTORE.md)
|
|
125
|
+
|
|
126
|
+
**I want to release a new version of Aesop**
|
|
127
|
+
→ [PUBLISHING.md](PUBLISHING.md)
|
|
128
|
+
|
|
129
|
+
**I'm experiencing reliability issues**
|
|
130
|
+
→ [RELIABILITY.md](RELIABILITY.md) or [GOVERNANCE.md](GOVERNANCE.md)
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Architecture Diagram (Quick Reference)
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
Ranked Backlog
|
|
138
|
+
↓
|
|
139
|
+
Orchestrator (main thread)
|
|
140
|
+
↓
|
|
141
|
+
Parallel Haiku Fleet (worktrees)
|
|
142
|
+
[test] [build] [docs] [ui] ...
|
|
143
|
+
↓
|
|
144
|
+
Watchdog (heartbeat + respawn)
|
|
145
|
+
↓
|
|
146
|
+
Integration Merge Train
|
|
147
|
+
↓
|
|
148
|
+
Checkpoint (STATE.md + BUILDLOG.md)
|
|
149
|
+
↓
|
|
150
|
+
Closing Audit (findings)
|
|
151
|
+
↓
|
|
152
|
+
Monitor + Dashboard (signals)
|
|
153
|
+
↓
|
|
154
|
+
Next Backlog (feedback loop)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
See [ARCHITECTURE.md](ARCHITECTURE.md) for the full diagram and component breakdown.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Quick Answers
|
|
162
|
+
|
|
163
|
+
**Q: How do I start a wave?**
|
|
164
|
+
A: Type `/power` to prime your orchestrator brain, then `/buildsystem` to start a wave cycle. See [FIRST-WAVE.md](FIRST-WAVE.md).
|
|
165
|
+
|
|
166
|
+
**Q: How much does a wave cost?**
|
|
167
|
+
A: ~$0.03–$0.05 USD (1 Opus orchestrator + 5–8 Haiku agents). See [DISPATCH-MODEL.md](DISPATCH-MODEL.md).
|
|
168
|
+
|
|
169
|
+
**Q: What if an agent hangs?**
|
|
170
|
+
A: The watchdog detects it (>200s idle), respawns automatically (up to 3 retries), then surfaces to you if still stuck. See [CARDINAL-RULES.md](CARDINAL-RULES.md).
|
|
171
|
+
|
|
172
|
+
**Q: How do I add my repos?**
|
|
173
|
+
A: Edit `aesop.config.json` and add paths to `repos` array. See [CONFIGURE.md](CONFIGURE.md).
|
|
174
|
+
|
|
175
|
+
**Q: Do agents work in the primary tree?**
|
|
176
|
+
A: No. Each agent works in its own sibling worktree (via `git worktree add`). See [ARCHITECTURE.md](ARCHITECTURE.md).
|
|
177
|
+
|
|
178
|
+
**Q: How do I set up secret-scan?**
|
|
179
|
+
A: The pre-push hook is auto-installed. Customize `tools/secret_scan.py` with your rules. See [HOOK-INSTALL.md](HOOK-INSTALL.md).
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Contributing
|
|
184
|
+
|
|
185
|
+
Aesop is **source-available** under the PolyForm Strict License 1.0.0, which doesn't permit modification or redistribution — so outside code patches can't be merged as contributions. **Issues, bug reports, and discussion are warmly welcome**, and are the best way to help. The repo develops itself via its own `/buildsystem` loop; code changes are made by the maintainer at their discretion, or by prior arrangement.
|
|
186
|
+
|
|
187
|
+
See [CONTRIBUTING.md](../CONTRIBUTING.md) for details and [CARDINAL-RULES.md](CARDINAL-RULES.md) for core principles.
|
|
188
|
+
|
|
189
|
+
---
|
|
40
190
|
|
|
41
|
-
##
|
|
191
|
+
## License
|
|
42
192
|
|
|
43
|
-
- [
|
|
44
|
-
- [av-resilience.md](av-resilience.md) — Antivirus & behavioral-engine resilience patterns for reliable agent execution
|
|
193
|
+
**Source-available** under the [PolyForm Strict License 1.0.0](../LICENSE). Use is permitted for a permitted purpose; **modification and redistribution are not**. See [`LICENSE`](../LICENSE) for full terms.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Releasing Aesop
|
|
2
|
+
|
|
3
|
+
This document covers the release process for Aesop: version bumping, git tagging, GitHub release creation, and npm publishing with beta dist-tag support.
|
|
4
|
+
|
|
5
|
+
## Release Types
|
|
6
|
+
|
|
7
|
+
Aesop follows semantic versioning: `MAJOR.MINOR.PATCH[-PRERELEASE]`
|
|
8
|
+
|
|
9
|
+
- **Stable (0.1.0)**: Core orchestration engine stable; backward-compatible API
|
|
10
|
+
- **Beta (0.1.0-beta.N)**: Pre-release builds; may have breaking changes; uses `@beta` npm dist-tag
|
|
11
|
+
- **Patch (0.1.0-beta.N+M)**: Fixes within a beta series; increments local version only
|
|
12
|
+
|
|
13
|
+
## Full Release Workflow
|
|
14
|
+
|
|
15
|
+
### 1. Version Bump (`npm version`)
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# From repo root, on a `release/*` or `docs/*` branch (never main)
|
|
19
|
+
npm version minor # for 0.1.0 → 0.2.0 (stable)
|
|
20
|
+
npm version prerelease # for 0.1.0 → 0.1.1-rc.0 (next beta)
|
|
21
|
+
npm version patch # for 0.1.0-beta.4 → 0.1.0-beta.5 (current beta)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
This command:
|
|
25
|
+
- Updates `package.json` version field
|
|
26
|
+
- Creates a git commit `"v<version>"` (only if git is clean)
|
|
27
|
+
- Creates an annotated git tag `v<version>`
|
|
28
|
+
- Does NOT push (safe for local preview)
|
|
29
|
+
|
|
30
|
+
**Pre-check**: Ensure:
|
|
31
|
+
- `package.json` files in repo (root + `ui/web/`) are in sync
|
|
32
|
+
- No uncommitted changes (git status clean)
|
|
33
|
+
- `dist/` is up-to-date (npm run build if needed)
|
|
34
|
+
|
|
35
|
+
### 2. Verify the Tag Locally
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Check the tag was created and points to the right commit
|
|
39
|
+
git tag -l | tail -5
|
|
40
|
+
git show v0.1.0-beta.5
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 3. Push to Git Remote
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Push the branch and the new tag
|
|
47
|
+
git push origin docs/wave15-currency
|
|
48
|
+
git push origin v0.1.0-beta.5
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This makes the tag available for GitHub release creation.
|
|
52
|
+
|
|
53
|
+
### 4. Create GitHub Release
|
|
54
|
+
|
|
55
|
+
GitHub Actions CI automatically creates a release from the tag when pushed. Or manually via GitHub web UI:
|
|
56
|
+
|
|
57
|
+
1. Go to [Releases](https://github.com/matt82198/aesop/releases)
|
|
58
|
+
2. Click "Create a new release"
|
|
59
|
+
3. Select `v0.1.0-beta.5` from the tag dropdown
|
|
60
|
+
4. Title: `Aesop 0.1.0-beta.5`
|
|
61
|
+
5. Body (auto-generated or manual):
|
|
62
|
+
```markdown
|
|
63
|
+
## What's New
|
|
64
|
+
- State-sourced SQLite backing store (Wave-15)
|
|
65
|
+
- Self-building stats via tools/self_stats.py
|
|
66
|
+
- MCP fleet server integration
|
|
67
|
+
- Alert webhook bridge
|
|
68
|
+
- Onboarding wizard (interactive scaffolder)
|
|
69
|
+
- Healthcheck skill for liveness probes
|
|
70
|
+
|
|
71
|
+
## Install
|
|
72
|
+
```bash
|
|
73
|
+
npm install @matt82198/aesop@beta
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
See [CHANGELOG.md](CHANGELOG.md) for the full list.
|
|
77
|
+
```
|
|
78
|
+
6. **For beta releases**: Check "This is a pre-release"
|
|
79
|
+
7. Click "Publish release"
|
|
80
|
+
|
|
81
|
+
### 5. Publish to npm
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Login (if not already authenticated)
|
|
85
|
+
npm login
|
|
86
|
+
|
|
87
|
+
# For stable releases (0.1.0)
|
|
88
|
+
npm publish --access public
|
|
89
|
+
|
|
90
|
+
# For beta releases (0.1.0-beta.5)
|
|
91
|
+
npm publish --access public --tag beta
|
|
92
|
+
|
|
93
|
+
# Verify the tag was set
|
|
94
|
+
npm view @matt82198/aesop@0.1.0-beta.5 | grep dist-tags
|
|
95
|
+
# Should output:
|
|
96
|
+
# 'dist-tags': { latest: '0.1.0', beta: '0.1.0-beta.5' }
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Pre-check before publish**:
|
|
100
|
+
- `npm run test:all` passes (all test suites green)
|
|
101
|
+
- `npm run build` succeeds in ui/web/
|
|
102
|
+
- `dist/` is committed and up-to-date
|
|
103
|
+
- Changelog is current (CHANGELOG.md updated)
|
|
104
|
+
- No local uncommitted changes
|
|
105
|
+
|
|
106
|
+
## Verification Checklist
|
|
107
|
+
|
|
108
|
+
After publishing, verify the release is live:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Check npm registry
|
|
112
|
+
npm view @matt82198/aesop@latest # Should show latest stable
|
|
113
|
+
npm view @matt82198/aesop@beta # Should show latest beta
|
|
114
|
+
|
|
115
|
+
# Install in a test dir and verify
|
|
116
|
+
mkdir /tmp/aesop-test && cd /tmp/aesop-test
|
|
117
|
+
npm install @matt82198/aesop@beta
|
|
118
|
+
node -e "console.log(require('./package.json').dependencies)"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Rollback (if needed)
|
|
122
|
+
|
|
123
|
+
If a release has a critical bug:
|
|
124
|
+
|
|
125
|
+
1. **npm**: Deprecate the bad version
|
|
126
|
+
```bash
|
|
127
|
+
npm deprecate @matt82198/aesop@0.1.0-beta.5 "Critical bug; use @beta instead"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
2. **GitHub**: Delete the release from the web UI (Releases → click release → Delete)
|
|
131
|
+
|
|
132
|
+
3. **Git**: Delete the tag locally and remotely
|
|
133
|
+
```bash
|
|
134
|
+
git tag -d v0.1.0-beta.5
|
|
135
|
+
git push origin :refs/tags/v0.1.0-beta.5
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
4. **Branch**: Reset the version bump commit (if desired)
|
|
139
|
+
```bash
|
|
140
|
+
git reset --soft HEAD~1
|
|
141
|
+
# Edit package.json back to previous version
|
|
142
|
+
git add package.json
|
|
143
|
+
git commit -m "Revert: v0.1.0-beta.5 (critical bug)"
|
|
144
|
+
git push origin <branch>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Notes
|
|
148
|
+
|
|
149
|
+
- **The `@latest` dist-tag** is reserved for stable releases (no prerelease suffix). Beta releases stay under `@beta`.
|
|
150
|
+
- **Semver gaps**: If beta.4 was skipped, beta.5 jumps directly. No backfilling needed.
|
|
151
|
+
- **Prereleases don't block stable**: Users on `npm install @matt82198/aesop` get the latest stable, not the latest beta.
|
|
152
|
+
- **Local version suffix**: If you need to publish a local build for testing, use `0.1.0-beta.5+local.1` (won't be published to npm, only for local installs).
|
|
153
|
+
|
|
154
|
+
## References
|
|
155
|
+
|
|
156
|
+
- [npm version](https://docs.npmjs.com/cli/v8/commands/npm-version)
|
|
157
|
+
- [npm publish](https://docs.npmjs.com/cli/v8/commands/npm-publish)
|
|
158
|
+
- [npm dist-tags](https://docs.npmjs.com/cli/v8/commands/npm-dist-tag)
|
|
159
|
+
- [Semantic Versioning](https://semver.org/)
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Tiered Cognition/Execution — spike + staged wave-12 artifact
|
|
2
2
|
|
|
3
|
-
> **STATUS:
|
|
4
|
-
> `~/.claude/settings.json` or `~/.claude/hooks/`. The live model-policy hook
|
|
5
|
-
> (`force-haiku-subagents.mjs`) is untouched and still governs the fleet.
|
|
3
|
+
> **STATUS: CANCELLED 2026-07-14** after A/B testing measured 4.6x weighted cost for identical quality (see MEMORY.md wave-11 entry). Kept for reference; do not activate. Nothing in this directory is wired into `~/.claude/settings.json` or `~/.claude/hooks/`. The live model-policy hook (`force-haiku-subagents.mjs`) is untouched and still governs the fleet.
|
|
6
4
|
|
|
7
5
|
## Contents
|
|
8
6
|
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# It shipped itself: the 0.1.0-rc.1 milestone, told honestly
|
|
2
|
+
|
|
3
|
+
Aesop reached its first release candidate — `0.1.0-rc.1` — by running its own
|
|
4
|
+
`/buildsystem` wave loop across the backlog that produced it: rank work, fan out
|
|
5
|
+
parallel Haiku workers on file-disjoint domains, watchdog them, verify merges,
|
|
6
|
+
close with an audit that seeds the next wave. This document is the honest account
|
|
7
|
+
of what that milestone is and is not. Aesop's entire premise is candor, so the
|
|
8
|
+
caveats here are load-bearing, not fine print.
|
|
9
|
+
|
|
10
|
+
## What "autonomous SWE" means here
|
|
11
|
+
|
|
12
|
+
It means something specific and narrow:
|
|
13
|
+
|
|
14
|
+
> The **fleet** autonomously runs the wave loop — audit → parallel build → verify →
|
|
15
|
+
> merge-train — under a **human** who sets the goals and owns the outward gates.
|
|
16
|
+
|
|
17
|
+
Concretely:
|
|
18
|
+
|
|
19
|
+
- **The fleet drives the loop.** Ranking, dispatch, worktree isolation, verification,
|
|
20
|
+
and the merge train run without a human hand-writing the code in each domain.
|
|
21
|
+
- **A human owns the outward gates.** npm publishes, tagged releases, and git history
|
|
22
|
+
rewrites are all human-approved. The fleet proposes; a person disposes at the
|
|
23
|
+
repo boundary.
|
|
24
|
+
- **The dispatch core is out-of-repo.** The actual model calls happen inside the
|
|
25
|
+
Claude Code harness, which is *not* part of this repository. What Aesop ships is
|
|
26
|
+
the machinery *around* that core — orchestration rules, guardrails, durable state,
|
|
27
|
+
the dashboard, and tooling.
|
|
28
|
+
|
|
29
|
+
What it is **not**: it is not an unsupervised agent, not a hosted control plane, and
|
|
30
|
+
not AGI. Calling it "autonomous SWE" is accurate only with those boundaries stated.
|
|
31
|
+
Drop them and the phrase becomes hype.
|
|
32
|
+
|
|
33
|
+
## The evidence, and the honest limit on each
|
|
34
|
+
|
|
35
|
+
The milestone's real differentiator is not that an AI wrote code — plenty of tools do
|
|
36
|
+
that. It is that the credibility and safety claims ship with **committed artifacts a
|
|
37
|
+
skeptical reader can check**, each paired with the limit the project already owns.
|
|
38
|
+
|
|
39
|
+
### 1. Haiku is good enough for the judgment work a fleet does
|
|
40
|
+
|
|
41
|
+
The harness's whole cost model depends on cheap Haiku workers being adequate for
|
|
42
|
+
subagent judgment, not just extraction. That was long asserted from the fleet grading
|
|
43
|
+
its own output — agents vouching for agents, recorded in a private memory file. Not
|
|
44
|
+
evidence an outsider can check.
|
|
45
|
+
|
|
46
|
+
`bench/` plus `tools/bench_runner.py` replace that with a **held-out benchmark scored
|
|
47
|
+
by plain Python string/regex matching — no model, no agent in the grading loop**.
|
|
48
|
+
Across a combined **39 judgment tasks** (spanning bug-in-diff, finding-inflation,
|
|
49
|
+
acceptance-criteria coverage, severity calibration, root-cause-from-trace,
|
|
50
|
+
refactor-equivalence, and security-spotting):
|
|
51
|
+
|
|
52
|
+
| Model | Score | Cost (per-token) |
|
|
53
|
+
| ------ | ----- | ---------------- |
|
|
54
|
+
| Haiku | **39/39 (100%)** | ~1/3 of Opus |
|
|
55
|
+
| Sonnet | 39/39 (100%) | — |
|
|
56
|
+
| Opus | 38/39 (97%) | baseline |
|
|
57
|
+
|
|
58
|
+
On the single task any model missed — a severity call — it was *Opus* that erred, not
|
|
59
|
+
Haiku. Full dated runs: [`bench/results/`](../bench/results/).
|
|
60
|
+
|
|
61
|
+
**Honest limits (the project's own words):**
|
|
62
|
+
|
|
63
|
+
- **Curated, not sampled.** The tasks were constructed by reasoning about fleet work,
|
|
64
|
+
not drawn from real fleet transcripts. Selection bias remains.
|
|
65
|
+
- **N=39 is bigger, not statistically large.** Treat this as directional evidence for
|
|
66
|
+
this workload, not a universal law.
|
|
67
|
+
- **It measures a floor, not the frontier.** The benchmark found *no* task where Opus
|
|
68
|
+
beats Haiku. So the defensible claim is bounded: *Haiku is sufficient for the
|
|
69
|
+
judgment shapes measured here*, **not** *Haiku equals Opus at the reasoning
|
|
70
|
+
frontier*. If tasks exist where Opus's depth is worth 3×, this set hasn't captured
|
|
71
|
+
them.
|
|
72
|
+
- **Cost is the token-price ratio**, not measured wall-clock latency.
|
|
73
|
+
|
|
74
|
+
### 2. Audits stop hallucinating findings
|
|
75
|
+
|
|
76
|
+
An earlier wave (wave-24) exposed a real failure mode: an all-Haiku audit reported
|
|
77
|
+
four P0 issues, **zero of which were real**. The release audit for this RC was run
|
|
78
|
+
with **adversarial verification of every finding** and closed with **0 hallucinated
|
|
79
|
+
issues**.
|
|
80
|
+
|
|
81
|
+
**Honest limit:** it is an internal audit. No third party has re-run it.
|
|
82
|
+
|
|
83
|
+
### 3. The kill-switch actually aborts a wave
|
|
84
|
+
|
|
85
|
+
A halt control is only worth the claim if it's proven. The fleet-wide kill-switch
|
|
86
|
+
([`tools/halt.py`](../tools/halt.py)) is wired into the **live dispatch path** and was
|
|
87
|
+
exercised end-to-end: a single signal **aborted a real wave with zero workers
|
|
88
|
+
spawned**.
|
|
89
|
+
|
|
90
|
+
**Honest limit:** it is operator-triggered — a manual brake a human pulls, not an
|
|
91
|
+
autonomous safety monitor that trips on its own.
|
|
92
|
+
|
|
93
|
+
### 4. A cost ceiling brakes runaway spend
|
|
94
|
+
|
|
95
|
+
A per-wave spend ceiling ([`tools/cost_ceiling.py`](../tools/cost_ceiling.py)) halts
|
|
96
|
+
dispatch when the configured budget is exceeded.
|
|
97
|
+
|
|
98
|
+
**Honest limit:** it brakes against a **configured** ceiling; it is **not yet tied to
|
|
99
|
+
live token spend**. It's a guardrail you set, not a live meter.
|
|
100
|
+
|
|
101
|
+
### 5. The package installs and reproduces from a clean clone
|
|
102
|
+
|
|
103
|
+
The npm tarball is a **~409 kB** package (measured via `npm pack`) that **builds and
|
|
104
|
+
validates from a fresh clone in CI** — the `reproduce` workflow proves the tarball is
|
|
105
|
+
self-contained. The dashboard views shipped this RC (Wave PR Board, Agent Inspector)
|
|
106
|
+
were **browser-proven** with Playwright. Steps to reproduce offline:
|
|
107
|
+
[docs/reproduce.md](./reproduce.md).
|
|
108
|
+
|
|
109
|
+
**Honest limit:** the offline reproduce job runs the test suites and the benchmark
|
|
110
|
+
*scorer*; it does **not** run real-model benchmark calls or the Playwright browser
|
|
111
|
+
proofs, which need local setup and (for the models) API keys.
|
|
112
|
+
|
|
113
|
+
## The limits the project owns, in one place
|
|
114
|
+
|
|
115
|
+
None of these are hidden, because hiding them would betray the one thing the project is
|
|
116
|
+
actually selling — candor:
|
|
117
|
+
|
|
118
|
+
1. **The benchmark is curated (N=39), not transcript-sampled.** Directional, not
|
|
119
|
+
definitive; it maps a floor, not the frontier.
|
|
120
|
+
2. **The real dispatch core is out-of-repo.** It runs in the Claude Code harness. This
|
|
121
|
+
package is the harness around it, not a turnkey autonomous runtime.
|
|
122
|
+
3. **No third party has reproduced any of it yet.** The artifacts are committed so a
|
|
123
|
+
skeptic can — that is transparency, not a substitute for independent replication.
|
|
124
|
+
4. **The cost ceiling is a brake, not a live meter.** It enforces a configured budget,
|
|
125
|
+
not measured spend.
|
|
126
|
+
5. **It is local-first.** State lives in git and local files; there is no hosted
|
|
127
|
+
control plane. Team scale beyond one machine is on the roadmap, not shipped.
|
|
128
|
+
6. **It is a release candidate.** APIs, config, and dashboard contracts may still shift
|
|
129
|
+
before 0.1.0. Pin the exact version if you need stability.
|
|
130
|
+
|
|
131
|
+
## Where to check the receipts
|
|
132
|
+
|
|
133
|
+
- [`bench/results/`](../bench/results/) — dated benchmark runs (v1 extraction, v2 & v3
|
|
134
|
+
judgment), each with its own honest interpretation and limits.
|
|
135
|
+
- [`bench/README.md`](../bench/README.md) — why the benchmark exists and how the scoring
|
|
136
|
+
removes agents from the grading loop.
|
|
137
|
+
- [`tools/halt.py`](../tools/halt.py), [`tools/cost_ceiling.py`](../tools/cost_ceiling.py)
|
|
138
|
+
— the kill-switch and cost-ceiling implementations.
|
|
139
|
+
- [docs/reproduce.md](./reproduce.md) — reproduce the tests and benchmark scorer from a
|
|
140
|
+
clean clone.
|
|
141
|
+
- [RELEASE-NOTES.md](../RELEASE-NOTES.md#honest-limits) — release-level "Honest limits".
|
|
142
|
+
- [CHANGELOG.md](../CHANGELOG.md) — the full `0.1.0-rc.1` entry.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
The one-line version: **the fleet built, tested, audited, and benchmarked its way to a
|
|
147
|
+
shippable release candidate, and every claim about that comes with a committed artifact
|
|
148
|
+
and a stated limit.** That combination — self-built *and* honest about the seams — is
|
|
149
|
+
the milestone.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Case Study: Portfolio Site Build with Aesop
|
|
2
|
+
|
|
3
|
+
## What Happened (Timeline)
|
|
4
|
+
|
|
5
|
+
| Time | Event | Duration |
|
|
6
|
+
|------|-------|----------|
|
|
7
|
+
| 17:09 | User prompt: "build me a portfolio site" | — |
|
|
8
|
+
| 17:09–17:20 | 6 discovery scouts (GitHub API, Medium, LinkedIn, Reddit ×2, Playwright fallback, repo deep-dive) run in parallel; 4 ranked decision points surfaced | 11 min |
|
|
9
|
+
| 17:20–17:24 | User answers 4 prioritization questions | 4 min |
|
|
10
|
+
| 17:24–17:36 | 10 Haiku agents (scaffold + 8 section builders on file-disjoint Astro components + integrator) execute | 12 min |
|
|
11
|
+
| 17:36–17:37 | 9th section added from late Reddit data; Astro build green in 914ms | 1 min |
|
|
12
|
+
| 17:37–17:40 | Playwright screenshot proof round 1: CSS 404 detected (styles linked as `/src/` instead of `/dist/`) | 3 min |
|
|
13
|
+
| 17:40–17:42 | Repair agent fixes CSS paths; proof round 2 validates fix | 2 min |
|
|
14
|
+
| 17:42–17:48 | GitHub agent: secret-scan (10,066 files clean), create public repo, merge PR #1 | 6 min |
|
|
15
|
+
| 18:04 | GitHub Pages deployed and live at https://matt82198.github.io/ (verified 200 status) | **55 min total** |
|
|
16
|
+
|
|
17
|
+
## The Architecture
|
|
18
|
+
|
|
19
|
+
**Parallel discovery with verified facts only**: Six independent scouts (HTTP fallback to Playwright for bot-blocked sites) collected portfolio inspiration, ranked by relevance; each returned structured data on a single contract. No hallucination—every section claim traces to a source.
|
|
20
|
+
|
|
21
|
+
**File-disjoint fan-out**: 8 section agents each owned one `.astro` component with zero file overlap; no merge conflicts, no serialization bottleneck. Integrator assembled in 12 minutes.
|
|
22
|
+
|
|
23
|
+
**Proof-driven QA**: Screenshot verification caught a real ship-blocker—styles in dist/ referenced `/src/` paths that vanished at build time. No visual inspection could have found this; Playwright proved it was broken, repair proved it was fixed.
|
|
24
|
+
|
|
25
|
+
**Gated ship**: Secret-scan gate (10,066 files) ran before public repo creation; zero credentials leaked. PR merged, Pages deploy triggered, liveness confirmed.
|
|
26
|
+
|
|
27
|
+
**Orchestrator final-catch**: Fable verified theme coherence across 9 sections after assembly; caught one color inconsistency and one missing accent variant before ship.
|
|
28
|
+
|
|
29
|
+
## What Failed (and Was Caught)
|
|
30
|
+
|
|
31
|
+
The site rendered unstyled in production. Astro build succeeded locally (914ms), but the distributed `.astro` component agents—writing styles inline—used `import` statements pointing to source paths. After minification and bundling into `/dist/`, those paths no longer existed. The site shipped with no CSS.
|
|
32
|
+
|
|
33
|
+
Playwright screenshot automation caught this in production-like conditions (rendering against the compiled bundle). A repair agent updated path resolution, regenerated the build, and Playwright proved the fix before merge. This is not a testing infrastructure story—this is proof automation as a first-class gate.
|
|
34
|
+
|
|
35
|
+
## Numbers
|
|
36
|
+
|
|
37
|
+
- **Wall-clock time**: 55 minutes (first prompt to live site)
|
|
38
|
+
- **Total agents used**: ~30 (6 scouts, 10 builders, 1 repair, 1 GitHub ops, 3 proof/integration, 9 audits)
|
|
39
|
+
- **Build fleet**: 10 Haiku agents (scaffold + 8 section builders + integrator)
|
|
40
|
+
- **Build time**: 12 minutes (including inter-agent coordination)
|
|
41
|
+
- **Sections delivered**: 9
|
|
42
|
+
- **Proof rounds**: 2 (CSS 404 caught in round 1; fix validated in round 2)
|
|
43
|
+
- **Ship-blockers caught**: 1 (CSS 404)
|
|
44
|
+
- **Files secret-scanned**: 10,066 (0 issues)
|
|
45
|
+
- **Subagent tokens**: ~328K
|
|
46
|
+
- **PR**: #1, merged
|
|
47
|
+
- **Deploy**: GitHub Pages, live 200 status
|
|
48
|
+
|
|
49
|
+
## How to Reproduce
|
|
50
|
+
|
|
51
|
+
1. Fork this repo or set up Aesop in your environment.
|
|
52
|
+
2. Run the [buildsystem skill](/skills/CLAUDE.md) for a portfolio project.
|
|
53
|
+
3. Provide 4–6 source URLs or inspiration topics; Aesop will dispatch 6 discovery scouts.
|
|
54
|
+
4. Approve the ranked backlog (user decision round).
|
|
55
|
+
5. Aesop dispatches the 10-agent build workflow in parallel on Astro or your framework.
|
|
56
|
+
6. Screenshot proof runs automatically; Aesop fixes any visual defects and re-proves.
|
|
57
|
+
7. Secret-scan gate runs; if clean, Aesop creates the public repo and merges the PR.
|
|
58
|
+
8. Pages (or your host) deploys automatically.
|
|
59
|
+
|
|
60
|
+
The 55-minute bound is achievable when discovery sources are web-accessible (not gated PDFs) and the component schema is well-defined (Astro's `.astro` files are ideal; monolithic templates require serialization).
|
|
61
|
+
|