@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.
Files changed (134) hide show
  1. package/CHANGELOG.md +187 -5
  2. package/LICENSE +66 -21
  3. package/README.md +143 -23
  4. package/aesop.config.example.json +14 -1
  5. package/bin/CLAUDE.md +42 -5
  6. package/bin/cli.js +479 -95
  7. package/daemons/CLAUDE.md +5 -2
  8. package/daemons/backup-fleet.sh +209 -51
  9. package/daemons/run-watchdog.sh +211 -62
  10. package/dash/dash-extra.mjs +73 -4
  11. package/dash/watchdog-gui.sh +41 -35
  12. package/docs/ARCHITECTURE.md +296 -0
  13. package/docs/CONCEPTS.md +254 -0
  14. package/docs/CONFIGURE.md +256 -0
  15. package/docs/FIRST-WAVE.md +276 -0
  16. package/docs/INSTALL.md +224 -0
  17. package/docs/README.md +176 -27
  18. package/docs/RELEASING.md +159 -0
  19. package/docs/archive/README.md +3 -0
  20. package/docs/{spikes → archive/spikes}/tiered-cognition/README.md +1 -3
  21. package/docs/autonomous-swe.md +149 -0
  22. package/docs/case-study-portfolio.md +61 -0
  23. package/docs/reproduce.md +121 -0
  24. package/docs/self-stats-data.json +11 -0
  25. package/docs/templates/FLEET-OPS-ANALYSIS.example.md +27 -0
  26. package/docs/templates/FLEET-OPS-RECOMMENDATIONS.example.md +24 -0
  27. package/docs/templates/PROPOSALS-LOG.example.md +64 -0
  28. package/hooks/CLAUDE.md +51 -0
  29. package/hooks/install-waveguard.sh +68 -0
  30. package/hooks/pre-commit-waveguard.sh +26 -0
  31. package/hooks/pre-push-policy.sh +253 -15
  32. package/mcp/CLAUDE.md +213 -0
  33. package/mcp/package.json +26 -0
  34. package/mcp/server.mjs +543 -0
  35. package/monitor/CHARTER.md +76 -110
  36. package/monitor/CLAUDE.md +3 -3
  37. package/monitor/collect-signals.mjs +218 -20
  38. package/package.json +17 -6
  39. package/scan/CLAUDE.md +30 -0
  40. package/scan/fleet-scan.example.mjs +292 -0
  41. package/skills/CLAUDE.md +1 -0
  42. package/skills/healthcheck/SKILL.md +44 -0
  43. package/state_store/CLAUDE.md +39 -0
  44. package/state_store/__init__.py +24 -0
  45. package/state_store/api.py +35 -0
  46. package/state_store/export.py +19 -0
  47. package/state_store/ingest.py +41 -0
  48. package/state_store/projections.py +126 -0
  49. package/state_store/store.py +197 -0
  50. package/tools/CLAUDE.md +37 -149
  51. package/tools/alert_bridge.py +453 -0
  52. package/tools/bench_runner.py +438 -0
  53. package/tools/buildlog.py +4 -7
  54. package/tools/ci_merge_wait.py +308 -14
  55. package/tools/common.py +62 -0
  56. package/tools/cost_ceiling.py +191 -0
  57. package/tools/dash.js +102 -0
  58. package/tools/doctor.js +220 -0
  59. package/tools/fleet_ledger.py +189 -17
  60. package/tools/fleet_prompt_extractor.py +134 -0
  61. package/tools/halt.py +172 -0
  62. package/tools/healthcheck.py +299 -0
  63. package/tools/heartbeat.py +4 -7
  64. package/tools/metrics_gate.py +8 -2
  65. package/tools/orchestrator_status.py +4 -9
  66. package/tools/reconcile.py +277 -0
  67. package/tools/rotate_logs.py +152 -62
  68. package/tools/scanner_selftest.py +28 -3
  69. package/tools/secret_scan.py +367 -91
  70. package/tools/self_stats.py +797 -0
  71. package/tools/session_usage_summary.py +198 -0
  72. package/tools/status.js +187 -0
  73. package/tools/svg_to_png.mjs +50 -0
  74. package/tools/transcript_replay.py +236 -0
  75. package/tools/transcript_timeline.py +184 -0
  76. package/tools/verify_agent_inspector.py +289 -0
  77. package/tools/verify_dash.py +361 -542
  78. package/tools/verify_prboard.py +344 -0
  79. package/tools/verify_submit_encoding.py +12 -4
  80. package/tools/watch.js +49 -0
  81. package/ui/CLAUDE.md +59 -41
  82. package/ui/agents.py +337 -34
  83. package/ui/api/submit.py +44 -5
  84. package/ui/api/tracker.py +15 -7
  85. package/ui/collectors.py +294 -52
  86. package/ui/config.py +31 -2
  87. package/ui/cost.py +355 -0
  88. package/ui/csrf.py +9 -4
  89. package/ui/handler.py +450 -12
  90. package/ui/render.py +26 -6
  91. package/ui/sse.py +114 -13
  92. package/ui/wave_prs.py +230 -0
  93. package/ui/web/dist/assets/index-0qQYnvMC.js +9 -0
  94. package/ui/web/dist/assets/index-BdIlFieV.css +1 -0
  95. package/ui/web/dist/index.html +14 -0
  96. package/monitor/.signal-state.json +0 -3
  97. package/monitor/ACTIONS.log +0 -1
  98. package/monitor/BRIEF.md +0 -24
  99. package/monitor/SIGNALS.json +0 -54
  100. package/tools/__pycache__/buildlog.cpython-314.pyc +0 -0
  101. package/tools/__pycache__/ci_merge_wait.cpython-314.pyc +0 -0
  102. package/tools/__pycache__/ensure_state.cpython-314.pyc +0 -0
  103. package/tools/__pycache__/eod_sweep.cpython-314.pyc +0 -0
  104. package/tools/__pycache__/fleet_ledger.cpython-314.pyc +0 -0
  105. package/tools/__pycache__/heartbeat.cpython-314.pyc +0 -0
  106. package/tools/__pycache__/inbox_drain.cpython-314.pyc +0 -0
  107. package/tools/__pycache__/launch_tui.cpython-314.pyc +0 -0
  108. package/tools/__pycache__/orchestrator_status.cpython-314.pyc +0 -0
  109. package/tools/__pycache__/power_selftest.cpython-314.pyc +0 -0
  110. package/tools/__pycache__/prepublish_scan.cpython-314.pyc +0 -0
  111. package/tools/__pycache__/rotate_logs.cpython-314.pyc +0 -0
  112. package/tools/__pycache__/scanner_selftest.cpython-314.pyc +0 -0
  113. package/tools/__pycache__/secret_scan.cpython-314.pyc +0 -0
  114. package/tools/__pycache__/stall_check.cpython-314.pyc +0 -0
  115. package/tools/__pycache__/verify_dash.cpython-314.pyc +0 -0
  116. package/tools/__pycache__/verify_submit_encoding.cpython-314.pyc +0 -0
  117. package/ui/__pycache__/agents.cpython-314.pyc +0 -0
  118. package/ui/__pycache__/collectors.cpython-314.pyc +0 -0
  119. package/ui/__pycache__/config.cpython-314.pyc +0 -0
  120. package/ui/__pycache__/csrf.cpython-314.pyc +0 -0
  121. package/ui/__pycache__/handler.cpython-314.pyc +0 -0
  122. package/ui/__pycache__/render.cpython-314.pyc +0 -0
  123. package/ui/__pycache__/serve.cpython-314.pyc +0 -0
  124. package/ui/__pycache__/sse.cpython-314.pyc +0 -0
  125. package/ui/api/__pycache__/__init__.cpython-314.pyc +0 -0
  126. package/ui/api/__pycache__/submit.cpython-314.pyc +0 -0
  127. package/ui/api/__pycache__/tracker.cpython-314.pyc +0 -0
  128. package/ui/templates/dashboard.html +0 -1202
  129. /package/docs/{spikes → archive/spikes}/tiered-cognition/ACTIVATION.md +0 -0
  130. /package/docs/{spikes → archive/spikes}/tiered-cognition/DESIGN.md +0 -0
  131. /package/docs/{spikes → archive/spikes}/tiered-cognition/FINDINGS.md +0 -0
  132. /package/docs/{spikes → archive/spikes}/tiered-cognition/aesop-cognition.example.md +0 -0
  133. /package/docs/{spikes → archive/spikes}/tiered-cognition/force-model-policy.merged.mjs +0 -0
  134. /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 Index
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, lower cost via Haiku-first dispatch and faster wall-clock via parallel 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
- **New to Aesop?** Start here: [HOW-THE-LOOP-WORKS.md](HOW-THE-LOOP-WORKS.md) — a walkthrough of one wave cycle and why it's productive.
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
- For deeper governance + operational rules, see the reference docs below.
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
- ## Quick Start
48
+ ## System Architecture
12
49
 
13
- - [HOW-THE-LOOP-WORKS.md](HOW-THE-LOOP-WORKS.md) — Concrete walkthrough of one `/buildsystem` wave (rank → fan out → verify → merge → close)
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
- ## Core Governance & Rules (Reference)
59
+ ## Deep-Dive Reference Docs
16
60
 
17
- - [CARDINAL-RULES.md](CARDINAL-RULES.md) Foundational operational principles (dispatch model, cost, subagent discipline, retry caps)
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
- ## The Five Pillars
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
- ### 1. Onboarding Templates
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
- ### 2. Policy Hooks
30
- - [HOOK-INSTALL.md](HOOK-INSTALL.md) Install and customize `hooks/pre-push-policy.sh` (branch/secret enforcement at push time)
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
- ### 3. Behavioral PRs
33
- - [BEHAVIORAL-PR-REVIEW.md](BEHAVIORAL-PR-REVIEW.md) — Checklist for reviewing PRs that modify rules, policies, or orchestration behavior
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
- ### 4. Forensics (Git-Bisectable Agent Debugging)
36
- - [FORENSICS.md](FORENSICS.md) — Reconstruct agent failures using `tools/agent-forensics.sh`; make agent behavior git-debuggable
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
- ### 5. Restore (Cross-Machine Reconstitution)
39
- - [RESTORE.md](RESTORE.md) — Reconstitute Aesop & fleet on a new machine from git + watchdog backups after a wipe
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
- ## Operational Guides
191
+ ## License
42
192
 
43
- - [PUBLISHING.md](PUBLISHING.md) Release Aesop to npm using GitHub Actions with OIDC trusted publishing
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/)
@@ -0,0 +1,3 @@
1
+ # Archived Spike Investigations
2
+
3
+ Spike investigations that were cancelled or superseded; kept for reference and historical context.
@@ -1,8 +1,6 @@
1
1
  # Tiered Cognition/Execution — spike + staged wave-12 artifact
2
2
 
3
- > **STATUS: STAGED, NOT ACTIVATED.** Nothing in this directory is wired into
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
+