riskrails 3.2.2 → 4.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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +50 -84
- package/agents/ai-reviewer.md.tmpl +1 -1
- package/ai/using-riskrails.md +0 -3
- package/bin/menu.js +116 -0
- package/bin/riskrails.js +132 -79
- package/hooks/ai-path-guard-defaults.json +1 -1
- package/hooks/context-guard.py +2 -4
- package/hooks/guard/dialog.py +14 -2
- package/hooks/guard/paths.py +3 -6
- package/hooks/guard/scope.py +1 -3
- package/hooks/runtime-gate.py +18 -58
- package/instructions/routing.md +2 -2
- package/package.json +1 -1
- package/scripts/ai-path +1 -1
- package/scripts/resolve-profile.py +0 -3
- package/skills/ai-audit/templates/ai-sdlc-adoption-plan.md +1 -1
- package/skills/ai-audit/templates/play-scoring-rubric.md +1 -1
- package/skills/ai-init/scaffold-ai.sh +2 -1
- package/skills/ai-init/templates/.ai/AGENTS.md +6 -6
- package/skills/ai-init/templates/.ai/VERSION +1 -1
- package/skills/ai-init/templates/.ai/policies/safety.md +4 -3
- package/skills/ai-init/templates/.ai/policies/security.md +1 -2
- package/skills/ai-init/templates/.ai/policies/testing.md +5 -12
- package/skills/ai-init/templates/.ai/policies/verification.md +18 -0
- package/skills/ai-init/templates/.ai/policies/weight.json +0 -1
- package/skills/ai-init/templates/.ai/policies/weight.md +1 -2
- package/skills/ai-init/templates/.ai/policies/weight.project.json +4 -0
- package/skills/ai-init/templates/.ai/project/architecture.md +1 -1
- package/skills/ai-init/templates/.ai/project/initial-assessment.md +2 -2
- package/skills/ai-init/templates/.ai/project/overview.md +1 -1
- package/skills/ai-init/templates/.ai/rules/README.md +2 -2
- package/skills/ai-init/templates/.ai/state/README.md +1 -1
- package/skills/ai-task/memory_store.py +8 -9
- package/skills/ai-task/rr_state/cli.py +2 -2
- package/skills/ai-task/rr_state/dialog.py +2 -4
- package/skills/ai-task/rr_state/dialog_cmd.py +183 -6
- package/skills/ai-task/rr_state/fs.py +5 -13
- package/skills/ai-task/rr_state/labels.py +14 -2
- package/skills/ai-task/rr_state/memory_cmd.py +7 -4
- package/skills/ai-task/rr_state/profile.py +2 -4
- package/skills/ai-task/rr_state/questions_cmd.py +1 -1
- package/skills/ai-task/rr_state/report.py +3 -4
- package/skills/ai-task/rr_state/runtime.py +1 -1
- package/skills/ai-task/rr_state/start.py +7 -7
- package/skills/ai-task/sensors.py +10 -11
- package/skills/ai-task/state.py +4 -24
- package/skills/ai-task/weight.py +17 -17
- package/skills/ai-task/weight_overlay.py +38 -0
- package/skills/project-init/templates/constitution.md +2 -2
- package/skills/project-update/history/blobs/00f5e27ce2d66e3a1d8b222b013ae8fa1fed32612d91a551e0c661cee3ef9c2d +34 -0
- package/skills/project-update/history/blobs/0a6b1b6dd06a35582b2e9989a1f41c40abc29254b8e482714fcc6f0a7b16c406 +32 -0
- package/skills/project-update/history/blobs/0aeb04b04262683cac6513545683486a73dc473b447bba43b5aaab18403957a6 +34 -0
- package/skills/project-update/history/blobs/0ce913a28996f546f72d570b0e5a376362e993ce4d805bc4aae57d38caa44212 +41 -0
- package/skills/project-update/history/blobs/0ea9e36446b624b73b2a821231b2ee66a357b43d584a5b23da48b3c800855e65 +41 -0
- package/skills/project-update/history/blobs/0fb1d68678a1349195b2e79433bb20174d25874e3bfd0b70410bb4e428b4e4b8 +35 -0
- package/skills/project-update/history/blobs/119b2b9d0f9c647a243540724edac6b29afa020c69aa205797bcfa9eb06bc021 +35 -0
- package/skills/project-update/history/blobs/1d0fe3ee5fb8260ba610942d4bbdfff7410fbe80ed826ac07f32985031dc2b3f +34 -0
- package/skills/project-update/history/blobs/1de9a37ed6402893dcab6e61ddbf15ffd35f15a6d84b18e675a0c5bf4e981f85 +42 -0
- package/skills/project-update/history/blobs/1f44e1a236233dcbab58064f39b69f798b35d1d9a29f8c615b5b12854ce633cb +15 -0
- package/skills/project-update/history/blobs/1f824645299579cbdd8141642ddbb4bca9fd5fe9d3112f036d8221f0811e0abf +40 -0
- package/skills/project-update/history/blobs/235fb88393cfe20dd58b35fe9785cc45baf5ffe21a13d926652d76ec68cea8b7 +35 -0
- package/skills/project-update/history/blobs/3918b4ee011d9477b9d2779e2893ab599749c406d4b09439a9748b64fbff58f3 +18 -0
- package/skills/project-update/history/blobs/449273200dfec2a56885c881ff34d40e8ecc00da53c24c2d09b7fbeb1004d255 +40 -0
- package/skills/project-update/history/blobs/4c45aee9b9fc5f6b4e1d9739e434c4094975a5a8dec6b9703fb25f3080680c77 +124 -0
- package/skills/project-update/history/blobs/4dd3fa12bc45acc8c836ab65d790248ca7504a021bca6677499d17bb3d798ed9 +64 -0
- package/skills/project-update/history/blobs/51e3f15095d7123ea8566b512479ee10a6cb2f336b7352a259a083a887bd7116 +33 -0
- package/skills/project-update/history/blobs/5497a204967bea7dab29079a6e1dfa3d8713b2d2cb294c2779378039f03a55fc +36 -0
- package/skills/project-update/history/blobs/60c4d7e7fde7049d92d84295fc13ca9a91eb2de423be08f093b3ee5d5e817ff8 +64 -0
- package/skills/project-update/history/blobs/6221b7c14cc04634e485e562d464c6860d45666a7f63e293c06bb2944ff556cc +27 -0
- package/skills/project-update/history/blobs/637971cfb844ef4285e2886a4b1c834fb2ed5c46e773adb88c2c147fea626ad3 +33 -0
- package/skills/project-update/history/blobs/65af2282eea2a51fcc27a4acf2c26c727b0961c30e1be13176369200c460c219 +34 -0
- package/skills/project-update/history/blobs/66ecd73e303e7bbc1aa8ee72435d0d10812ff7b2eff0adac59bbf0a303e2cc01 +41 -0
- package/skills/project-update/history/blobs/6a43bf32461b22b87fafe2865529dc04fa66cd00182a2a7598aa071667ca255a +35 -0
- package/skills/project-update/history/blobs/6d6dee8634abf9ac057bb206828b83a893a2afcf4f86bbe69e839a3b47d0adde +48 -0
- package/skills/project-update/history/blobs/7224ede803ea81e65a456e21b6028a0e848e8a880456c6503eebe7534ca4f6aa +74 -0
- package/skills/project-update/history/blobs/765a39a202617096c232017822ae738d37e4405430c71700dc7bc14bf1ba794e +33 -0
- package/skills/project-update/history/blobs/77577440a933d1cabd8c6f4a6401cf361a784aa09a25500a6f7b44ead8ab5e55 +41 -0
- package/skills/project-update/history/blobs/7bae90789625d6fb9071ecb412d14a8d1eb0bc5659d8d284c4eaf213e1b5de56 +67 -0
- package/skills/project-update/history/blobs/7bcdf9a0e6b85277b9b60669150224b9414d2e32821ff06f4d148eb1d18785bb +42 -0
- package/skills/project-update/history/blobs/7f834103e9d97aea44e76717bcdcbbe349c560e5b81a42ce85a1cec341041281 +4 -0
- package/skills/project-update/history/blobs/7fb3acb0211818efebc2234863db0b8c846022a7280a6d2d69f267dbf63db48c +34 -0
- package/skills/project-update/history/blobs/87f0855859ff68cc6c988cc0b631ee7f56af7fbba062172bf80e01f4982cc054 +35 -0
- package/skills/project-update/history/blobs/8abab74759766d02b5cb7b0c3e59a3d440b25a454216cd8fea325c23fd822d36 +33 -0
- package/skills/project-update/history/blobs/8ec171f0fbdf38cc6996d496f01491fd1f21f04a435a118ad979b127a8be06f1 +85 -0
- package/skills/project-update/history/blobs/a1fb50e6c86fae1679ef3351296fd6713411a08cf8dd1790a4fd05fae8688164 +1 -0
- package/skills/project-update/history/blobs/a3df7268feb0780be0d2cf9acced6ed81780a7790f36fe024b6ea0b1bd6eb7a6 +35 -0
- package/skills/project-update/history/blobs/b28721136482dafb9fd2801af340364cb97e9f6eaa987908606c786045b8d334 +28 -0
- package/skills/project-update/history/blobs/b3726422d767f9219fea633bea77f0c99ad9af843c591e6e928e1ccd2a47f374 +27 -0
- package/skills/project-update/history/blobs/b3839425f9d0ab2efa42a6f5e9488ec2d26ca5fb8dcd694b8ab098e10743ca46 +32 -0
- package/skills/project-update/history/blobs/ba14a457e83f9dde65e4190fdfab83b912f7398c1442a2a1cb3d89bfac741cf3 +8 -0
- package/skills/project-update/history/blobs/bceb7189444bb6291b262ca08e34db01010dda2f6e64d696231ec3c343c95c66 +34 -0
- package/skills/project-update/history/blobs/bf82a2bb4fce1bd349ff66118930a01d61a7af8e2bd8d200c721d43afc58c713 +34 -0
- package/skills/project-update/history/blobs/c4dbeb180292a6199ad73a3be861ece07c1f8bf6bf0cc7ca204412bc8e1bb1d8 +31 -0
- package/skills/project-update/history/blobs/c644838866df2001a42501a988dd7b77aacf862bf09d22b465f3cd8a22c6b6eb +33 -0
- package/skills/project-update/history/blobs/c980d74f76a4bdfb38c94b573ac10a54eb50b850b052e15fa6f2442889b36ccb +32 -0
- package/skills/project-update/history/blobs/ceed2f3bd937f862d0e6ca59ce1b1e3603e19a0d7f85d90d6dfeb7bf690153be +29 -0
- package/skills/project-update/history/blobs/d51ea2e893482a20c5882056cf8043327ca1dc1c957927f6746929a47ee8368e +45 -0
- package/skills/project-update/history/blobs/d78f5e0bb1380259fce2cce009785a9a11f6de8b87a160080b9872c059f95060 +34 -0
- package/skills/project-update/history/blobs/d97f46a2cca020406252b1f7baa4184617fa71faca3885e2379c44ae4e1d9327 +67 -0
- package/skills/project-update/history/blobs/da3ecd4c4c414c93d04488685931df39a56bf959bfeb9c45cb1aea2c13bd991b +38 -0
- package/skills/project-update/history/blobs/e129bf71a5a922e24b2c1bc8daa8a5d2b5589b0069770e17ce17e7db5ed4e7a4 +27 -0
- package/skills/project-update/history/blobs/e504529519a371892838725f8b89b5d32e3300e345bcbf2643a3a1a48434b3dd +24 -0
- package/skills/project-update/history/blobs/e9e62d03ca70b3dffccef8dceeb214173352cfef005145e519f0e037993f1c03 +36 -0
- package/skills/project-update/history/blobs/effefbaaf4beb8f1ba55081d6b7e74bf25ebb91045dd10613418f17b95fa7182 +33 -0
- package/skills/project-update/history/blobs/f6af4581bafbf62b257d57e06c3ae2c5998aeca608ee7df037fcc3c3e4b563a9 +34 -0
- package/skills/project-update/history/blobs/fc35045777d29630303430752a651b3e553580a581036a02cc103eb96a46f4b0 +34 -0
- package/skills/project-update/history/blobs/fdc21345c77f92a42d244aa104f393f439a0ff9981a9fd462bd837e8a47931bb +48 -0
- package/skills/project-update/history/index.json +34 -14
- package/skills/project-update/render_instructions.py +12 -45
- package/skills/project-update/update.py +757 -1172
- package/skills/rr-setup/SKILL.md +114 -97
- package/skills/rr-setup/scaffold_ai.py +15 -9
- package/skills/rr-setup/setup.py +462 -164
- package/skills/rr-status/status.py +7 -10
- package/skills/usage-report/usage-report.py +4 -5
- package/skills/ai-audit/SKILL.md +0 -9
- package/skills/ai-init/SKILL.md +0 -9
- package/skills/ai-status/SKILL.md +0 -9
- package/skills/ai-task/SKILL.md +0 -9
- package/skills/project-init/SKILL.md +0 -9
- package/skills/project-update/SKILL.md +0 -9
- package/skills/project-update/adopt-map.json +0 -91
- package/skills/project-update/adopt.py +0 -2225
- package/skills/project-update/migrations/0001_schema_version.py +0 -13
- package/skills/project-update/migrations/0002_task_journal.py +0 -123
- package/skills/project-update/migrations/0003_context_diet.py +0 -65
- package/skills/project-update/migrations/0004_deterministic_gates.py +0 -57
- package/skills/project-update/migrations/0005_runtimes_and_plans.py +0 -35
- package/skills/project-update/migrations/0006_shared_files.py +0 -154
- package/skills/project-update/migrations/0007_weight_model.py +0 -295
- package/skills/project-update/migrations/0008_renames.py +0 -43
- package/skills/project-update/migrations/0009_state_file.py +0 -25
- package/skills/project-update/migrations/0010_dialog_switch.py +0 -30
- package/skills/project-update/migrations/0011_retire_risk_tiers.py +0 -37
- package/skills/project-update/migrations/README.md +0 -76
- package/skills/project-update/migrations/__init__.py +0 -186
- package/skills/sdlc-intent/SKILL.md +0 -9
- package/skills/sdlc-plan/SKILL.md +0 -9
- package/skills/sdlc-spec/SKILL.md +0 -9
- package/skills/usage-report/SKILL.md +0 -10
- /package/{ai/workflows/refactoring.md → skills/project-update/history/blobs/36cb593293496fbcf38df828a9b9b2bc0d5a53333f584a5319ebc3d799016e24} +0 -0
- /package/{ai/workflows/feature.md → skills/project-update/history/blobs/56e16072c2f3edc6c8897c690d09a11d12fc414c3e3f361f359f7dc609a21282} +0 -0
- /package/{ai/workflows/hotfix.md → skills/project-update/history/blobs/8cbefbf1aa412bae3e5019acd40b8fe0598fceba6c781906b3bc6dbd014f6b23} +0 -0
- /package/{ai/workflows/bugfix.md → skills/project-update/history/blobs/af56dc16e44ae1d8c3dac4c3ca82e2163b719553c02ea455e77430bab9a14089} +0 -0
- /package/{ai/workflows/investigation.md → skills/project-update/history/blobs/b9e09cb24958cd6831589997558974bd6356305306e8f9685e226bcdc30d60ac} +0 -0
- /package/{ai/agents/manager.md → skills/project-update/history/blobs/d0cf6388f35a92a0cf607d33909278382f6d7b6a4c32e281b9f9e0ea652c7b91} +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Workflow: refactoring
|
|
2
|
+
|
|
3
|
+
Changing the shape of code without changing what it does. The most dangerous
|
|
4
|
+
workflow in a legacy codebase, because success is invisible.
|
|
5
|
+
|
|
6
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
7
|
+
> The table names the agent for when a stage is delegated. In the default `solo`
|
|
8
|
+
> profile T0–T3 run in direct mode — the session does every stage itself, in a
|
|
9
|
+
> few lines, with cheap readers and one review (BALANCED at T2; STRONG at T3,
|
|
10
|
+
> whose plan the human approves in plan mode) — and T4+ run the full pipeline
|
|
11
|
+
> with the delegations below.
|
|
12
|
+
|
|
13
|
+
| Stage | Who | Notes |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| DISCOVERY | `ai-discovery` | every caller, every test, every dynamic reference |
|
|
16
|
+
| CONTEXT | `ai-context` | with `legacy_constraints` filled properly |
|
|
17
|
+
| IMPACT ANALYSIS | `ai-discovery` | serialized data, cache keys, service ids, event names |
|
|
18
|
+
| RISK CLASSIFICATION | `ai-risk` | shared code is T3 minimum |
|
|
19
|
+
| PLAN | `ai-planner` | characterization tests as their own steps, before anything moves |
|
|
20
|
+
| PLAN REVIEW | `ai-reviewer` | always, whatever the tier |
|
|
21
|
+
| IMPLEMENTATION | the session | one mechanical transformation per step |
|
|
22
|
+
| TEST | the session (`ai-tester` in `team`) | the same tests, unchanged, must still pass — the characterization tests for the moved code run inside their step, the full suite once at the end, then the e2e suite once; failures fixed as one batch |
|
|
23
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | looking specifically for behaviour drift |
|
|
24
|
+
| RELEASE REPORT | `ai-release` | |
|
|
25
|
+
| HUMAN APPROVAL | the human | |
|
|
26
|
+
|
|
27
|
+
## The order, which is not negotiable
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
characterization test → refactor → verify identical behaviour → (a different task) feature change
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Rules
|
|
34
|
+
|
|
35
|
+
- **Never** combine a refactoring with a feature change. If the plan contains
|
|
36
|
+
both, it is two tasks.
|
|
37
|
+
- A test that has to be modified during a refactoring is a signal that behaviour
|
|
38
|
+
changed. Stop and say so.
|
|
39
|
+
- Renaming something that appears in a string — a service id, a template name, a
|
|
40
|
+
queue name, a route name, a column — is not a rename, it is a migration.
|
|
41
|
+
- If the only justification is "this is cleaner", the task needs a human to
|
|
42
|
+
confirm it is worth the risk before it starts.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Workflow: hotfix
|
|
2
|
+
|
|
3
|
+
Production is broken now. Stages get shorter; none of them disappears.
|
|
4
|
+
|
|
5
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
6
|
+
> The table names the agent for when a stage is delegated. In the default `solo`
|
|
7
|
+
> profile T0–T2 run in direct mode — the session does every stage itself, in a
|
|
8
|
+
> few lines, with cheap readers and one `sonnet` review at T2 — and T3+ run the
|
|
9
|
+
> full pipeline with the delegations below.
|
|
10
|
+
|
|
11
|
+
| Stage | Who | Notes |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| DISCOVERY | `ai-discovery` | narrow: the failing path only |
|
|
14
|
+
| CONTEXT | the session, inline | a paragraph, recorded in the state file |
|
|
15
|
+
| RISK CLASSIFICATION | `ai-risk` | the tier of the code being touched, not of the urgency |
|
|
16
|
+
| PLAN | `ai-planner` or the session | the smallest change that stops the bleeding |
|
|
17
|
+
| IMPLEMENTATION | the session | one step |
|
|
18
|
+
| TEST | the session (`ai-tester` in `team`) | at minimum, a test that reproduces the incident; the full command once, failures fixed as one batch |
|
|
19
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | short, focused on "what else does this touch" |
|
|
20
|
+
| SECURITY REVIEW | `ai-security` | if the incident is a security incident |
|
|
21
|
+
| RELEASE REPORT | `ai-release` | short form, but rollback is mandatory |
|
|
22
|
+
| HUMAN APPROVAL | the human | always, and usually faster than the rest |
|
|
23
|
+
|
|
24
|
+
## Rules
|
|
25
|
+
|
|
26
|
+
- Urgency lowers the *depth* of a stage, never its existence. The risk tier is a
|
|
27
|
+
property of the code, not of how loudly someone is asking.
|
|
28
|
+
- A hotfix is the smallest possible change. Everything else — the real fix, the
|
|
29
|
+
cleanup, the missing test — becomes a follow-up task, written down before the
|
|
30
|
+
hotfix is approved so it does not evaporate when the incident closes.
|
|
31
|
+
- Record what actually happened in `project/known-risks.md`: the trigger, the
|
|
32
|
+
detection, and what would have caught it earlier.
|
|
33
|
+
- Never disable a test or a check to get a hotfix out. If CI is the obstacle, a
|
|
34
|
+
human decides that, explicitly.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Workflow: refactoring
|
|
2
|
+
|
|
3
|
+
Changing the shape of code without changing what it does. The most dangerous
|
|
4
|
+
workflow in a legacy codebase, because success is invisible.
|
|
5
|
+
|
|
6
|
+
| Stage | Who | Notes |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| DISCOVERY | `ai-discovery` | every caller, every test, every dynamic reference |
|
|
9
|
+
| CONTEXT | `ai-context` | with `legacy_constraints` filled properly |
|
|
10
|
+
| IMPACT ANALYSIS | `ai-discovery` | serialized data, cache keys, service ids, event names |
|
|
11
|
+
| RISK CLASSIFICATION | `ai-risk` | shared code is T3 minimum |
|
|
12
|
+
| PLAN | `ai-planner` | characterization tests as their own steps, before anything moves |
|
|
13
|
+
| PLAN REVIEW | `ai-reviewer` | always, whatever the tier |
|
|
14
|
+
| IMPLEMENTATION | the session | one mechanical transformation per step |
|
|
15
|
+
| TEST | `ai-tester` | the same tests, unchanged, must still pass |
|
|
16
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | looking specifically for behaviour drift |
|
|
17
|
+
| RELEASE REPORT | `ai-release` | |
|
|
18
|
+
| HUMAN APPROVAL | the human | |
|
|
19
|
+
|
|
20
|
+
## The order, which is not negotiable
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
characterization test → refactor → verify identical behaviour → (a different task) feature change
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **Never** combine a refactoring with a feature change. If the plan contains
|
|
29
|
+
both, it is two tasks.
|
|
30
|
+
- A test that has to be modified during a refactoring is a signal that behaviour
|
|
31
|
+
changed. Stop and say so.
|
|
32
|
+
- Renaming something that appears in a string — a service id, a template name, a
|
|
33
|
+
queue name, a route name, a column — is not a rename, it is a migration.
|
|
34
|
+
- If the only justification is "this is cleaner", the task needs a human to
|
|
35
|
+
confirm it is worth the risk before it starts.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Workflow: investigation
|
|
2
|
+
|
|
3
|
+
A question, not a change. "Why does this happen?", "where is this handled?",
|
|
4
|
+
"can we do X?". The deliverable is an answer with evidence.
|
|
5
|
+
|
|
6
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
7
|
+
> The table names the agent for when a stage is delegated. In the default `solo`
|
|
8
|
+
> profile T0–T2 run in direct mode — the session does every stage itself, in a
|
|
9
|
+
> few lines, with cheap readers and one BALANCED review at T2 — and T3+ run the
|
|
10
|
+
> full pipeline with the delegations below.
|
|
11
|
+
|
|
12
|
+
| Stage | Who | Notes |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| DISCOVERY | `ai-indexer`, then `ai-discovery` in parallel per area | read-only |
|
|
15
|
+
| CONTEXT | `ai-context` | the structured summary is often the deliverable itself |
|
|
16
|
+
| IMPACT ANALYSIS | `ai-discovery` | only if the question is "what would it take to…" |
|
|
17
|
+
| RISK CLASSIFICATION | `ai-risk` | so the answer carries the tier a change would have |
|
|
18
|
+
| REPORT | the session | written by the main session, not delegated |
|
|
19
|
+
|
|
20
|
+
There is no implementation stage. If the investigation concludes that something
|
|
21
|
+
should change, that is a **new task** with its own intent, plan and approval.
|
|
22
|
+
|
|
23
|
+
## Rules
|
|
24
|
+
|
|
25
|
+
- Nothing is edited. Not a comment, not a formatting fix.
|
|
26
|
+
- Every claim in the answer is labelled and cited: KNOWN FACT with `file:line`,
|
|
27
|
+
INFERENCE with what it rests on, UNKNOWN with what would settle it.
|
|
28
|
+
- Contradictions between documentation and code are reported as both, not
|
|
29
|
+
resolved by preference.
|
|
30
|
+
- Findings worth acting on go into `project/known-risks.md` so the next task can
|
|
31
|
+
see them.
|
|
32
|
+
- Say what you could not determine. An investigation that hides its gaps is worse
|
|
33
|
+
than one that admits them.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Safety policy
|
|
2
|
+
|
|
3
|
+
This is the file every agent reads first. It is short on purpose. It binds every
|
|
4
|
+
agent in every runtime — Claude Code and Codex alike.
|
|
5
|
+
|
|
6
|
+
## The one rule
|
|
7
|
+
|
|
8
|
+
**Production behaviour is the source of truth until proven otherwise.** Code that
|
|
9
|
+
looks wrong, dead, or badly written may be load-bearing. The repository's history
|
|
10
|
+
is evidence; your intuition about how the code "should" look is not.
|
|
11
|
+
|
|
12
|
+
## What an agent must never do
|
|
13
|
+
|
|
14
|
+
- Change application code that the current task did not ask about.
|
|
15
|
+
- Rename, move, reorganise or "clean up" anything as a side effect.
|
|
16
|
+
- Remove code because it looks unused. Find the callers first; if there are none,
|
|
17
|
+
say so in the report and leave the code alone.
|
|
18
|
+
- Combine a refactoring with a feature change in the same step.
|
|
19
|
+
- Modify database schemas, dependencies or framework versions outside a task that
|
|
20
|
+
is explicitly about that.
|
|
21
|
+
- Weaken a test, a linter rule or a static-analysis level to make a check pass.
|
|
22
|
+
- Commit, push, merge or deploy on its own initiative.
|
|
23
|
+
- Read production secrets or customer data into the model context.
|
|
24
|
+
|
|
25
|
+
If you find a problem outside the current task: **write it down, do not fix it.**
|
|
26
|
+
Unrelated findings are recorded with `state.py memory risk add` (in files mode it
|
|
27
|
+
writes `.ai/project/known-risks.md`) or go into the report's "observations"
|
|
28
|
+
section, and the human decides whether they become their own task.
|
|
29
|
+
|
|
30
|
+
The compact record is the human's to switch: `state.py memory enable`, `disable`,
|
|
31
|
+
`cleanup`, `pack`, `redact` and `migrate --move-logs` take the human route, as
|
|
32
|
+
`approve` does. `enable` may also run as the command the human picked in the
|
|
33
|
+
`/rr-setup` dialog; the rest have no dialog route. `.ai/memory/` and
|
|
34
|
+
`.ai/local/memory/` are written by `state.py` alone — an agent never edits them
|
|
35
|
+
(`state.py memory --help`; the plugin's `docs/local-memory.md`).
|
|
36
|
+
|
|
37
|
+
## Scope
|
|
38
|
+
|
|
39
|
+
Every implementation step names the files it may touch. Editing anything else is
|
|
40
|
+
refused by `ai-scope-guard` and must be answered with `SCOPE_CHANGE_REQUIRED`:
|
|
41
|
+
stop, say which file you need and why, and let the plan be amended. A step whose
|
|
42
|
+
scope keeps growing is a step that was planned wrong.
|
|
43
|
+
|
|
44
|
+
`ai-git-guard`, `ai-path-guard` and `ai-scope-guard` all run in both runtimes. A
|
|
45
|
+
multi-file edit in one call — Codex's `apply_patch` — is checked path by path, so
|
|
46
|
+
a single out-of-scope or protected file rejects the whole patch. What a guard
|
|
47
|
+
refuses is not a hint: do not reword the command to get past it.
|
|
48
|
+
|
|
49
|
+
A guard is a backstop, not the policy. Some checks exist in only one runtime —
|
|
50
|
+
Codex has no hookable read tool, so the large-read cap is Claude-only there — and
|
|
51
|
+
an agent that behaves correctly only because a hook is watching is not behaving
|
|
52
|
+
correctly. The rules above hold whether or not a hook enforces them.
|
|
53
|
+
|
|
54
|
+
**The guards' threat model.** The guards defend against an agent's mistakes — a
|
|
55
|
+
careless `rm`, a write to a frozen policy during a task, a commit with a
|
|
56
|
+
secret — not against an agent that constructs a command to exhaust them. A
|
|
57
|
+
command built to time the guard out is visible in the transcript and in the
|
|
58
|
+
journal, and the human gate in full and full_irreversible mode is the boundary
|
|
59
|
+
for anything that matters.
|
|
60
|
+
Approval rests on a guard plus a ledger: a command the agent constructs to pass
|
|
61
|
+
for the human's pick is outside the threat model, and `state.py consent audit`
|
|
62
|
+
detects it afterwards.
|
|
63
|
+
|
|
64
|
+
## Evidence labels
|
|
65
|
+
|
|
66
|
+
Anything an agent writes into `.ai/project/` carries one of four labels:
|
|
67
|
+
|
|
68
|
+
- **KNOWN FACT** — read from the code, a config file, a migration or a test.
|
|
69
|
+
Cite `file:line`.
|
|
70
|
+
- **INFERENCE** — a conclusion drawn from facts. Say what it is drawn from.
|
|
71
|
+
- **UNKNOWN** — something that matters and could not be determined. Say what
|
|
72
|
+
would answer it.
|
|
73
|
+
- **RISK** — something that looks dangerous. Say what could go wrong.
|
|
74
|
+
|
|
75
|
+
Never present an inference as a fact. When documentation and code disagree,
|
|
76
|
+
record both under "Documented behaviour" and "Observed behaviour", with the
|
|
77
|
+
evidence for each, and let the human decide which is the bug.
|
|
78
|
+
|
|
79
|
+
## When in doubt
|
|
80
|
+
|
|
81
|
+
Stop and ask. An agent that pauses costs a message; an agent that guesses on a
|
|
82
|
+
payment path costs an incident.
|
|
83
|
+
|
|
84
|
+
Doubt on reversibility or domain is a blocker; other doubt is written to
|
|
85
|
+
`task.md` and the work continues.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
12
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Workflow: bugfix
|
|
2
|
+
|
|
3
|
+
Something behaves wrongly. The goal is the smallest change that fixes it without
|
|
4
|
+
changing anything else.
|
|
5
|
+
|
|
6
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
7
|
+
> The table names the agent for when a stage is delegated. In the default `solo`
|
|
8
|
+
> profile T0–T2 run in direct mode — the session does every stage itself, in a
|
|
9
|
+
> few lines, with cheap readers and one `sonnet` review at T2 — and T3+ run the
|
|
10
|
+
> full pipeline with the delegations below.
|
|
11
|
+
|
|
12
|
+
| Stage | Who | Notes |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| DISCOVERY | `ai-discovery` | reproduce first: find the exact path that produces the symptom |
|
|
15
|
+
| CONTEXT | `ai-context` | include the *correct* behaviour and where it is defined |
|
|
16
|
+
| IMPACT ANALYSIS | `ai-discovery` | who else depends on the current, wrong behaviour |
|
|
17
|
+
| RISK CLASSIFICATION | `ai-risk` | a bug in a payment path is still T4 |
|
|
18
|
+
| PLAN | `ai-planner` | failing test first, then the fix |
|
|
19
|
+
| IMPLEMENTATION | the session | the failing test is its own step |
|
|
20
|
+
| TEST | the session (`ai-tester` in `team`) | the new test is shown failing before the fix; the full verification command runs once at the end, to the end; every failure fixed as one batch |
|
|
21
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | T2 and above |
|
|
22
|
+
| SECURITY REVIEW | `ai-security` | if the bug was a security bug, always |
|
|
23
|
+
| RELEASE REPORT | `ai-release` | |
|
|
24
|
+
| HUMAN APPROVAL | the human | |
|
|
25
|
+
|
|
26
|
+
## Specific to this workflow
|
|
27
|
+
|
|
28
|
+
- **Write the failing test first.** A bugfix without a test that failed before it
|
|
29
|
+
is a bugfix nobody can prove.
|
|
30
|
+
- Find out *why* the bug exists before fixing it. A bug that is deliberate
|
|
31
|
+
behaviour somebody depends on is not a bug; it is a requirements conflict, and
|
|
32
|
+
it goes back to the human.
|
|
33
|
+
- Resist the urge to fix the surrounding code. Note it, fix the bug.
|
|
34
|
+
- If the same bug exists in three places, fix the one that was reported and list
|
|
35
|
+
the other two in `project/known-risks.md`.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Workflow: hotfix
|
|
2
|
+
|
|
3
|
+
Production is broken now. Stages get shorter; none of them disappears.
|
|
4
|
+
|
|
5
|
+
| Stage | Who | Notes |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| DISCOVERY | `ai-discovery` | narrow: the failing path only |
|
|
8
|
+
| CONTEXT | the session, inline | a paragraph, recorded in the state file |
|
|
9
|
+
| RISK CLASSIFICATION | `ai-risk` | the tier of the code being touched, not of the urgency |
|
|
10
|
+
| PLAN | `ai-planner` or the session | the smallest change that stops the bleeding |
|
|
11
|
+
| IMPLEMENTATION | the session | one step |
|
|
12
|
+
| TEST | `ai-tester` | at minimum, a test that reproduces the incident |
|
|
13
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | short, focused on "what else does this touch" |
|
|
14
|
+
| SECURITY REVIEW | `ai-security` | if the incident is a security incident |
|
|
15
|
+
| RELEASE REPORT | `ai-release` | short form, but rollback is mandatory |
|
|
16
|
+
| HUMAN APPROVAL | the human | always, and usually faster than the rest |
|
|
17
|
+
|
|
18
|
+
## Rules
|
|
19
|
+
|
|
20
|
+
- Urgency lowers the *depth* of a stage, never its existence. The risk tier is a
|
|
21
|
+
property of the code, not of how loudly someone is asking.
|
|
22
|
+
- A hotfix is the smallest possible change. Everything else — the real fix, the
|
|
23
|
+
cleanup, the missing test — becomes a follow-up task, written down before the
|
|
24
|
+
hotfix is approved so it does not evaporate when the incident closes.
|
|
25
|
+
- Record what actually happened in `project/known-risks.md`: the trigger, the
|
|
26
|
+
detection, and what would have caught it earlier.
|
|
27
|
+
- Never disable a test or a check to get a hotfix out. If CI is the obstacle, a
|
|
28
|
+
human decides that, explicitly.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Workflow: investigation
|
|
2
|
+
|
|
3
|
+
A question, not a change. "Why does this happen?", "where is this handled?",
|
|
4
|
+
"can we do X?". The deliverable is an answer with evidence.
|
|
5
|
+
|
|
6
|
+
| Stage | Who | Notes |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| DISCOVERY | `ai-indexer`, then `ai-discovery` in parallel per area | read-only |
|
|
9
|
+
| CONTEXT | `ai-context` | the structured summary is often the deliverable itself |
|
|
10
|
+
| IMPACT ANALYSIS | `ai-discovery` | only if the question is "what would it take to…" |
|
|
11
|
+
| RISK CLASSIFICATION | `ai-risk` | so the answer carries the tier a change would have |
|
|
12
|
+
| REPORT | the session | written by the main session, not delegated |
|
|
13
|
+
|
|
14
|
+
There is no implementation stage. If the investigation concludes that something
|
|
15
|
+
should change, that is a **new task** with its own intent, plan and approval.
|
|
16
|
+
|
|
17
|
+
## Rules
|
|
18
|
+
|
|
19
|
+
- Nothing is edited. Not a comment, not a formatting fix.
|
|
20
|
+
- Every claim in the answer is labelled and cited: KNOWN FACT with `file:line`,
|
|
21
|
+
INFERENCE with what it rests on, UNKNOWN with what would settle it.
|
|
22
|
+
- Contradictions between documentation and code are reported as both, not
|
|
23
|
+
resolved by preference.
|
|
24
|
+
- Findings worth acting on go into `project/known-risks.md` so the next task can
|
|
25
|
+
see them.
|
|
26
|
+
- Say what you could not determine. An investigation that hides its gaps is worse
|
|
27
|
+
than one that admits them.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Workflow: feature
|
|
2
|
+
|
|
3
|
+
New behaviour that someone asked for. The default workflow.
|
|
4
|
+
|
|
5
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
6
|
+
> The table names the agent for when a stage is delegated; in the default `solo`
|
|
7
|
+
> profile the session does the stage inline up to the tier where the profile
|
|
8
|
+
> delegates it.
|
|
9
|
+
|
|
10
|
+
| Stage | Who | Notes |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| DISCOVERY | `ai-indexer` then `ai-discovery` | where the feature lands, what it will touch |
|
|
13
|
+
| CONTEXT | `ai-context` | the structured summary everything downstream reads |
|
|
14
|
+
| IMPACT ANALYSIS | `ai-discovery` (second pass) | callers, data, contracts, other environments |
|
|
15
|
+
| RISK CLASSIFICATION | `ai-risk` | one tier, from `policies/risk-tiers.json` |
|
|
16
|
+
| PLAN | none at T0/T1; the session at T2; `ai-planner` from T3 | steps with `allowed_files`; STRONG for T3/T4, `ai-expert` for T5 |
|
|
17
|
+
| PLAN REVIEW | `ai-reviewer` | T3 and above |
|
|
18
|
+
| IMPLEMENTATION | the session, one step at a time | scope-guarded |
|
|
19
|
+
| TEST | the session (`ai-tester` in `team`) | once, after the last step; a step's own single test when cheap |
|
|
20
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | T2 and above |
|
|
21
|
+
| SECURITY REVIEW | `ai-security` | T4, T5, and anything touching auth or personal data |
|
|
22
|
+
| RELEASE REPORT | `ai-release` | full report from T2 up |
|
|
23
|
+
| HUMAN APPROVAL | the human | the pipeline stops here |
|
|
24
|
+
|
|
25
|
+
## Specific to this workflow
|
|
26
|
+
|
|
27
|
+
- The plan states what stays the same, not only what changes. A feature that
|
|
28
|
+
quietly alters an existing behaviour is the most common source of regressions.
|
|
29
|
+
- New code paths need their negative cases tested: not authorized, not found,
|
|
30
|
+
invalid input, external system down.
|
|
31
|
+
- If the feature needs a new dependency, that is a decision worth its own line in
|
|
32
|
+
the plan.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Initial assessment
|
|
2
|
+
|
|
3
|
+
<!-- Written once by /rr-setup, then kept as a snapshot. It records what the
|
|
4
|
+
repository looked like when this infrastructure was installed, so later
|
|
5
|
+
drift is visible. Do not edit it into a living document — that is what the
|
|
6
|
+
other files in this directory are. -->
|
|
7
|
+
|
|
8
|
+
*Not yet generated. Run `/rr-setup` in the project root.*
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Workflow: hotfix
|
|
2
|
+
|
|
3
|
+
Production is broken now. Stages get shorter; none of them disappears.
|
|
4
|
+
|
|
5
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
6
|
+
> The table names the agent for when a stage is delegated. In the default `solo`
|
|
7
|
+
> profile T0–T2 run in direct mode — the session does every stage itself, in a
|
|
8
|
+
> few lines, with cheap readers and one `sonnet` review at T2 — and T3+ run the
|
|
9
|
+
> full pipeline with the delegations below.
|
|
10
|
+
|
|
11
|
+
| Stage | Who | Notes |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| DISCOVERY | `ai-discovery` | narrow: the failing path only |
|
|
14
|
+
| CONTEXT | the session, inline | a paragraph, recorded in the state file |
|
|
15
|
+
| RISK CLASSIFICATION | `ai-risk` | the tier of the code being touched, not of the urgency |
|
|
16
|
+
| PLAN | `ai-planner` or the session | the smallest change that stops the bleeding |
|
|
17
|
+
| IMPLEMENTATION | the session | one step |
|
|
18
|
+
| TEST | the session (`ai-tester` in `team`) | at minimum, a test that reproduces the incident, run scoped; the full command once after the fix, then e2e only if the incident is in a flow it covers; failures fixed as one batch |
|
|
19
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | short, focused on "what else does this touch" |
|
|
20
|
+
| SECURITY REVIEW | `ai-security` | if the incident is a security incident |
|
|
21
|
+
| RELEASE REPORT | `ai-release` | short form, but rollback is mandatory |
|
|
22
|
+
| HUMAN APPROVAL | the human | always, and usually faster than the rest |
|
|
23
|
+
|
|
24
|
+
## Rules
|
|
25
|
+
|
|
26
|
+
- Urgency lowers the *depth* of a stage, never its existence. The risk tier is a
|
|
27
|
+
property of the code, not of how loudly someone is asking.
|
|
28
|
+
- A hotfix is the smallest possible change. Everything else — the real fix, the
|
|
29
|
+
cleanup, the missing test — becomes a follow-up task, written down before the
|
|
30
|
+
hotfix is approved so it does not evaporate when the incident closes.
|
|
31
|
+
- Record what actually happened in `project/known-risks.md`: the trigger, the
|
|
32
|
+
detection, and what would have caught it earlier.
|
|
33
|
+
- Never disable a test or a check to get a hotfix out. If CI is the obstacle, a
|
|
34
|
+
human decides that, explicitly.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Workflow: investigation
|
|
2
|
+
|
|
3
|
+
A question, not a change. "Why does this happen?", "where is this handled?",
|
|
4
|
+
"can we do X?". The deliverable is an answer with evidence.
|
|
5
|
+
|
|
6
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
7
|
+
> The table names the agent for when a stage is delegated. In the default `solo`
|
|
8
|
+
> profile T0–T4 run in direct mode — the session does every stage itself, in a
|
|
9
|
+
> few lines, with cheap readers and one review (BALANCED at T2/T3, and only
|
|
10
|
+
> when a sensor is red; STRONG at T4, whose plan the human approves in plan
|
|
11
|
+
> mode) — and T5+ run the full pipeline with the delegations below.
|
|
12
|
+
|
|
13
|
+
| Stage | Who | Notes |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| DISCOVERY | `ai-indexer`, then `ai-discovery` in parallel per area | read-only |
|
|
16
|
+
| CONTEXT | `ai-context` | the structured summary is often the deliverable itself |
|
|
17
|
+
| IMPACT ANALYSIS | `ai-discovery` | only if the question is "what would it take to…" |
|
|
18
|
+
| RISK CLASSIFICATION | `ai-risk` | so the answer carries the tier a change would have |
|
|
19
|
+
| REPORT | the session | written by the main session, not delegated |
|
|
20
|
+
|
|
21
|
+
There is no implementation stage. If the investigation concludes that something
|
|
22
|
+
should change, that is a **new task** with its own intent, plan and approval.
|
|
23
|
+
|
|
24
|
+
## Rules
|
|
25
|
+
|
|
26
|
+
- Nothing is edited. Not a comment, not a formatting fix.
|
|
27
|
+
- Every claim in the answer is labelled and cited: KNOWN FACT with `file:line`,
|
|
28
|
+
INFERENCE with what it rests on, UNKNOWN with what would settle it.
|
|
29
|
+
- Contradictions between documentation and code are reported as both, not
|
|
30
|
+
resolved by preference.
|
|
31
|
+
- Findings worth acting on go into `project/known-risks.md` so the next task can
|
|
32
|
+
see them.
|
|
33
|
+
- Say what you could not determine. An investigation that hides its gaps is worse
|
|
34
|
+
than one that admits them.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Weight table
|
|
2
|
+
|
|
3
|
+
<!-- generated by `state.py weight --mirror` from weight.json; edit the JSON and regenerate. sha256: 6d6dee8634abf9ac057bb206828b83a893a2afcf4f86bbe69e839a3b47d0adde -->
|
|
4
|
+
|
|
5
|
+
Six axes, 0–2 each; W is their sum. Why each rule is what it is: the plugin's `docs/weight.md`.
|
|
6
|
+
|
|
7
|
+
| Axis | Measured by | Table |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| scope | references | bands: [0, 5]; hot_paths: ["hooks/**", "src/Shared/**"] |
|
|
10
|
+
| behaviour | session | keywords: ["workflow", "transition", "state machine", "messenger", "queue", "async", "transaction"] |
|
|
11
|
+
| reversibility | paths+content | needs_step: ["**/migrations/**", "**/Migrations/**", "config/**", "k8s/**", "**/env/**"]; irreversible: ["**/prod/**", "**/production/**", "deploy/**", "**/*.deploy.*"]; irreversible_content: ["DROP ", "TRUNCATE", "DELETE FROM", "ALTER .* DROP", "RENAME"] |
|
|
12
|
+
| domain | modules+session | modules: ["**/Payment/**", "**/Tax/**", "**/Invoice/**", "**/Security/**", "**/account/**"]; customer_visible: ["templates/**", "**/Shop/**", "**/Resources/views/**"] |
|
|
13
|
+
| novelty | session | manifests: ["composer.json", "requirements*.txt", "package.json", "pyproject.toml", "Gemfile"] |
|
|
14
|
+
| coverage | tests-map | code_globs: ["**/*.php", "**/*.py", "**/*.js", "**/*.ts", "**/*.sh"]; test_globs: ["tests/**", "spec/**", "**/*Test.php", "**/*.test.*", "**/*.spec.*", "**/test_*.py"]; map: {} |
|
|
15
|
+
|
|
16
|
+
| Mode | When | Plan | Review | Reviewer | Human stops | Suite |
|
|
17
|
+
|---|---|---|---|---|---|---|
|
|
18
|
+
| light | W ≤ 2 | inline | on_red_fact | BALANCED | 0 | verify |
|
|
19
|
+
| guarded | W ≤ 7 | plan_mode | one | BALANCED | 1 | verify+e2e |
|
|
20
|
+
| full | W ≥ 8 or reversibility or domain = 2 | written | one | STRONG | 2 | verify+e2e |
|
|
21
|
+
| full_irreversible | reversibility=2 and domain=2, or irreversible_content | as full | as full | as full | 3 | as full |
|
|
22
|
+
|
|
23
|
+
| Hint paths | Axis | Note |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `**/login*`, `**/Security/**`, `**/*Auth*` | domain +1 | auth-shaped path |
|
|
26
|
+
| `.ai/policies/**`, `.claude/**`, `.codex/**`, `CLAUDE.md`, `AGENTS.md` | behaviour +1 | pipeline |
|
|
27
|
+
| `composer.json`, `package.json`, `requirements*.txt` | novelty +1 | dependency manifest |
|
|
28
|
+
|
|
29
|
+
Rules: {"unknown_scores": 1, "hint_raises_by": 1, "hint_raises_once_per_axis": true, "rescore_axes": ["reversibility", "domain"], "rescore_direction": "up", "lower_by": "human", "steps_advice_over": 8}
|
|
30
|
+
|
|
31
|
+
Budgets: review_rounds_max 2 · remediation_rounds 2 · tests {"max_suite_runs": 2, "timeout_seconds": 1800, "env_retries": 1, "log_max_bytes": 2097152} · batch {"default": false, "review_rounds_max": 3, "max_suite_runs": 8, "parallel": 3, "tier": "BALANCED"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Workflow: feature
|
|
2
|
+
|
|
3
|
+
New behaviour that someone asked for. The default workflow.
|
|
4
|
+
|
|
5
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
6
|
+
> The table names the agent for when a stage is delegated. In the default `solo`
|
|
7
|
+
> profile T0–T2 run in direct mode — the session does every stage itself, in a
|
|
8
|
+
> few lines, with cheap readers and one `sonnet` review at T2 — and T3+ run the
|
|
9
|
+
> full pipeline with the delegations below.
|
|
10
|
+
|
|
11
|
+
| Stage | Who | Notes |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| DISCOVERY | `ai-indexer` then `ai-discovery` | where the feature lands, what it will touch |
|
|
14
|
+
| CONTEXT | `ai-context` | the structured summary everything downstream reads |
|
|
15
|
+
| IMPACT ANALYSIS | `ai-discovery` (second pass) | callers, data, contracts, other environments |
|
|
16
|
+
| RISK CLASSIFICATION | `ai-risk` | one tier, from `policies/risk-tiers.json` |
|
|
17
|
+
| PLAN | none at T0/T1; the session at T2; `ai-planner` from T3 | steps with `allowed_files`; STRONG for T3/T4, `ai-expert` for T5 |
|
|
18
|
+
| PLAN REVIEW | `ai-reviewer` | T3 and above |
|
|
19
|
+
| IMPLEMENTATION | the session, one step at a time | scope-guarded |
|
|
20
|
+
| TEST | the session (`ai-tester` in `team`) | once, after the last step, to the end; every failure fixed as one batch, then one more run |
|
|
21
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | T2 and above |
|
|
22
|
+
| SECURITY REVIEW | `ai-security` | T4, T5, and anything touching auth or personal data |
|
|
23
|
+
| RELEASE REPORT | `ai-release` | full report from T2 up |
|
|
24
|
+
| HUMAN APPROVAL | the human | the pipeline stops here |
|
|
25
|
+
|
|
26
|
+
## Specific to this workflow
|
|
27
|
+
|
|
28
|
+
- The plan states what stays the same, not only what changes. A feature that
|
|
29
|
+
quietly alters an existing behaviour is the most common source of regressions.
|
|
30
|
+
- New code paths need their negative cases tested: not authorized, not found,
|
|
31
|
+
invalid input, external system down.
|
|
32
|
+
- If the feature needs a new dependency, that is a decision worth its own line in
|
|
33
|
+
the plan.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Workflow: investigation
|
|
2
|
+
|
|
3
|
+
A question, not a change. "Why does this happen?", "where is this handled?",
|
|
4
|
+
"can we do X?". The deliverable is an answer with evidence.
|
|
5
|
+
|
|
6
|
+
> Who runs a stage is set by `pipeline_profile` in `policies/risk-tiers.json`.
|
|
7
|
+
> The table names the agent for when a stage is delegated; in the default `solo`
|
|
8
|
+
> profile the session does the stage inline up to the tier where the profile
|
|
9
|
+
> delegates it.
|
|
10
|
+
|
|
11
|
+
| Stage | Who | Notes |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| DISCOVERY | `ai-indexer`, then `ai-discovery` in parallel per area | read-only |
|
|
14
|
+
| CONTEXT | `ai-context` | the structured summary is often the deliverable itself |
|
|
15
|
+
| IMPACT ANALYSIS | `ai-discovery` | only if the question is "what would it take to…" |
|
|
16
|
+
| RISK CLASSIFICATION | `ai-risk` | so the answer carries the tier a change would have |
|
|
17
|
+
| REPORT | the session | written by the main session, not delegated |
|
|
18
|
+
|
|
19
|
+
There is no implementation stage. If the investigation concludes that something
|
|
20
|
+
should change, that is a **new task** with its own intent, plan and approval.
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
- Nothing is edited. Not a comment, not a formatting fix.
|
|
25
|
+
- Every claim in the answer is labelled and cited: KNOWN FACT with `file:line`,
|
|
26
|
+
INFERENCE with what it rests on, UNKNOWN with what would settle it.
|
|
27
|
+
- Contradictions between documentation and code are reported as both, not
|
|
28
|
+
resolved by preference.
|
|
29
|
+
- Findings worth acting on go into `project/known-risks.md` so the next task can
|
|
30
|
+
see them.
|
|
31
|
+
- Say what you could not determine. An investigation that hides its gaps is worse
|
|
32
|
+
than one that admits them.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Workflow: bugfix
|
|
2
|
+
|
|
3
|
+
Something behaves wrongly. The goal is the smallest change that fixes it without
|
|
4
|
+
changing anything else.
|
|
5
|
+
|
|
6
|
+
| Stage | Who | Notes |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| DISCOVERY | `ai-discovery` | reproduce first: find the exact path that produces the symptom |
|
|
9
|
+
| CONTEXT | `ai-context` | include the *correct* behaviour and where it is defined |
|
|
10
|
+
| IMPACT ANALYSIS | `ai-discovery` | who else depends on the current, wrong behaviour |
|
|
11
|
+
| RISK CLASSIFICATION | `ai-risk` | a bug in a payment path is still T4 |
|
|
12
|
+
| PLAN | `ai-planner` | failing test first, then the fix |
|
|
13
|
+
| IMPLEMENTATION | the session | the failing test is its own step |
|
|
14
|
+
| TEST | `ai-tester` | the new test fails before the fix and passes after |
|
|
15
|
+
| ADVERSARIAL REVIEW | `ai-reviewer` | T2 and above |
|
|
16
|
+
| SECURITY REVIEW | `ai-security` | if the bug was a security bug, always |
|
|
17
|
+
| RELEASE REPORT | `ai-release` | |
|
|
18
|
+
| HUMAN APPROVAL | the human | |
|
|
19
|
+
|
|
20
|
+
## Specific to this workflow
|
|
21
|
+
|
|
22
|
+
- **Write the failing test first.** A bugfix without a test that failed before it
|
|
23
|
+
is a bugfix nobody can prove.
|
|
24
|
+
- Find out *why* the bug exists before fixing it. A bug that is deliberate
|
|
25
|
+
behaviour somebody depends on is not a bug; it is a requirements conflict, and
|
|
26
|
+
it goes back to the human.
|
|
27
|
+
- Resist the urge to fix the surrounding code. Note it, fix the bug.
|
|
28
|
+
- If the same bug exists in three places, fix the one that was reported and list
|
|
29
|
+
the other two in `project/known-risks.md`.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Manager
|
|
2
|
+
|
|
3
|
+
The manager is the main session, not a subagent. It orchestrates; it does not
|
|
4
|
+
collect facts itself, and it keeps its own context small so it can stay in the
|
|
5
|
+
task until the end.
|
|
6
|
+
|
|
7
|
+
The role is the same whichever runtime the session is: Claude Code or Codex. The
|
|
8
|
+
agents it delegates to carry the same names in both, and the tier each runs at is
|
|
9
|
+
the same; only the model behind that tier differs.
|
|
10
|
+
|
|
11
|
+
## Responsibilities
|
|
12
|
+
|
|
13
|
+
- Understand the request and restate it in one sentence the human can correct.
|
|
14
|
+
- Classify the task: which workflow, which risk tier.
|
|
15
|
+
- Establish scope, and defend it.
|
|
16
|
+
- Choose the stages the tier requires, and the agent for each.
|
|
17
|
+
- Do inline what the pipeline profile leaves inline — in a few lines, recorded
|
|
18
|
+
in the state file — and delegate the rest. In the `solo` profile the
|
|
19
|
+
developer's request and `grep -n` are the context for anything up to T2; a
|
|
20
|
+
subagent is spawned only for what the tier makes mandatory, or on a trigger
|
|
21
|
+
from `policies/risk-tiers.json`. Never read logs, test output or large files
|
|
22
|
+
into its own context.
|
|
23
|
+
- Split the work into steps small enough that each one names the files it touches.
|
|
24
|
+
- Track state through `state.py` after every stage. The state file, not the
|
|
25
|
+
conversation, is what survives.
|
|
26
|
+
- Decide when to escalate a model tier, one task at a time, against the triggers
|
|
27
|
+
in `policies/risk-tiers.json`, and name the trigger when it does.
|
|
28
|
+
- Record, in every artifact, the tier **and the model that actually ran** — see
|
|
29
|
+
`policies/model-routing.md`. A gate may have moved an agent down a tier, and a
|
|
30
|
+
Codex agent file may override the model asked for at spawn time.
|
|
31
|
+
- Write the final summary the human reads.
|
|
32
|
+
|
|
33
|
+
## What the manager must not do
|
|
34
|
+
|
|
35
|
+
- Skip a stage because the task looks easy. Make it lightweight instead, and
|
|
36
|
+
record that it happened.
|
|
37
|
+
- Expand scope. A discovered problem goes into `project/known-risks.md`.
|
|
38
|
+
- Delegate the conclusion. The synthesis a human reads is written by the session.
|
|
39
|
+
- Commit, push, merge or deploy. The pipeline ends at human approval.
|
|
40
|
+
|
|
41
|
+
## Implementation
|
|
42
|
+
|
|
43
|
+
The manager implements approved steps itself, under this policy and under
|
|
44
|
+
`ai-scope-guard`. `ai-implementer` exists for mechanical, pattern-copying steps
|
|
45
|
+
and for when the human asks for it — not as the default.
|