discipline-md 0.1.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/LICENSE +21 -0
- package/README.md +80 -0
- package/bin/discipline.js +587 -0
- package/package.json +40 -0
- package/templates/.claude/settings.json +58 -0
- package/templates/AGENTS.md +463 -0
- package/templates/AGENT_TRACKER.md +138 -0
- package/templates/API_REFERENCE.md +131 -0
- package/templates/ARCHITECTURE.md +89 -0
- package/templates/ASSETS.md +90 -0
- package/templates/AUTONOMOUS_QUEUE.md +119 -0
- package/templates/BUILD_PLAN.md +89 -0
- package/templates/CHANGELOG.md +90 -0
- package/templates/CLAUDE.md +89 -0
- package/templates/CREDITS.md +109 -0
- package/templates/DATA_MODEL.md +88 -0
- package/templates/DECISIONS.md +120 -0
- package/templates/DEPLOYMENT.md +342 -0
- package/templates/HANDOFF.md +289 -0
- package/templates/IMPROVEMENT_LOOP.md +103 -0
- package/templates/INVESTIGATION.md +154 -0
- package/templates/LICENSE +68 -0
- package/templates/NOTICE +55 -0
- package/templates/OPEN_DECISIONS.md +61 -0
- package/templates/PLAYBOOK_FEEDBACK.md +87 -0
- package/templates/PROJECT_CONTEXT.md +91 -0
- package/templates/README.md +60 -0
- package/templates/ROADMAP.md +96 -0
- package/templates/SECURITY_AUDIT.md +235 -0
- package/templates/SETUP.md +162 -0
- package/templates/SPEC.md +105 -0
- package/templates/SPEC_WORKFLOW.md +173 -0
- package/templates/TODO.md +118 -0
- package/templates/USAGE.md +153 -0
- package/templates/VERIFICATION_GATE.md +68 -0
- package/templates/agents/CROSS_REPO_SYNC.md +124 -0
- package/templates/agents/DEBUGGER.md +112 -0
- package/templates/agents/PLANNER.md +111 -0
- package/templates/agents/README.md +64 -0
- package/templates/agents/RECON.md +99 -0
- package/templates/agents/SECURITY_REVIEWER.md +123 -0
- package/templates/agents/SPEC_ARCHITECT.md +133 -0
- package/templates/agents/STAKEHOLDER.md +197 -0
- package/templates/agents/_TEMPLATE.md +116 -0
- package/templates/agents/optional/ARCHITECT.md +109 -0
- package/templates/agents/optional/BACKEND_IMPACT.md +108 -0
- package/templates/agents/optional/DOC_AUDIT.md +108 -0
- package/templates/agents/optional/FRONTEND_IMPACT.md +109 -0
- package/templates/agents/optional/QUEUE_CURATOR.md +114 -0
- package/templates/agents/optional/TEST_STRATEGIST.md +107 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
# Deployment
|
|
2
|
+
|
|
3
|
+
Update this document when hosting, environment variables, secrets, deployment commands, CI/CD, launch checklist, or production operations change.
|
|
4
|
+
|
|
5
|
+
## Pre-Deploy Gate (Hard Requirement)
|
|
6
|
+
|
|
7
|
+
This gate **fails closed**: no phase that ships code to a public surface may proceed unless the gate passes. "Public surface" means anything reachable by users outside the dev team — production URL, staged URL with real users, public CDN-fronted artifact, public API endpoint.
|
|
8
|
+
|
|
9
|
+
**Gate condition:** a current `docs/SECURITY_AUDIT_<YYYY-MM-DD>.md` exists, **EITHER** (a) ≤90 days old, **OR** (b) covering all changes since the last audit, **whichever is stricter**. Stricter = whichever produces the more recent required-audit cutoff for this deploy.
|
|
10
|
+
|
|
11
|
+
**If the gate fails:**
|
|
12
|
+
|
|
13
|
+
- Invoke the `security-reviewer` subagent (see `templates/agents/SECURITY_REVIEWER.md`).
|
|
14
|
+
- Do not proceed to any phase that ships code to a public surface until the audit lands.
|
|
15
|
+
- The audit becomes the new `docs/SECURITY_AUDIT_<YYYY-MM-DD>.md` of record.
|
|
16
|
+
|
|
17
|
+
**Reviewer accept-risk:** only the stakeholder named in `docs/agents/STAKEHOLDER.md` (or the equivalent role contract for this project) can accept-risk a finding to unblock the gate. The acceptance is recorded in the audit's "Accept-Risk Candidates" section with explicit rationale (severity, blast radius, reason for accepting, expiry / re-evaluation date). The host does NOT have authority to accept-risk.
|
|
18
|
+
|
|
19
|
+
**This gate also applies to:**
|
|
20
|
+
|
|
21
|
+
- Schema migrations on production data — even if the migration is shipped via a separate tool from the standard deploy flow.
|
|
22
|
+
- Secrets rotation that touches the deploy pipeline (rotating the deploy provider's API key, rotating the production database credential, etc.).
|
|
23
|
+
- Any change to the auth surface — auth provider swap, session-handling change, token issuance/verification change — even if those don't ship via the standard deploy phases.
|
|
24
|
+
|
|
25
|
+
In other words: anywhere a change crosses the trust boundary between dev and production, the gate applies.
|
|
26
|
+
|
|
27
|
+
## Phased Rollout
|
|
28
|
+
|
|
29
|
+
Non-trivial deployments rarely happen in one shot — they unfold across phases that gate each other (DNS before TLS, schema before service, secrets before first traffic). Capture that explicitly so the operator can resume at any green-light state and know exactly what's been verified and what hasn't.
|
|
30
|
+
|
|
31
|
+
### Dependency graph
|
|
32
|
+
|
|
33
|
+
A short ASCII or bulleted graph showing which phases block which. Each arrow is a hard gate: the next phase cannot start until the previous one's exit criteria are green. Parallel phases are allowed when they share no inputs.
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Phase A (source on <git-host>) ──► Phase B (<frontend-host> project)
|
|
37
|
+
│
|
|
38
|
+
▼
|
|
39
|
+
Phase C (<backend-or-worker>)
|
|
40
|
+
│
|
|
41
|
+
▼
|
|
42
|
+
Phase D (wire frontend ↔ backend env vars) ──► Phase E (custom domain + TLS)
|
|
43
|
+
│ │
|
|
44
|
+
▼ ▼
|
|
45
|
+
Phase F (<email-routing>) Phase G (analytics, parallel to F)
|
|
46
|
+
│
|
|
47
|
+
▼
|
|
48
|
+
Phase H (<feature-flag-flip>)
|
|
49
|
+
│
|
|
50
|
+
▼
|
|
51
|
+
Phase I (<asset-or-OG-pass>)
|
|
52
|
+
│
|
|
53
|
+
▼
|
|
54
|
+
Phase J (<optional-extension>)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Even a tiny graph like `Phase A → Phase B → Phase C, Phase D (parallel to B)` is enough to seed the pattern. Replace with the real shape of this project's deploy.
|
|
58
|
+
|
|
59
|
+
### Phase outline
|
|
60
|
+
|
|
61
|
+
For each phase: a 1-line goal, the steps, **exit criteria** (testable conditions that must hold before the next phase begins), and a **rollback path** (what reverting this phase looks like, or a callout that it's not safely reversible).
|
|
62
|
+
|
|
63
|
+
#### Phase A — <source-on-git-host> (~5 min)
|
|
64
|
+
|
|
65
|
+
Goal: get the canonical source on the git host that the deploy provider authorizes.
|
|
66
|
+
|
|
67
|
+
Exit criteria:
|
|
68
|
+
- [ ] Repo created at `<git-host>/<org>/<repo>`.
|
|
69
|
+
- [ ] `main` branch pushed; remote tracking confirmed (`git remote -v`).
|
|
70
|
+
- [ ] `<deploy-provider>` can read the repo (test via OAuth flow or `gh repo view`).
|
|
71
|
+
|
|
72
|
+
Rollback: trivial — delete or unlink the remote. No production impact yet.
|
|
73
|
+
|
|
74
|
+
#### Phase B — <frontend-host> first deploy (~10 min)
|
|
75
|
+
|
|
76
|
+
> **Pre-Deploy Gate must pass before this phase** — see "Pre-Deploy Gate (Hard Requirement)" above. This is the first phase that puts code on a public-reachable URL.
|
|
77
|
+
|
|
78
|
+
Goal: build artifact lands at the provider's default URL (`<project>.<provider>.app`) with no env vars wired.
|
|
79
|
+
|
|
80
|
+
Exit criteria:
|
|
81
|
+
- [ ] First build succeeds in the provider dashboard.
|
|
82
|
+
- [ ] Default URL serves the app; degraded features (those needing env vars) gracefully no-op.
|
|
83
|
+
- [ ] Build command and output directory captured in the dashboard config.
|
|
84
|
+
|
|
85
|
+
Rollback: delete the project, or roll back to "no deployments" state. Reversible.
|
|
86
|
+
|
|
87
|
+
#### Phase C — <backend-or-worker> deploy (~15 min)
|
|
88
|
+
|
|
89
|
+
> **Pre-Deploy Gate must pass before this phase** — see "Pre-Deploy Gate (Hard Requirement)" above. Backend ships code to a public-reachable URL.
|
|
90
|
+
|
|
91
|
+
Goal: backend service is live and reachable; smoke-test endpoint returns expected shape.
|
|
92
|
+
|
|
93
|
+
Exit criteria:
|
|
94
|
+
- [ ] Service deployed (`<provider> deploy` or equivalent prints a live URL).
|
|
95
|
+
- [ ] Health-check endpoint returns 200 with expected JSON.
|
|
96
|
+
- [ ] Persistent stores (KV / DB / cache) bound to the service.
|
|
97
|
+
|
|
98
|
+
Rollback: redeploy from the previous git commit (`<provider> rollback` or checkout-and-redeploy). Reversible.
|
|
99
|
+
|
|
100
|
+
#### Phase D — wire frontend ↔ backend (~5 min)
|
|
101
|
+
|
|
102
|
+
Goal: frontend env vars point at the backend URL from Phase C; rebuild bakes them in.
|
|
103
|
+
|
|
104
|
+
Exit criteria:
|
|
105
|
+
- [ ] `<FRONTEND_API_URL>` set in frontend host's production env.
|
|
106
|
+
- [ ] Triggered rebuild has the new env baked in.
|
|
107
|
+
- [ ] End-to-end smoke flow (load → action → write → read) works in production.
|
|
108
|
+
|
|
109
|
+
Rollback: clear the env var and redeploy — frontend reverts to "degraded but functional" state from Phase B. Reversible.
|
|
110
|
+
|
|
111
|
+
#### Phase E — custom domain + TLS (~10 min)
|
|
112
|
+
|
|
113
|
+
Goal: `<custom-domain>` resolves to the frontend with a valid certificate.
|
|
114
|
+
|
|
115
|
+
Exit criteria:
|
|
116
|
+
- [ ] Apex (`<custom-domain>`) and `www.<custom-domain>` both routed.
|
|
117
|
+
- [ ] SSL/TLS certificate active (provider dashboard shows green).
|
|
118
|
+
- [ ] Curl from external network confirms 200 + valid cert.
|
|
119
|
+
- [ ] Backend CORS allowlist tightened to the new origin and redeployed.
|
|
120
|
+
|
|
121
|
+
Rollback: **partially reversible.** Removing the custom domain in the dashboard reverts traffic to the default URL within minutes. **DNS nameserver changes (if any) are not instantly reversible** — TTL-bounded propagation, up to 48h. Document the previous nameservers before changing them.
|
|
122
|
+
|
|
123
|
+
#### Phase F — <email-routing> (~5 min, parallel to G)
|
|
124
|
+
|
|
125
|
+
Goal: `<address>@<custom-domain>` routes to operator inbox.
|
|
126
|
+
|
|
127
|
+
Exit criteria:
|
|
128
|
+
- [ ] Routing rule created.
|
|
129
|
+
- [ ] Destination address verified (verification link clicked).
|
|
130
|
+
- [ ] Test email round-trips end-to-end.
|
|
131
|
+
|
|
132
|
+
Rollback: disable the routing rule. Reversible.
|
|
133
|
+
|
|
134
|
+
#### Phase G — analytics (~3 min, parallel to F)
|
|
135
|
+
|
|
136
|
+
Goal: traffic visibility from minute one of public launch.
|
|
137
|
+
|
|
138
|
+
Exit criteria:
|
|
139
|
+
- [ ] Snippet or first-party endpoint live.
|
|
140
|
+
- [ ] First test pageview shows in the analytics dashboard.
|
|
141
|
+
|
|
142
|
+
Rollback: remove the snippet, redeploy. Reversible.
|
|
143
|
+
|
|
144
|
+
#### Phase H — <feature-flag-flip> (when ready)
|
|
145
|
+
|
|
146
|
+
Goal: turn on a gated feature (donation link, premium tier, beta surface) once its operational prerequisites land.
|
|
147
|
+
|
|
148
|
+
Exit criteria:
|
|
149
|
+
- [ ] Prerequisites listed under this phase are all green (e.g. payment account exists, legal copy reviewed).
|
|
150
|
+
- [ ] Feature env var set in production scope.
|
|
151
|
+
- [ ] Feature renders in production smoke test.
|
|
152
|
+
|
|
153
|
+
Rollback: clear the env var and redeploy. Reversible.
|
|
154
|
+
|
|
155
|
+
#### Phase I — <asset-or-OG-pass> (queued)
|
|
156
|
+
|
|
157
|
+
Goal: production polish — share images, favicons, manifest, accessibility metadata.
|
|
158
|
+
|
|
159
|
+
Exit criteria:
|
|
160
|
+
- [ ] Asset(s) committed at `<asset-paths>`.
|
|
161
|
+
- [ ] Meta tags present in `<entry-html>`.
|
|
162
|
+
- [ ] Validated via `<og-checker>` or similar.
|
|
163
|
+
|
|
164
|
+
Rollback: revert the commit. Reversible.
|
|
165
|
+
|
|
166
|
+
#### Phase J — <optional-extension> (deferred)
|
|
167
|
+
|
|
168
|
+
Goal: a follow-on capability funded as a later shape (account sync, additional platform target, paid tier wiring). Has its own internal sub-phases.
|
|
169
|
+
|
|
170
|
+
Exit criteria:
|
|
171
|
+
- [ ] Sub-phase J.1 … J.N each green (define inline).
|
|
172
|
+
- [ ] End-to-end smoke for the new capability passes.
|
|
173
|
+
|
|
174
|
+
Rollback: feature is gated behind env vars / secrets — clearing them disables the capability without code rollback. Reversible by config; data written during the phase persists unless explicitly cleaned up.
|
|
175
|
+
|
|
176
|
+
### Rollback summary
|
|
177
|
+
|
|
178
|
+
| Phase | Reversible? | Notes |
|
|
179
|
+
|---|---|---|
|
|
180
|
+
| A | Yes | Remove remote / delete repo. |
|
|
181
|
+
| B | Yes | Delete project / promote previous deploy. |
|
|
182
|
+
| C | Yes | Redeploy previous git commit. |
|
|
183
|
+
| D | Yes | Clear env var, redeploy. |
|
|
184
|
+
| E | **Partial** | Domain unlink is fast; nameserver changes are TTL-bounded (up to 48h). |
|
|
185
|
+
| F | Yes | Disable routing rule. |
|
|
186
|
+
| G | Yes | Remove snippet, redeploy. |
|
|
187
|
+
| H | Yes | Clear feature env var, redeploy. |
|
|
188
|
+
| I | Yes | Revert asset commit. |
|
|
189
|
+
| J | Config-reversible | Clearing secrets disables capability; persisted data may need explicit cleanup. |
|
|
190
|
+
|
|
191
|
+
Call out any phase that performs an **irreversible** action (e.g. destructive schema migration, billing-account creation, third-party data deletion) directly in that phase's rollback line.
|
|
192
|
+
|
|
193
|
+
## Stack
|
|
194
|
+
|
|
195
|
+
| Layer | Service | Cost / Tier | Notes |
|
|
196
|
+
|---|---|---|---|
|
|
197
|
+
| Frontend | (e.g. GitHub Pages, Vercel, Netlify) | | |
|
|
198
|
+
| Backend | (e.g. Railway, Fly.io, self-hosted) | | |
|
|
199
|
+
| Database | (e.g. Supabase, RDS, SQLite file) | | |
|
|
200
|
+
| Email / notifications | (e.g. Resend, Postmark) | | |
|
|
201
|
+
| Storage / CDN | | | |
|
|
202
|
+
| Other services | | | |
|
|
203
|
+
|
|
204
|
+
For non-cloud deployments (CLI tool, Docker artifact, distributed binary), repurpose the table to capture distribution channel, build target, and signing/release service.
|
|
205
|
+
|
|
206
|
+
## Environment Variables
|
|
207
|
+
|
|
208
|
+
### Public config (safe to commit, e.g. `.env.example`)
|
|
209
|
+
|
|
210
|
+
```text
|
|
211
|
+
VARIABLE_NAME=description
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Secrets (server-only, NEVER committed)
|
|
215
|
+
|
|
216
|
+
```text
|
|
217
|
+
SECRET_NAME=how to generate it
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Note: secrets must come from a secrets manager (Railway / Vercel / Fly env, Doppler, 1Password, etc.) — never checked into the repo and never logged. Add a `.env.example` with placeholder values; gitignore the real `.env`.
|
|
221
|
+
|
|
222
|
+
## Local Setup
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
# install
|
|
226
|
+
# copy .env.example -> .env, fill in values
|
|
227
|
+
# run dev server
|
|
228
|
+
# run tests
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Production Setup
|
|
232
|
+
|
|
233
|
+
Numbered steps to bring the project up from scratch. Group by tier where applicable (database → backend → frontend → email → automation):
|
|
234
|
+
|
|
235
|
+
1. Step one.
|
|
236
|
+
2. Step two.
|
|
237
|
+
3. Step three.
|
|
238
|
+
|
|
239
|
+
## Data / Seed Setup
|
|
240
|
+
|
|
241
|
+
For the one-time bootstrap distinct from code deploy: schema migrations, seed data, asset uploads, code/voucher imports, etc.
|
|
242
|
+
|
|
243
|
+
1. Step.
|
|
244
|
+
2. Step.
|
|
245
|
+
|
|
246
|
+
Skip if the project has no persistent state to seed.
|
|
247
|
+
|
|
248
|
+
## Custom Domain / Distribution (optional)
|
|
249
|
+
|
|
250
|
+
For web apps: DNS configuration, certificate setup, custom domain mapping.
|
|
251
|
+
For CLI tools / libraries: package registry publishing (npm, PyPI, crates.io), binary distribution, signing.
|
|
252
|
+
For Docker: image registry, tag conventions.
|
|
253
|
+
|
|
254
|
+
Skip if the project ships only at a default URL or has no distribution channel.
|
|
255
|
+
|
|
256
|
+
## CI/CD
|
|
257
|
+
|
|
258
|
+
- **Trigger:** when does CI run (push to main, PR, tag, manual)?
|
|
259
|
+
- **Required checks:** what must pass before merge / deploy?
|
|
260
|
+
- **Deploy target:** what gets deployed where on success?
|
|
261
|
+
- **Secrets source:** where does CI get production secrets from?
|
|
262
|
+
- **Rollback hook:** how to abort a bad deploy mid-flight if possible.
|
|
263
|
+
|
|
264
|
+
## Launch Checklist
|
|
265
|
+
|
|
266
|
+
Group by category so nothing slips. Tick everything before declaring launch.
|
|
267
|
+
|
|
268
|
+
### Infrastructure
|
|
269
|
+
- [ ] Hosting provider provisioned.
|
|
270
|
+
- [ ] DNS / custom domain pointed.
|
|
271
|
+
- [ ] HTTPS / TLS verified.
|
|
272
|
+
- [ ] Monitoring / logging hooked up.
|
|
273
|
+
|
|
274
|
+
### Code
|
|
275
|
+
- [ ] Production env vars set.
|
|
276
|
+
- [ ] Tests pass on the deploy branch.
|
|
277
|
+
- [ ] Build artifact verified (no debug flags, no test data).
|
|
278
|
+
|
|
279
|
+
### Data
|
|
280
|
+
- [ ] Schema migrations applied.
|
|
281
|
+
- [ ] Seed data imported.
|
|
282
|
+
- [ ] Backups configured.
|
|
283
|
+
|
|
284
|
+
### Verification
|
|
285
|
+
- [ ] Smoke test core user flows.
|
|
286
|
+
- [ ] Health-check / version endpoint responding.
|
|
287
|
+
- [ ] Rollback plan documented (see below).
|
|
288
|
+
|
|
289
|
+
## Post-Deploy Verification
|
|
290
|
+
|
|
291
|
+
After every deploy (initial or subsequent):
|
|
292
|
+
|
|
293
|
+
- Hit the health-check / version endpoint.
|
|
294
|
+
- Smoke test the critical user flow.
|
|
295
|
+
- Check logs for unexpected errors in the first 5 minutes.
|
|
296
|
+
- Confirm no regression in monitoring metrics.
|
|
297
|
+
|
|
298
|
+
## Day-2 Operations / Updating
|
|
299
|
+
|
|
300
|
+
For routine updates after launch (distinct from initial deploy):
|
|
301
|
+
|
|
302
|
+
1. Step (e.g. push to main → CI deploys → verify).
|
|
303
|
+
2. Step.
|
|
304
|
+
|
|
305
|
+
Schema changes, secret rotation, and dependency updates each get their own short procedure — link or fold them in here.
|
|
306
|
+
|
|
307
|
+
## Rollback
|
|
308
|
+
|
|
309
|
+
Three rollback surfaces, each with their own procedure:
|
|
310
|
+
|
|
311
|
+
- **Code rollback:** how to revert to the previous deploy (Git tag, hosting provider's previous deployment, container image swap).
|
|
312
|
+
- **Schema / data rollback:** how to revert a migration or restore a backup. Note schema changes that are NOT safely reversible.
|
|
313
|
+
- **Configuration / secrets rollback:** how to revert env-var or feature-flag changes.
|
|
314
|
+
|
|
315
|
+
## Cost & Scaling (optional)
|
|
316
|
+
|
|
317
|
+
For deployments where cost-per-tier matters or scaling thresholds will eventually trigger:
|
|
318
|
+
|
|
319
|
+
- Current tier cost / monthly burn.
|
|
320
|
+
- Free-tier or starter-tier limits (request count, storage, bandwidth).
|
|
321
|
+
- Triggers that would warrant an upgrade.
|
|
322
|
+
- Largest cost levers if costs spike.
|
|
323
|
+
|
|
324
|
+
Skip if the project is self-hosted on owned hardware, runs at fixed cost, or is too small to care.
|
|
325
|
+
|
|
326
|
+
### Cost summary
|
|
327
|
+
|
|
328
|
+
One row per phase that incurs cost, with the provider, tier, and monthly cost at MVP scale. Use placeholders until real numbers are known.
|
|
329
|
+
|
|
330
|
+
| Phase | Provider | Tier | Monthly cost |
|
|
331
|
+
|---|---|---|---|
|
|
332
|
+
| B — <frontend-host> | `<provider>` | `<free / hobby / pro>` | `$<n>` |
|
|
333
|
+
| C — <backend-or-worker> | `<provider>` | `<free / hobby / pro>` | `$<n>` |
|
|
334
|
+
| C — datastore (KV / DB) | `<provider>` | `<tier>` | `$<n>` |
|
|
335
|
+
| E — domain registration | `<registrar>` | n/a | `$<n>/yr` (~`$<n>/mo`) |
|
|
336
|
+
| F — <email-routing> | `<provider>` | `<tier>` | `$<n>` |
|
|
337
|
+
| G — analytics | `<provider>` | `<tier>` | `$<n>` |
|
|
338
|
+
| H — <feature-flag-flip> | `<provider>` | `<tier>` | `$<n>` |
|
|
339
|
+
| J — <optional-extension> | `<provider>` | `<tier>` | `$<n>` |
|
|
340
|
+
| **Total at MVP scale** | | | **`$<n>/mo`** |
|
|
341
|
+
|
|
342
|
+
Note any line item that's `$0` only while under a free-tier ceiling, with the trigger that would push it to paid (e.g. *"$0/mo while under 100k requests/day; $5/mo if exceeded"*).
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# Handoff
|
|
2
|
+
|
|
3
|
+
Use this as the first-read handoff document for AI coding agents and future developers. Keep it updated whenever workflow, documentation structure, or project conventions change.
|
|
4
|
+
|
|
5
|
+
## Project-Specific Landing Zone
|
|
6
|
+
|
|
7
|
+
*(Add sections relevant to this project here, near the top, so first-read agents see them. The framework template intentionally leaves this empty — it is for project-shaped content that does not generalize. Common uses:*
|
|
8
|
+
|
|
9
|
+
- *Sibling repos / subproducts list and integration paths.*
|
|
10
|
+
- *Recently landed work worth flagging for context.*
|
|
11
|
+
- *Operator credentials, demo accounts, sandbox URLs.*
|
|
12
|
+
- *Cross-repo registration checklists when adding a new sibling.*
|
|
13
|
+
- *Project-specific hazards or "read this before changing X" warnings.*
|
|
14
|
+
|
|
15
|
+
*Delete this header and replace with project-specific sections, or delete the whole zone if the project doesn't need it.)*
|
|
16
|
+
|
|
17
|
+
## Related Repos
|
|
18
|
+
|
|
19
|
+
If this project has sibling repos (subproducts, shared-tooling repos, paired build/runtime repos), list them here so first-read agents can navigate the constellation:
|
|
20
|
+
|
|
21
|
+
- **`<sibling-repo>`** (`<absolute_path_to_sibling>`) — one-line purpose; how this repo depends on or is depended on by it; integration path if any (e.g. `/tools/<slug>/`).
|
|
22
|
+
- **`<another-sibling>`** (`<absolute_path_to_sibling>`) — …
|
|
23
|
+
|
|
24
|
+
**Cross-link invariant (cleanup-gate item):** When this section is updated — sibling added, removed, renamed, relocated, or its dependency direction shifted — sync the matching "Related Repos" section in each sibling's `HANDOFF.md` so the reference graph stays consistent. A missing back-link means the next agent reading the sibling will not know this repo exists. Treat the sync as part of the same task, not as follow-up work.
|
|
25
|
+
|
|
26
|
+
For projects with a clear hub repo (one repo holds the canonical subproduct list), siblings may link back to the hub instead of duplicating the full list — but the back-link itself must exist.
|
|
27
|
+
|
|
28
|
+
## Remotes & Backup
|
|
29
|
+
|
|
30
|
+
If this project mirrors to multiple hosts (canonical forge + redundant forge + private/LAN backup), document the fan-out here so push discipline and recovery procedures stay first-read.
|
|
31
|
+
|
|
32
|
+
| Remote | URL | Role |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `<canonical>` | `<git@host:org/repo.git>` | Canonical hosting; PRs, CI, issues |
|
|
35
|
+
| `<redundant>` | `<git@other-host:org/repo.git>` | Redundant hosting |
|
|
36
|
+
| `<backup>` | `<ssh://user@host/~/repo.git>` | Private LAN / NAS backup |
|
|
37
|
+
|
|
38
|
+
The recommended pattern is a single `origin` configured with **multiple `pushurl` entries** so a single `git push` fans out to every destination. `git pull` / `git fetch` reads from one canonical URL. Keep the named remotes (`<canonical>`, `<redundant>`, `<backup>`) defined separately so you can target one specifically when needed.
|
|
39
|
+
|
|
40
|
+
Example fan-out config (in `.git/config`):
|
|
41
|
+
|
|
42
|
+
```ini
|
|
43
|
+
[remote "origin"]
|
|
44
|
+
url = <git@canonical-host:org/repo.git>
|
|
45
|
+
pushurl = <git@canonical-host:org/repo.git>
|
|
46
|
+
pushurl = <git@redundant-host:org/repo.git>
|
|
47
|
+
pushurl = <ssh://user@backup-host/~/repo.git>
|
|
48
|
+
fetch = +refs/heads/*:refs/remotes/origin/*
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If the project keeps host-specific notes (key rotation cadence, gitleaks hook, push-protection setting, fan-out verification), put them in a project-local `REMOTES.md` and link from here. See the framework-level [`REMOTES.md`](../REMOTES.md) for the canonical pattern this section is derived from.
|
|
52
|
+
|
|
53
|
+
### When to push
|
|
54
|
+
|
|
55
|
+
The fan-out is only a backup strategy for work that has been pushed.
|
|
56
|
+
|
|
57
|
+
- **After every commit on a meaningful checkpoint.** Pushing is cheap; redundancy is the point.
|
|
58
|
+
- **Before stepping away from the machine** for any non-trivial period.
|
|
59
|
+
- **Before history-rewriting or destructive operations** (rebase, force-push, branch delete) — push first so the unmodified state survives on at least one remote.
|
|
60
|
+
- **End of session, no exceptions.**
|
|
61
|
+
|
|
62
|
+
Not pushing leaves work on a single machine. The point of multiple remotes is recovery from any single point of failure.
|
|
63
|
+
|
|
64
|
+
### Recovery procedure
|
|
65
|
+
|
|
66
|
+
If the canonical host is unavailable or a working copy is lost:
|
|
67
|
+
|
|
68
|
+
1. Identify the most-recently-pushed remote — typically `<canonical>`, but fall back to `<redundant>` or `<backup>` if needed.
|
|
69
|
+
2. Clone from that remote: `git clone <url> <workspace_path>/<repo>`.
|
|
70
|
+
3. Re-establish the fan-out: re-add the missing `pushurl` entries (see example above) or run the project's mirror-setup script if one exists (e.g. `<workspace_path>/setup-mirrors.ps1`).
|
|
71
|
+
4. Verify with `git remote -v` (expect one `fetch` URL and N `push` URLs on `origin`) and a `git push origin --dry-run`.
|
|
72
|
+
|
|
73
|
+
### Approval Signals & Drift Rules
|
|
74
|
+
|
|
75
|
+
Some projects gate material work behind explicit human approval signals carried in conversation transcripts. The convention:
|
|
76
|
+
|
|
77
|
+
- **Approval-signal literal.** A short SCREAMING_SNAKE_CASE token the lead stakeholder writes verbatim to authorize a phase of work. Common shapes: `FUNDING_APPROVED` (the funded scope is locked in), `SCOPE_APPROVED` (a specific feature set is approved for this milestone), `DEPLOY_APPROVED` (production deploy is authorized for this release). Pick names that reflect the actual gate.
|
|
78
|
+
- **Drift-and-re-pitch rule.** When implementation diverges materially from the approved scope — target audience, value proposition, stack choice, burn envelope, or any other axis the original approval was conditioned on — pause and re-pitch in `docs/OPEN_DECISIONS.md` before continuing. Material drift requires a fresh approval signal; trivial additions inside the funded envelope do not.
|
|
79
|
+
- **Where the actual signals live.** This file states the convention; the project-specific signal list, drift triggers, and authority boundary live in the role contract under `docs/agents/<ROLE>.md` (e.g. `docs/agents/FOUNDER.md` for projects with a funder/scope-guardian role). Cross-reference both directions so the contract and the convention stay in sync.
|
|
80
|
+
|
|
81
|
+
Approval-signal matching rule: a signal matches when the token appears verbatim, compared case-insensitively, ignoring surrounding whitespace and punctuation ("FUNDING_APPROVED." and "funding_approved" both match). Nothing else matches — paraphrases, enthusiasm, or "sounds good, approved" do not open the gate. If the user appears to be approving but the token is absent, ask for the exact token; never infer it.
|
|
82
|
+
|
|
83
|
+
If the project does not use a stakeholder-approval gate, delete this subsection.
|
|
84
|
+
|
|
85
|
+
## IMPORTANT: Documentation Is Part of the Work
|
|
86
|
+
|
|
87
|
+
Keeping docs current is not optional. Every session that changes code must leave the docs accurate. Stale docs are worse than no docs because they actively mislead future agents.
|
|
88
|
+
|
|
89
|
+
Documentation is a completion gate, not a cleanup task. Before any final response or commit, audit documentation impact and either update the relevant docs or explicitly state why no docs were needed.
|
|
90
|
+
|
|
91
|
+
Do not mark work complete if the relevant docs have not been updated. Specifically:
|
|
92
|
+
|
|
93
|
+
- Update root `README.md` when the repository entrypoint, top-level purpose, or first-read directions change.
|
|
94
|
+
- Update `docs/TODO.md` as work progresses and before ending a session.
|
|
95
|
+
- Update `docs/CHANGELOG.md` before committing meaningful work.
|
|
96
|
+
- Update `docs/ARCHITECTURE.md` when file layout, runtime flow, or frontend/backend structure changes.
|
|
97
|
+
- Update `docs/DATA_MODEL.md` when persistence, schema, auth, or rewards change.
|
|
98
|
+
- Update `docs/API_REFERENCE.md` when endpoints, request shapes, or auth behavior change.
|
|
99
|
+
- Update `docs/ASSETS.md` when media assets are added, renamed, or referenced by code.
|
|
100
|
+
- Update `docs/DEPLOYMENT.md` when env vars, hosting, email setup, or the launch checklist changes.
|
|
101
|
+
- Update `docs/PROJECT_CONTEXT.md` when product direction, design language, or domain context changes.
|
|
102
|
+
- Update `docs/DECISIONS.md` when a durable technical or product decision is made.
|
|
103
|
+
- Update `docs/OPEN_DECISIONS.md` when a paired session surfaces a blocking decision that needs user input before work can continue. Remove entries once the answer has folded into `docs/DECISIONS.md` or the matching `docs/TODO.md` entry.
|
|
104
|
+
- Update `docs/AGENTS.md` when the host model, subagent roles, autonomy tags, or human-collab gate change.
|
|
105
|
+
- Update this file when any documentation responsibility changes.
|
|
106
|
+
|
|
107
|
+
Required end-of-task documentation audit (mandatory cleanup gate):
|
|
108
|
+
|
|
109
|
+
- Run or inspect `git diff -- docs` before calling the task complete.
|
|
110
|
+
- If code changed and no docs changed, verify that the change is truly internal-only and say so explicitly.
|
|
111
|
+
- For renames, endpoint changes, asset path changes, or product wording changes, search docs for stale old names/paths before finishing.
|
|
112
|
+
- **Delete completed entries from `docs/TODO.md`** once they are captured in `docs/CHANGELOG.md`. TODO is a queue, not a log; do not leave `[x] DONE` entries.
|
|
113
|
+
- **Mark completed `docs/ROADMAP.md` items with ✅** or move them under a `## Completed` section.
|
|
114
|
+
- **Reflect on the playbook**: if this session revealed a real workflow-impact change to AGENTS / HANDOFF / TODO conventions, add a proposal to `docs/PLAYBOOK_FEEDBACK.md`. Do not edit workflow docs directly without user review. Workflow-impact discipline is mandatory — see `docs/AGENTS.md` Playbook Improvement Loop section for the rule and what NOT to propose.
|
|
115
|
+
- Final responses should include a concise docs status, e.g. `Docs updated: docs/API_REFERENCE.md, docs/ASSETS.md` or `Docs unchanged: no behavior/API/file/path changes`.
|
|
116
|
+
|
|
117
|
+
## Start Here
|
|
118
|
+
|
|
119
|
+
1. Read `docs/README.md` for setup commands and folder structure.
|
|
120
|
+
2. Read `docs/TODO.md` for current context and active tasks.
|
|
121
|
+
3. Read `docs/AGENTS.md` for the AI agent playbook (host model, subagent roles, autonomy tags).
|
|
122
|
+
4. Read `docs/AUTONOMOUS_QUEUE.md` if running unsupervised — it lists pre-approved tasks.
|
|
123
|
+
5. Read `docs/CHANGELOG.md` for recent completed changes.
|
|
124
|
+
6. Read area-specific cold-path docs before editing related systems.
|
|
125
|
+
|
|
126
|
+
*Projects may reorder the first 2–3 entries when a different doc carries more upfront context (e.g. lead with `PROJECT_CONTEXT.md` for a project where domain understanding gates everything else). Keep the agent-playbook entry in the top half regardless.*
|
|
127
|
+
|
|
128
|
+
## Documentation Index
|
|
129
|
+
|
|
130
|
+
- `docs/README.md`: Quick overview and setup. (Hot path)
|
|
131
|
+
- Root `README.md`: Concise repository entrypoint. Keep it stable and point to `docs/` for full context.
|
|
132
|
+
- `docs/TODO.md`: Short-term active work and test checklist. (Hot path)
|
|
133
|
+
- `docs/AGENTS.md`: AI agent playbook — host model, named subagent roles, autonomy tags, human-collab gate, playbook improvement loop.
|
|
134
|
+
- `docs/AUTONOMOUS_QUEUE.md`: Priority-ordered list of pre-approved tasks for unsupervised AI runs. Optional — only present if the project has enabled autonomous workflows.
|
|
135
|
+
- `docs/PLAYBOOK_FEEDBACK.md`: Staging file for proposed improvements to the workflow docs. Inbox between "agent noticed something" and "canonical doc gets edited" — see `docs/AGENTS.md` for the lifecycle.
|
|
136
|
+
- `docs/IMPROVEMENT_LOOP.md`: (Cold path) The object-level recursive improvement loop (discover → execute → verify → evaluate → integrate → repeat). Optional — only present if the project runs an autonomous improvement loop. Pairs with VERIFICATION_GATE.
|
|
137
|
+
- `docs/VERIFICATION_GATE.md`: (Cold path) The machine-checkable ground-truth signal every loop iteration must pass (compile/test/repro). Optional — required by IMPROVEMENT_LOOP.
|
|
138
|
+
- `docs/PROJECT_CONTEXT.md`: Product and domain context.
|
|
139
|
+
- `docs/ARCHITECTURE.md`: Codebase and runtime architecture.
|
|
140
|
+
- `docs/DATA_MODEL.md`: Persistence and schemas.
|
|
141
|
+
- `docs/ASSETS.md`: Media asset paths and preparation notes.
|
|
142
|
+
- `docs/API_REFERENCE.md`: Endpoints and integrations.
|
|
143
|
+
- `docs/DEPLOYMENT.md`: Production setup and operations.
|
|
144
|
+
- `docs/CHANGELOG.md`: Completed notable changes.
|
|
145
|
+
- `docs/ROADMAP.md`: Long-term plans, milestones, and deferred ideas.
|
|
146
|
+
- `docs/DECISIONS.md`: Durable decision records.
|
|
147
|
+
- `docs/OPEN_DECISIONS.md`: Staging file for design/product decisions that block active work and need user input. Inbox between "decision arose in a session" and "decision recorded in `docs/DECISIONS.md` or folded into a `docs/TODO.md` entry." Optional — only present if the project hits blocking design questions worth tracking. When this file holds only the heading, the project is unblocked.
|
|
148
|
+
- `docs/CREDITS.md`: Third-party libraries, vendored code, assets, fonts, attributions.
|
|
149
|
+
- `LICENSE` (repo root): Project license. Default scaffold is All Rights Reserved.
|
|
150
|
+
- `NOTICE` (repo root): Third-party attribution summary; required by Apache-2.0, optional otherwise.
|
|
151
|
+
- `REMOTES.md` (repo root): Multi-host mirror config, push discipline, recovery procedure, and any project-local backup-hygiene checklist. (Cold path) Optional — only present if the project mirrors to more than one remote.
|
|
152
|
+
|
|
153
|
+
*Projects may add domain-specific cold-path docs (e.g. `PUZZLE_DESIGN.md`, `HARDWARE_SPECS.md`, `COMPLIANCE.md`, `BACKEND_GUIDE.md`) — index them above with a one-line description. Keep this list in sync with the actual files in `docs/`.*
|
|
154
|
+
|
|
155
|
+
**Avoid duplicate update-rule lists.** This file already has an "IMPORTANT: Documentation Is Part of the Work" list above. Do not also create a separate "Update Rules" section restating the same bullets — the two will drift. If projects need a quick-reference list, link back to the IMPORTANT section.
|
|
156
|
+
|
|
157
|
+
## Persistence Rules
|
|
158
|
+
|
|
159
|
+
If the project has persistent state, document the per-environment rules here so first-read agents internalize them before editing data flows. Skip this section for stateless projects.
|
|
160
|
+
|
|
161
|
+
- Where production state lives:
|
|
162
|
+
- Where local-dev state lives / how to reset:
|
|
163
|
+
- What must NEVER be exposed to clients (secrets, hashes, tokens, internal IDs):
|
|
164
|
+
- What must NEVER be committed to the repo (real secrets, live state files, large binaries):
|
|
165
|
+
|
|
166
|
+
## Current Local Dev
|
|
167
|
+
|
|
168
|
+
How to bring the project up locally for the first time. Generic stub:
|
|
169
|
+
|
|
170
|
+
- Start command (full paths if a particular shell can't find them):
|
|
171
|
+
- Local URL / port:
|
|
172
|
+
- Seeded credentials, demo account, sandbox token (if any):
|
|
173
|
+
- How to reset local state (delete which file, drop which database):
|
|
174
|
+
|
|
175
|
+
Skip this section for projects with no local-dev mode.
|
|
176
|
+
|
|
177
|
+
## Project Workflow
|
|
178
|
+
|
|
179
|
+
### Branching
|
|
180
|
+
|
|
181
|
+
- Start every new feature, bugfix, or working session on a fresh branch from the main branch unless explicitly directed otherwise.
|
|
182
|
+
- Use short descriptive branch names (e.g. `feature/<topic>`, `fix/<topic>`, `docs/<topic>`).
|
|
183
|
+
- Before starting unrelated work, merge or resolve the previous feature branch back into the main branch.
|
|
184
|
+
- If there are uncommitted changes on the main branch when starting new work, commit them, branch them, or ask the user how to proceed.
|
|
185
|
+
- **One PR = one feature = one branch off latest main.** When a PR merges, or work pivots to a meaningfully different feature, start a fresh branch off the *updated* main: `git fetch && git checkout -b <new-branch> <remote>/<main-branch>`. Never push follow-on commits to a merged or stale branch — those commits become orphans that never reach main. If you've already committed onto a stale branch, cherry-pick onto a fresh branch and open a new PR; do not try to salvage the stale one.
|
|
186
|
+
|
|
187
|
+
### Cross-repo git invocations
|
|
188
|
+
|
|
189
|
+
Use `git -C "<absolute path>" <command>` instead of `cd "<path>" && git <command>` when operating on a sibling repo. See `docs/AGENTS.md#shell-and-git-invocation` — `cd && git` triggers a per-call permission prompt, `git -C` does not.
|
|
190
|
+
|
|
191
|
+
### What stays uncommitted
|
|
192
|
+
|
|
193
|
+
- Real secrets, `.env` files, signing keys.
|
|
194
|
+
- Local-dev state files (e.g. JSON-backed dev databases).
|
|
195
|
+
- Build outputs and caches not meant to be vendored.
|
|
196
|
+
- `package-lock.json` — this project uses pnpm; lockfile is `pnpm-lock.yaml`.
|
|
197
|
+
|
|
198
|
+
### Pre-commit checks
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# syntax / type check
|
|
202
|
+
# unit tests
|
|
203
|
+
# linter (if applicable)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Commit style
|
|
207
|
+
|
|
208
|
+
State the project's commit-message convention here (Conventional Commits, prefix-tag, free-form, etc.).
|
|
209
|
+
|
|
210
|
+
### Test commands
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# unit tests
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Build commands
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# pnpm install # first run
|
|
220
|
+
# build
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Deployment commands
|
|
224
|
+
|
|
225
|
+
See `docs/DEPLOYMENT.md` for the full procedure. Day-to-day shortcuts:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# deploy
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## AI Agent Playbook
|
|
232
|
+
|
|
233
|
+
The full host-model policy, escalation rules, named subagent roles (with input/output contracts and per-role model tiers), autonomy tag scheme, and human-collaboration gate live in `docs/AGENTS.md`. Read that file before spawning subagents or picking up tagged work.
|
|
234
|
+
|
|
235
|
+
Quick rules that must hold regardless of project specifics:
|
|
236
|
+
|
|
237
|
+
- The host reconciles all subagent output; subagents do not own commits, merges, or doc-completion-gate sign-off.
|
|
238
|
+
- Tasks tagged `[autonomy: needs-human-collab]` must NOT start without explicit user approval.
|
|
239
|
+
- Spawn edit-capable subagents in worktrees during autonomous runs so parallel work cannot conflict.
|
|
240
|
+
|
|
241
|
+
## Safety Rules
|
|
242
|
+
|
|
243
|
+
- Do not commit secrets.
|
|
244
|
+
- Do not overwrite user work.
|
|
245
|
+
- Do not expose private data in logs or frontend responses.
|
|
246
|
+
- Confirm destructive operations with the user.
|
|
247
|
+
- **Package manager: pnpm.** Run `pnpm install` / `pnpm add` — never `npm install`. Never commit `package-lock.json` (the lockfile is `pnpm-lock.yaml`). The repo `.npmrc` sets `ignore-scripts=true`; pass `--ignore-scripts=false` only when a legitimate postinstall is required.
|
|
248
|
+
|
|
249
|
+
## Testing Expectations
|
|
250
|
+
|
|
251
|
+
- Every project should have unit tests.
|
|
252
|
+
- Run unit tests before committing meaningful code changes.
|
|
253
|
+
- Add or update tests when behavior changes.
|
|
254
|
+
- Prefer testing pure helpers for important logic instead of relying only on manual smoke tests.
|
|
255
|
+
|
|
256
|
+
## Completion Gate
|
|
257
|
+
|
|
258
|
+
A code task is not complete until all applicable docs are audited and updated. Use this mapping as the default trigger list:
|
|
259
|
+
|
|
260
|
+
- API route, auth, request, or response change -> `docs/API_REFERENCE.md`.
|
|
261
|
+
- Schema, persistence, state, entitlement, or data ownership change -> `docs/DATA_MODEL.md`.
|
|
262
|
+
- Runtime flow, folder structure, frontend/backend structure, or deployment topology change -> `docs/ARCHITECTURE.md` and usually `docs/README.md`.
|
|
263
|
+
- Repository entrypoint, top-level purpose, or first-read directions change -> root `README.md`.
|
|
264
|
+
- Asset/media addition, rename, optimization, or referenced path change -> `docs/ASSETS.md`.
|
|
265
|
+
- Launch requirement, environment variable, hosting, storage, or deployment checklist change -> `docs/DEPLOYMENT.md`.
|
|
266
|
+
- Product behavior, user flow, domain context, or design direction change -> `docs/PROJECT_CONTEXT.md`.
|
|
267
|
+
- Durable technical/product decision -> `docs/DECISIONS.md`.
|
|
268
|
+
- Blocking design/product decision surfaced (paired session, autonomous-run fork) -> `docs/OPEN_DECISIONS.md`.
|
|
269
|
+
- New dependency, vendored snippet, licensed asset, or font added/removed -> `docs/CREDITS.md`.
|
|
270
|
+
- License chosen / changed, copyright holder updated -> `LICENSE` (repo root).
|
|
271
|
+
- Notice-level dependency added/removed, Apache-2.0 component bundled -> `NOTICE` (repo root).
|
|
272
|
+
- AI host model, escalation rules, subagent roles, or autonomy tag scheme change -> `docs/AGENTS.md`.
|
|
273
|
+
- Any meaningful completed work -> `docs/CHANGELOG.md`.
|
|
274
|
+
- Any active/follow-up work or smoke-test need -> `docs/TODO.md`.
|
|
275
|
+
- Any completed TODO entry -> deleted from `docs/TODO.md` once captured in `docs/CHANGELOG.md`.
|
|
276
|
+
- Any completed roadmap item -> ✅ in `docs/ROADMAP.md` or moved under a `## Completed` section.
|
|
277
|
+
|
|
278
|
+
## End-of-Session Housekeeping
|
|
279
|
+
|
|
280
|
+
Before declaring a session complete, run through this short list:
|
|
281
|
+
|
|
282
|
+
1. **Delete shipped entries from `docs/TODO.md`** once captured in `docs/CHANGELOG.md`. No `[x] DONE` carryover.
|
|
283
|
+
2. **Mark completed `docs/ROADMAP.md` items with ✅** or move under `## Completed`.
|
|
284
|
+
3. **Update `docs/CHANGELOG.md`** with a dated one-line entry per meaningful change.
|
|
285
|
+
4. **Trim `docs/AUTONOMOUS_QUEUE.md`** if a queued item shipped (delete from queue; out-of-queue holdouts stay until reviewed).
|
|
286
|
+
5. **Trim `docs/OPEN_DECISIONS.md`** if any entries were answered this session and the answers have been folded into `docs/DECISIONS.md` or the matching `docs/TODO.md` entry. The file is a staging inbox, not a log.
|
|
287
|
+
6. **Reflect on the playbook**: add a proposal to `docs/PLAYBOOK_FEEDBACK.md` only if a real workflow-impact change surfaced — see `docs/AGENTS.md` Playbook Improvement Loop. Do NOT edit AGENTS / HANDOFF directly.
|
|
288
|
+
7. If a cross-repo dependency or sibling-repo arrangement changed, update the "Related Repos" section above and the matching section in each sibling's `HANDOFF.md` so the reference graph stays consistent (cross-link invariant).
|
|
289
|
+
8. If the remote fan-out, mirror-host list, or backup procedure changed, update the "Remotes & Backup" section above and any project-local `REMOTES.md`.
|