@michaelmusyoka/eng-os-kit 1.0.0 → 1.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/README.md CHANGED
@@ -9,20 +9,20 @@ Built for **Kilo Code**, and installs just as well into Claude Code, Roo Code, C
9
9
  Per project (recommended):
10
10
 
11
11
  ```bash
12
- npx eng-os-kit init
12
+ npx @michaelmusyoka/eng-os-kit init
13
13
  ```
14
14
 
15
15
  Every project on this machine:
16
16
 
17
17
  ```bash
18
- npx eng-os-kit init --global
18
+ npx @michaelmusyoka/eng-os-kit init --global
19
19
  ```
20
20
 
21
21
  Other agents:
22
22
 
23
23
  ```bash
24
- npx eng-os-kit init --agent claude
25
- npx eng-os-kit init --agent all
24
+ npx @michaelmusyoka/eng-os-kit init --agent claude
25
+ npx @michaelmusyoka/eng-os-kit init --agent all
26
26
  ```
27
27
 
28
28
  Then **reload your editor** — Kilo Code only reliably picks up new `SKILL.md` files on reload.
@@ -37,6 +37,8 @@ Then **reload your editor** — Kilo Code only reliably picks up new `SKILL.md`
37
37
  └── skills-code/ # code + UI skills, Code mode only
38
38
  .agent/
39
39
  ├── state/feature-registry.json # machine-validated project state
40
+ ├── state/project-context.md # living: stack, commands, conventions (kept current, not dated)
41
+ ├── state/roadmap.md # living: what's next, in order
40
42
  ├── state/known-issues.md
41
43
  ├── state/decision-log.md
42
44
  ├── templates/ # prompt, verification, ADR, incident, feature
@@ -48,28 +50,33 @@ Then **reload your editor** — Kilo Code only reliably picks up new `SKILL.md`
48
50
 
49
51
  | Command | Does |
50
52
  |---|---|
51
- | `npx eng-os-kit init` | install rules, skills and `.agent/` scaffolding |
52
- | `npx eng-os-kit add security-review test-strategy` | install a subset |
53
- | `npx eng-os-kit list` | every skill and its trigger description |
54
- | `npx eng-os-kit check` | run the enforcement scripts (CI-safe, exits non-zero) |
55
- | `npx eng-os-kit doctor` | what is installed where |
53
+ | `npx @michaelmusyoka/eng-os-kit init` | install rules, skills and `.agent/` scaffolding |
54
+ | `npx @michaelmusyoka/eng-os-kit add security-review test-strategy` | install a subset |
55
+ | `npx @michaelmusyoka/eng-os-kit list` | every skill and its trigger description |
56
+ | `npx @michaelmusyoka/eng-os-kit check` | run the enforcement scripts (CI-safe, exits non-zero) |
57
+ | `npx @michaelmusyoka/eng-os-kit doctor` | what is installed where |
56
58
 
57
59
  Flags: `--agent kilocode|claude|roo|cursor|codex|all`, `--global`, `--skills a,b`, `--link` (symlink so `npm update` propagates), `--force`, `--cwd <path>`.
58
60
 
59
61
  ## Skills
60
62
 
63
+ The work loop, start to finish: `project-scope → repo-inspection → implementation-prompt → (build) → test-strategy → code-review → change-handoff → release-gate`. Run `systematic-debugging` and `incident-response` whenever something breaks, wherever you are in that loop.
64
+
61
65
  | Skill | Mode | Triggers on |
62
66
  |---|---|---|
63
67
  | `engineering-contract` | all | starting non-trivial work, "what's the process" |
68
+ | `project-scope` | architect | new product, planning the next slice, "what's the plan" |
64
69
  | `repo-inspection` | architect | unfamiliar codebase, before any edit |
65
- | `implementation-prompt` | architect | auth/money/migrations/integrations, >3 files |
70
+ | `implementation-prompt` | architect | auth/money/migrations/integrations, >3 files, an undecided design |
66
71
  | `api-database-contract` | all | any endpoint, schema, migration, idempotency |
67
72
  | `security-review` | all | auth, permissions, uploads, payments, webhooks |
68
73
  | `test-strategy` | all | writing tests, "is this tested", bug found |
74
+ | `systematic-debugging` | all | something throws, fails, or behaves wrong |
69
75
  | `traceability-audit` | all | "is this done", before release |
70
76
  | `verification-evidence` | all | before claiming anything passed |
71
- | `release-gate` | all | before any production deploy |
72
77
  | `code-review` | code | reviewing a diff, after generating code |
78
+ | `change-handoff` | all | change is done, before PR/merge/release |
79
+ | `release-gate` | all | before any production deploy |
73
80
  | `incident-response` | all | production broken, writing a postmortem |
74
81
  | `signature-dark-ui` | code | any UI work |
75
82
 
package/bin/eng-os.mjs CHANGED
@@ -100,7 +100,7 @@ function cmdInit() {
100
100
  const root = base();
101
101
  const opts = { force: flag("force"), link: flag("link") };
102
102
 
103
- say(`${c.b}eng-os-kit ${pkg.version}${c.x} → ${root}\n`);
103
+ say(`${c.b}${pkg.name} ${pkg.version}${c.x} → ${root}\n`);
104
104
 
105
105
  for (const name of agents) {
106
106
  const target = resolveTarget(name);
@@ -135,18 +135,18 @@ function cmdInit() {
135
135
  }
136
136
  ok(".agent/ state, templates and scripts ready");
137
137
  say(`\n${c.d}Next:${c.x} reload your editor, then ask the agent: "read the engineering contract and run discovery".`);
138
- say(`${c.d}Enforce:${c.x} npx eng-os check`);
138
+ say(`${c.d}Enforce:${c.x} npx ${pkg.name} check`);
139
139
  }
140
140
 
141
141
  function cmdList() {
142
- say(`${c.b}Skills in eng-os-kit ${pkg.version}${c.x}\n`);
142
+ say(`${c.b}Skills in ${pkg.name} ${pkg.version}${c.x}\n`);
143
143
  for (const s of allSkills()) {
144
144
  const fm = frontmatter(s);
145
145
  say(`${c.b}${s}${c.x}${fm.mode ? c.d + " [mode: " + fm.mode + "]" + c.x : ""}`);
146
146
  say(` ${c.d}${fm.description || ""}${c.x}\n`);
147
147
  }
148
- say(`${c.d}Install all: npx eng-os-kit init${c.x}`);
149
- say(`${c.d}Install some: npx eng-os-kit add security-review test-strategy${c.x}`);
148
+ say(`${c.d}Install all: npx ${pkg.name} init${c.x}`);
149
+ say(`${c.d}Install some: npx ${pkg.name} add security-review test-strategy${c.x}`);
150
150
  }
151
151
 
152
152
  function cmdAdd() {
@@ -194,14 +194,14 @@ function cmdDoctor() {
194
194
  }
195
195
 
196
196
  function cmdHelp() {
197
- say(`${c.b}eng-os-kit${c.x} ${pkg.version} — engineering operating system for AI coding agents
197
+ say(`${c.b}${pkg.name}${c.x} ${pkg.version} — engineering operating system for AI coding agents
198
198
 
199
199
  ${c.b}Usage${c.x}
200
- npx eng-os-kit init [options] install rules + all skills + .agent scaffolding
201
- npx eng-os-kit add <skill...> install specific skills only
202
- npx eng-os-kit list list bundled skills and their triggers
203
- npx eng-os-kit check run the enforcement scripts (CI-safe)
204
- npx eng-os-kit doctor show what is installed where
200
+ npx ${pkg.name} init [options] install rules + all skills + .agent scaffolding
201
+ npx ${pkg.name} add <skill...> install specific skills only
202
+ npx ${pkg.name} list list bundled skills and their triggers
203
+ npx ${pkg.name} check run the enforcement scripts (CI-safe)
204
+ npx ${pkg.name} doctor show what is installed where
205
205
 
206
206
  ${c.b}Options${c.x}
207
207
  --agent <name> kilocode (default) | claude | roo | cursor | codex | all
@@ -212,10 +212,10 @@ ${c.b}Options${c.x}
212
212
  --cwd <path> target project directory
213
213
 
214
214
  ${c.b}Examples${c.x}
215
- npx eng-os-kit init # Kilo Code, this project
216
- npx eng-os-kit init --agent kilocode --global # every project on this machine
217
- npx eng-os-kit init --link # stay in sync with npm updates
218
- npx eng-os-kit add security-review --agent roo
215
+ npx ${pkg.name} init # Kilo Code, this project
216
+ npx ${pkg.name} init --agent kilocode --global # every project on this machine
217
+ npx ${pkg.name} init --link # stay in sync with npm updates
218
+ npx ${pkg.name} add security-review --agent roo
219
219
  `);
220
220
  }
221
221
 
package/package.json CHANGED
@@ -1,14 +1,36 @@
1
1
  {
2
2
  "name": "@michaelmusyoka/eng-os-kit",
3
- "version": "1.0.0",
4
- "description": "Production engineering operating system for AI coding agents: rules, Agent Skills, templates and enforcement scripts. Installs into Kilo Code, Claude Code, Roo, Cursor or any Agent Skills compatible agent.",
5
- "keywords": ["kilocode", "kilo-code", "agent-skills", "skill", "claude-code", "roo-code", "ai-agent", "engineering-standards"],
3
+ "version": "1.1.0",
4
+ "description": "Production engineering operating system for AI coding agents: rules, Agent Skills, templates and enforcement scripts. 14 skills covering the full loop from scope to shipped. Installs into Kilo Code, Claude Code, Roo, Cursor or any Agent Skills compatible agent.",
5
+ "keywords": [
6
+ "kilocode",
7
+ "kilo-code",
8
+ "agent-skills",
9
+ "skill",
10
+ "claude-code",
11
+ "roo-code",
12
+ "ai-agent",
13
+ "engineering-standards"
14
+ ],
6
15
  "license": "MIT",
7
16
  "type": "module",
8
- "engines": { "node": ">=18" },
9
- "bin": { "eng-os": "bin/eng-os.mjs" },
10
- "files": ["bin", "lib", "rules", "skills", "templates", "scripts", "state", "README.md"],
17
+ "engines": {
18
+ "node": ">=18"
19
+ },
20
+ "bin": {
21
+ "eng-os": "bin/eng-os.mjs"
22
+ },
23
+ "files": [
24
+ "bin",
25
+ "lib",
26
+ "rules",
27
+ "skills",
28
+ "templates",
29
+ "scripts",
30
+ "state",
31
+ "README.md"
32
+ ],
11
33
  "scripts": {
12
34
  "selftest": "node bin/eng-os.mjs list && node bin/eng-os.mjs --help"
13
35
  }
14
- }
36
+ }
@@ -25,7 +25,10 @@ Surface material conflicts. Do not resolve them silently.
25
25
 
26
26
  `IMPLEMENTED` means code exists. It never means done. Only `VERIFIED` (evidence recorded) and `PRODUCTION_READY` (release gate passed) do.
27
27
 
28
- Track every feature in `.agent/state/feature-registry.json`. Conversation memory is not project state.
28
+ Track every feature in `.agent/state/feature-registry.json`. Read and keep current `.agent/state/project-context.md` (stack, commands, conventions — see `repo-inspection`) and `.agent/state/roadmap.md` (what's next — see `project-scope`). Conversation memory is not project state; these files are.
29
+
30
+ ## Fresh sessions at handoffs
31
+ Because state lives in files, not conversation, prefer starting a new session at major boundaries — after a merge, before the next feature — rather than continuing one long thread. The files carry the context forward; a shorter session costs less and drifts less. This also makes `code-review`'s second-opinion pass more honest.
29
32
 
30
33
  ## Blocked
31
34
  When a dependency, credential or decision is missing, stop and report: blocker, impact, what resolution is needed, what you could still verify. Never invent a dependency response.
@@ -48,4 +51,4 @@ UI → route/API → authentication → authorization → validation → service
48
51
  Keep it short. Detail belongs in `.agent/prompts/`, `.agent/verification/` and `.agent/audits/`.
49
52
 
50
53
  ## Skills available
51
- `repo-inspection`, `implementation-prompt`, `api-database-contract`, `security-review`, `test-strategy`, `traceability-audit`, `verification-evidence`, `release-gate`, `code-review`, `incident-response`, `signature-dark-ui`. Load the one that fits; do not work from memory of these standards.
54
+ `project-scope`, `repo-inspection`, `implementation-prompt`, `api-database-contract`, `security-review`, `test-strategy`, `systematic-debugging`, `traceability-audit`, `verification-evidence`, `code-review`, `change-handoff`, `release-gate`, `incident-response`, `signature-dark-ui`. Load the one that fits; do not work from memory of these standards.
@@ -13,9 +13,11 @@ SECRET_PATTERN='(AKIA[0-9A-Z]{16})|(sk_live_[0-9a-zA-Z]{10,})|(-----BEGIN (RSA |
13
13
  EXCLUDES=(--exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist --exclude-dir=build
14
14
  --exclude-dir=.next --exclude-dir=coverage --exclude-dir=vendor --exclude-dir=.venv
15
15
  --exclude-dir=__tests__ --exclude-dir=tests --exclude-dir=test --exclude-dir=e2e
16
- --exclude-dir=.agent --exclude-dir=.kilocode --exclude-dir=.claude
16
+ --exclude-dir=.agent --exclude-dir=.kilocode --exclude-dir=.claude --exclude-dir=.roo
17
+ --exclude-dir=.cursor --exclude-dir=.agents --exclude-dir=.github
17
18
  --exclude=*.test.* --exclude=*.spec.* --exclude=*.md --exclude=*.lock --exclude=*.map
18
- --exclude=placeholder-audit.sh --exclude=validate-registry.mjs --exclude=capture-evidence.sh)
19
+ --exclude=placeholder-audit.sh --exclude=validate-registry.mjs --exclude=capture-evidence.sh
20
+ --exclude=eng-os.mjs)
19
21
 
20
22
  fail=0
21
23
  scan() {
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: change-handoff
3
+ description: Write the PR description, changelog entry, and release note from the actual diff, then reconcile the feature registry and known issues to what really shipped. Use this when a change is finished and ready for review or merge, before opening a pull request, and before tagging a release. Load this instead of writing the PR body from memory of the original plan.
4
+ ---
5
+
6
+ # Change Handoff
7
+
8
+ Implementation drifts from the plan. Write the human-facing summary from `git diff`, not from the implementation prompt you started with — they are often no longer the same thing.
9
+
10
+ ## PR description
11
+ - **What changed and why** — in the diff's own terms, not the ticket's
12
+ - **How it was verified** — point at the evidence in `.agent/verification/`, don't restate it
13
+ - **Breaking changes / migration notes** — explicit, even if "none"
14
+ - **Linked feature ID** from the registry
15
+
16
+ ## Changelog entry
17
+ Group under `Added` / `Changed` / `Fixed` / `Security` / `Removed` (Keep a Changelog style). One line per entry, user-facing language — "what changed for someone using this," not internal refactor detail unless it affects them.
18
+
19
+ ## Release note
20
+ Only for user-facing changes in a tagged release. Skip internal-only changes.
21
+
22
+ ## Reconcile state — do this before calling the change done
23
+ Implementation and planning drift during real work. Close the loop:
24
+ - Update the feature's `status` and `evidence` in `.agent/state/feature-registry.json` to match what actually merged — not what was originally scoped
25
+ - If a decision got made mid-implementation that wasn't in the original prompt, add it to `.agent/state/decision-log.md`
26
+ - If this change resolves an entry in `.agent/state/known-issues.md`, remove it; if it introduces a new deferred item, add it
27
+ - If the stack, commands, or conventions changed, update `.agent/state/project-context.md` (see `repo-inspection`) so the next session isn't working from stale facts
28
+ - If this closes or reorders an item in `.agent/state/roadmap.md`, update it (see `project-scope`)
29
+
30
+ A change is not handed off until the files, not just the code, reflect reality. The next session — yours or someone else's — reads these files, not this conversation.
31
+
32
+ ## Postmortems
33
+ For a production incident writeup, use `incident-response` instead — this skill is for routine merges, not outages.
@@ -29,6 +29,9 @@ Logging without sensitive data, metrics for the new failure mode, migration safe
29
29
  ## Reviewing your own output
30
30
  Look specifically for: leftover mocks, hardcoded values that should be config, copy-pasted blocks with one unchanged variable, an `await` that was dropped, error handlers that log and continue when they should abort, and confident code paths you never executed.
31
31
 
32
+ ## Second opinion
33
+ A reviewer that already believes its own code is correct misses fewer of its own mistakes at random, not zero. For anything critical, prefer running this review in a fresh session — a new conversation with no memory of writing the code, or a different model — rather than immediately after implementing. Ask the same questions above as if handed someone else's diff with no context.
34
+
32
35
  ## Output
33
36
  ```
34
37
  ## Blocking
@@ -36,3 +36,8 @@ Good: "A valid payment request creates exactly one payment record and returns it
36
36
 
37
37
  ## After approval
38
38
  Implement strictly to the prompt. If reality forces a deviation, amend the prompt and say so in the report — do not silently expand scope.
39
+
40
+ ## The gate
41
+ If building this feature would mean inventing an undecided architectural choice — which provider, what data model, how a page should look, which library — stop and write the decision here before continuing. Do not quietly pick one and move on; that decision becomes invisible the moment the session ends.
42
+
43
+ You may proceed without full approval only when the user explicitly says to. If they do, the decision is not free: write it to `.agent/state/decision-log.md` tagged `ASSUMED — needs ratification`, and add a matching note on the feature's registry entry. Leave the flag in place until someone deliberately revisits and confirms or overturns it — it is a reminder that a decision is owed, not a blocker on shipping. `traceability-audit` should treat an unresolved `ASSUMED` flag on a `critical` feature as a finding.
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: project-scope
3
+ description: Turn a product idea into a living, ordered plan of what to build next, and keep it current as work ships. Use this when starting a new product, when planning the next slice of work on an existing one, when asked "what should we build" or "what's the plan" at the whole-project level, or when the feature registry has entries but no sense of order. Distinct from traceability-audit (is a specific thing done) and implementation-prompt (how to build one feature) — this is what's next, across the whole project.
4
+ mode: architect
5
+ ---
6
+
7
+ # Project Scope
8
+
9
+ The feature registry tracks status once a feature exists. This skill decides what gets a registry entry next, and in what order.
10
+
11
+ ## Output
12
+ `.agent/state/roadmap.md` — a short, ordered list of slices (not a full backlog dump):
13
+ ```
14
+ ## Now
15
+ - [ ] F-00X — <slice> — <why this one is next>
16
+
17
+ ## Next
18
+ - [ ] <slice> — depends on F-00X
19
+
20
+ ## Later
21
+ - <coarse, unordered — don't over-plan work you'll re-scope anyway>
22
+ ```
23
+ Coarse and current beats detailed and stale. Re-derive order after every merge that changes what's next (see `change-handoff`).
24
+
25
+ ## Starting a new product (greenfield)
26
+ 1. Scope the idea into ordered slices, thinnest first.
27
+ 2. Decide the stack and architecture (`implementation-prompt`) before scaffolding — the roadmap depends on what's feasible.
28
+ 3. Scaffold the project.
29
+ 4. Run `repo-inspection` on the *real* scaffolded project to seed `.agent/state/project-context.md` — not on an empty repository.
30
+ 5. Enter the feature loop per slice: `implementation-prompt` → build → `test-strategy` → `code-review` → `change-handoff`.
31
+
32
+ ## Adding to an existing product (brownfield)
33
+ 1. Run `repo-inspection` first — the plan must account for what already exists, not assume a blank slate.
34
+ 2. Enroll existing functionality into the registry at whatever status it actually has (don't backfill fake `VERIFIED` status for old code no one has evidence for — mark it honestly, e.g. `IMPLEMENTED` with a note).
35
+ 3. Plan the next slice on top of that reality.
36
+
37
+ ## Monorepo
38
+ One roadmap per workspace: `.agent/state/roadmap-<workspace>.md`, each with its own ordering, since workspaces ship independently.
39
+
40
+ ## Depth is a judgement call, not a fixed track
41
+ Not every slice needs every gate in the work loop. A throwaway prototype might skip straight to `develop` and a self-check; a critical, user-facing slice should run the full loop through `code-review` and `change-handoff`. Decide the depth per slice and say so in the roadmap entry — don't apply the heaviest process to a one-off script, and don't skip verification on anything touching auth, money, or data because the rest of the project moves fast.
42
+
43
+ ## Rule
44
+ This file records decisions about order and scope, not a copy of the registry's detail. If it starts duplicating `feature-registry.json`, it has grown past what it's for — prune it back to the next few slices.
@@ -19,15 +19,22 @@ Never assume structure. Read it.
19
19
  8. CI workflows and deployment config
20
20
  9. Project skills and installed framework docs (for fast-moving frameworks, read the installed docs rather than trusting memory)
21
21
 
22
- ## Produce a discovery note in `.agent/audits/discovery-<date>.md`
23
- - technology inventory with versions
24
- - repository map
25
- - existing feature inventory
26
- - auth and permission model as actually implemented
27
- - test inventory and how to run each layer
28
- - deployment path: what triggers a deploy, what gates exist
29
- - security observations
30
- - **unknowns** list them; do not fill them with guesses
22
+ ## Two outputs, not one
23
+
24
+ **A dated snapshot**, `.agent/audits/discovery-<date>.md` — the full inspection as of today: technology inventory with versions, repository map, existing feature inventory, auth and permission model as actually implemented, test inventory and how to run each layer, deployment path, security observations, and **unknowns** — list them; do not fill them with guesses. This is a point-in-time record; never edit an old one.
25
+
26
+ **A living context file**, `.agent/state/project-context.md` the current facts every other skill relies on, kept up to date rather than re-derived each session:
27
+ ```
28
+ ## Stack
29
+ ## Commands (build, dev, lint, typecheck, test — the ones that actually work)
30
+ ## Test framework (and how test-strategy should invoke it)
31
+ ## Conventions (naming, file layout, patterns already in use)
32
+ ## Auth model
33
+ ## Deployment path
34
+ ```
35
+ Create it if it doesn't exist; update it — don't append a new dated copy — whenever the facts change (a dependency upgrade, a new test runner, a changed deploy path). `change-handoff` updates this file too when a merge changes any of the above. Stale facts here are worse than no file: they get trusted.
36
+
37
+ For a monorepo, write one context file per workspace: `.agent/state/context-<workspace>.md`.
31
38
 
32
39
  ## Red flags to record immediately
33
40
  - a deploy that fires without a passing test gate
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: systematic-debugging
3
+ description: A disciplined root-cause loop for anything that throws, fails, or behaves wrong — as opposed to incident-response, which is for live production outages. Use this the moment something breaks during development, when a test fails unexpectedly, when behaviour doesn't match the spec, or before proposing any fix. Load this instead of guessing and editing until it goes away.
4
+ ---
5
+
6
+ # Systematic Debugging
7
+
8
+ Guessing and re-running is not debugging. It burns time and often "fixes" the symptom while the cause ships anyway.
9
+
10
+ ## Loop
11
+ 1. **Reproduce.** If you cannot reliably reproduce it, that is the first finding, not an excuse to guess. Note the exact input, state, and steps.
12
+ 2. **Read before theorizing.** The full error, stack trace, and the actual line it points to — not the line you assume is wrong.
13
+ 3. **Bisect.** If this used to work, find the exact commit or change that broke it (`git bisect`, or narrow by feature flag/branch) before reading a single line of application logic. This is faster than reasoning about a large diff.
14
+ 4. **Instrument, don't speculate.** Prefer a log line, a breakpoint, or a failing assertion that proves where reality diverges from your model, over editing code on a hunch.
15
+ 5. **One hypothesis at a time.** State it, predict what a specific check will show if it's true, run the check. Do not change two things at once — you will not know which one mattered.
16
+ 6. **Find the root cause, not the nearest symptom.** A null check that silences a crash is not a fix if the value should never have been null. Trace back to where the invalid state was produced.
17
+ 7. **Time-box.** After three failed hypotheses, stop and re-read the actual requirement and the actual data. Most stuck debugging comes from an unexamined assumption made in step 1.
18
+
19
+ ## Before you call it fixed
20
+ - Can you explain, in one sentence, why the bug happened? If not, you have a workaround, not a fix.
21
+ - Hand a regression test to `test-strategy` that fails on the old code and passes on the new. Reference the defect in the test name.
22
+ - If the root cause is systemic (a missing validation layer, a whole class of unguarded null values, a pattern repeated elsewhere), record it in `.agent/state/known-issues.md` rather than fixing only the one instance you tripped over.
23
+
24
+ ## Traps to name out loud when you notice them
25
+ - "It works now" without knowing why — the bug likely still exists, just relocated.
26
+ - Patching around a flaky test instead of finding the race condition — flag it, don't hide it.
27
+ - Fixing in the UI what is actually a server-side authorization or validation gap (check `security-review`).
28
+ - A fix that only works for the exact input you tested — check the boundary and the empty/null case too.
29
+
30
+ ## Escalate rather than fabricate
31
+ If you cannot reproduce it, cannot access the environment where it happens, or the fix requires a decision you're not authorized to make, say so plainly and mark the item `BLOCKED` per `engineering-contract`. Do not report a fix you have not actually verified.
@@ -34,3 +34,6 @@ Every material defect gets a test that fails before the fix and passes after. Re
34
34
 
35
35
  ## Release blockers
36
36
  Do not release with failing critical tests, failing security tests, a failing type check, a failing production build, failing critical E2E, unverified migrations, or unresolved critical vulnerabilities.
37
+
38
+ ## Don't re-derive the framework every session
39
+ The first time you work out how tests actually run here — framework, config, the real command, per-package differences in a monorepo — write it to `.agent/state/project-context.md` (see `repo-inspection`). Future sessions read that instead of searching the repo again.
@@ -0,0 +1,25 @@
1
+ # Project Context
2
+
3
+ Kept current, not a dated snapshot — see `repo-inspection`. Overwrite sections in place when facts change; do not append duplicate copies.
4
+
5
+ ## Stack
6
+
7
+
8
+ ## Commands
9
+ - build:
10
+ - dev:
11
+ - lint:
12
+ - typecheck:
13
+ - test:
14
+
15
+ ## Test framework
16
+
17
+
18
+ ## Conventions
19
+
20
+
21
+ ## Auth model
22
+
23
+
24
+ ## Deployment path
25
+
@@ -0,0 +1,12 @@
1
+ # Roadmap
2
+
3
+ Coarse and current beats detailed and stale — see `project-scope`. For a monorepo, use `roadmap-<workspace>.md` per workspace.
4
+
5
+ ## Now
6
+
7
+
8
+ ## Next
9
+
10
+
11
+ ## Later
12
+