create-religion 1.1.0 → 1.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-religion",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "A file-backed, spec-driven AI development workflow. Spec before code, small reviewed diffs, and project state in markdown so a cleared context costs nothing.",
5
5
  "license": "MIT",
6
6
  "author": "Nate",
@@ -104,6 +104,10 @@ shape; the prose below it is for people.
104
104
  **Suggested fix:** ...
105
105
  **Resolution:**
106
106
 
107
+ When the pass is re-reviewing a repair and finds a new problem in the code that repair
108
+ changed, add `**Surfaced by:** F-NN` after **Found**, naming the finding whose repair exposed
109
+ it. That link is what keeps a defect a repair introduced attached to the repair.
110
+
107
111
  Identifiers are sequential within the ledger, one past the highest present, never reused
108
112
  and never renumbered while their entries live there. Completion archives resolved entries
109
113
  under a work-item prefix, and that prefixed form is the permanent reference.
@@ -122,9 +126,9 @@ After reviewing:
122
126
  - Append each new confirmed finding as `open`.
123
127
  - Record a lead worth tracking as `unverified`. It never gates anything.
124
128
  - Update entries this pass re-examined, noting the evidence in **Resolution**.
125
- - Move `fixed` to `closed` only when all three hold: this pass covered the finding's file,
129
+ - Move `fixed` to `closed` only when all four hold: this pass covered the finding's file,
126
130
  re-examining the repaired code confirmed the defect is gone and nothing worse replaced
127
- it, and the report names it as closed. An unrelated new problem in the same file gets its
131
+ it, no finding it surfaced is still `open` or `fixed`, and the report names it as closed. An unrelated new problem in the same file gets its
128
132
  own entry. Never close implicitly.
129
133
  - Set `accepted` only on the user's explicit decision, with their reason. Never on their
130
134
  behalf.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: auto
3
3
  summary: run the loop unattended, within explicit bounds
4
- description: "Run the reviewed loop without stopping between steps, within bounds you set. With no argument it takes one work item and stops before completing it; `all` runs the remaining build plan; a number runs that many items. Specs, implements, verifies, applies the configured gates, repairs confirmed high-severity findings, and completes each item. Its invocation grants committing, dependency installs, and remote reads for the run, and grants nothing else: it still stops to ask before any merge. Under git.mode pull-request it lands every item on one shared integration branch and ends by opening a single aggregate review packet it never merges, after stating that whole remote budget up front and being told yes. Use only when the user runs $auto or explicitly asks for an unattended run."
4
+ description: "Run the reviewed loop without stopping between steps, within bounds you set. With no argument it takes one work item and stops before completing it; `all` runs the remaining build plan; a number runs that many items; `fix` works through the findings ledger instead, every class most severe first or one class such as `fix P1`, one fix per file and class, re-reviewing every repair and folding any finding a repair surfaces into the same fix. Specs, implements, verifies, applies the configured gates, repairs confirmed high-severity findings, and completes each item. Its invocation grants committing, dependency installs, and remote reads for the run, and grants nothing else: it still stops to ask before any merge. Under git.mode pull-request it lands every item on one shared integration branch and ends by opening a single aggregate review packet it never merges, after stating that whole remote budget up front and being told yes. Use only when the user runs $auto or explicitly asks for an unattended run."
5
5
  ---
6
6
 
7
7
  # auto - the same loop, without the pauses
@@ -19,6 +19,7 @@ between steps.
19
19
  a bound.
20
20
  - `$auto 3` - the next three items, completing each.
21
21
  - `$auto resume` - continue an interrupted run from the file-backed state.
22
+ - `$auto fix` - the findings ledger instead of the plan; see Fix mode.
22
23
 
23
24
  `auto.maxItems` caps successful completions. `auto.maxRepairAttempts` caps repeated
24
25
  attempts at the same finding. `auto.finalAudit` adds one review across everything the run
@@ -65,7 +66,8 @@ Before the first item:
65
66
  starts, naming the question, since a run that stops halfway through item four is worse
66
67
  than one that never began.
67
68
  - The working tree is clean, or the only dirt belongs to work being resumed.
68
- - The plan has unchecked items.
69
+ - The plan has unchecked items, or in fix mode the ledger has `open` or `fixed` findings in
70
+ range.
69
71
  - Under `pull-request`, the repository can host one: a remote exists and the host command
70
72
  works. A repository that cannot is a stop, not a reason to fall back to local merges. The
71
73
  mode exists to produce review gates, and silently producing a different history instead
@@ -110,6 +112,45 @@ For every item, in plan order:
110
112
 
111
113
  An item counts against `auto.maxItems` once it has landed, not once it is built.
112
114
 
115
+ ## Fix mode
116
+
117
+ `$auto fix` works through the findings ledger instead of the build plan, under the same
118
+ grant, gates, landing and stop rules.
119
+
120
+ - `$auto fix` or `$auto fix all` - every class, P0 first, until no `open` finding is
121
+ left or a bound is reached.
122
+ - `$auto fix P0` through `$auto fix P3` - only that class.
123
+
124
+ **The queue.** Read `religion/context/findings.md` afresh before each fix, because every fix
125
+ and every review changes it. Take the classes in turn, most severe first. Within a class, the
126
+ `open` findings that name the same file form one group, oldest first, and each group is one
127
+ work item: specced by $fix with all of its identifiers, then implemented, gated,
128
+ completed and landed exactly as Step 2 does for a plan item. A fix confined to one file and
129
+ one class stays a diff someone can review; a fix that sweeps several is not.
130
+
131
+ `unverified` findings are not repaired. Nothing has confirmed them, and repairing a guess
132
+ produces a change nobody can check; report them instead. `fixed` findings in range are
133
+ re-reviewed rather than repaired again, because the repair exists and only a review can
134
+ close it.
135
+
136
+ **Every repair is re-reviewed.** Repair is the whole point of this mode, so after
137
+ implementation the repaired findings always go to $audit in a subagent with fresh
138
+ context, whatever `qualityGates.audit` says. Only that review closes a finding.
139
+
140
+ **Folding.** When that review raises a new finding in code the fix changed, the audit records
141
+ it under its own identifier with a `**Surfaced by:**` line naming the finding whose repair
142
+ exposed it, and it joins the current fix as another repair step, whatever its class. The
143
+ finding that surfaced it cannot close while it is `open` or `fixed`. A defect a repair
144
+ introduced belongs with that repair: left for a later fix, it loses the context that
145
+ explains it.
146
+
147
+ **Bounds.** `auto.maxRepairAttempts` caps the attempts at any one finding. A fix folds in at
148
+ most three findings; a fourth is still recorded, but left out of this fix, and the fix
149
+ completes with what it has, its unclosed findings staying in the ledger. When completion is
150
+ blocked because a P0 or P1 is still `open` or `fixed`, the run stops. A finding the run has
151
+ already given up on is not queued again, and `auto.maxItems` caps completed fixes. Without
152
+ these bounds the loop need not end: a review of a repair can always find something new.
153
+
113
154
  ## Step 3 - close the run
114
155
 
115
156
  Under `trunk` and `branch-per-item` there is nothing to close: the items are done and the
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: fix
3
3
  summary: spec an unplanned bug or small change, or repair a recorded finding
4
- description: "Write a short spec for an unplanned bug or small change into religion/context/current-work.md so it runs through the same reviewed loop as planned work, then stop. Given a finding identifier instead, specs the repair of that recorded finding. Fixes are archived under religion/history/fixes/ and never touch the build plan. Use when the user runs $fix, reports a bug, asks to fix or change something that is not a planned item, or asks to pick up a finding from the ledger."
4
+ description: "Write a short spec for an unplanned bug or small change into religion/context/current-work.md so it runs through the same reviewed loop as planned work, then stop. Given one or more finding identifiers instead, specs the repair of those recorded findings together. Fixes are archived under religion/history/fixes/ and never touch the build plan. Use when the user runs $fix, reports a bug, asks to fix or change something that is not a planned item, or asks to pick up a finding from the ledger."
5
5
  ---
6
6
 
7
7
  # fix - spec an unplanned change
@@ -14,7 +14,9 @@ numbered, it ticks nothing, and it archives on its own.
14
14
  - **A description** - `$fix "password reset email never sends"`. A problem stated in the
15
15
  conversation already counts; this skill does not scan the project hoping to find
16
16
  something wrong.
17
- - **A finding identifier** - `$fix F-03` specs the repair of that ledger entry.
17
+ - **Finding identifiers** - `$fix F-03` specs the repair of that ledger entry, and
18
+ `$fix F-03 F-07` repairs several together. Group findings only when they share a file
19
+ and a severity, as $auto's fix mode does: one fix then stays one reviewable diff.
18
20
 
19
21
  - **Nothing** - read `religion/context/inbox.md` and offer what is there. Those notes were
20
22
  taken mid-build precisely because they were not worth stopping for at the time, and this is
@@ -31,8 +33,8 @@ would mean exploring, stop and point at $debug, which isolates a failure without
31
33
  changing anything. Writing a fix spec against a guessed cause produces a fix for the wrong
32
34
  problem.
33
35
 
34
- **For a finding**, read its entry in `religion/context/findings.md`: the file and line, why
35
- it matters, the suggested fix. The finding is the problem statement.
36
+ **For findings**, read each entry in `religion/context/findings.md`: the file and line, why
37
+ it matters, the suggested fix. The findings are the problem statement, one repair step each.
36
38
 
37
39
  If something is already in progress in `religion/context/current-work.md`, say so and ask
38
40
  whether to set it aside. One thing at a time is the point.
@@ -57,8 +59,8 @@ Fill in:
57
59
  test that fails without it. A bug that could recur silently is exactly what the test gate
58
60
  is for.
59
61
 
60
- For a finding repair, name the finding identifier in the Goal so the archive and the ledger
61
- agree about what happened.
62
+ For a finding repair, name every finding identifier in the Goal so the archive and the
63
+ ledger agree about what happened.
62
64
 
63
65
  ## Step 3 - stop
64
66
 
@@ -104,6 +104,10 @@ shape; the prose below it is for people.
104
104
  **Suggested fix:** ...
105
105
  **Resolution:**
106
106
 
107
+ When the pass is re-reviewing a repair and finds a new problem in the code that repair
108
+ changed, add `**Surfaced by:** F-NN` after **Found**, naming the finding whose repair exposed
109
+ it. That link is what keeps a defect a repair introduced attached to the repair.
110
+
107
111
  Identifiers are sequential within the ledger, one past the highest present, never reused
108
112
  and never renumbered while their entries live there. Completion archives resolved entries
109
113
  under a work-item prefix, and that prefixed form is the permanent reference.
@@ -122,9 +126,9 @@ After reviewing:
122
126
  - Append each new confirmed finding as `open`.
123
127
  - Record a lead worth tracking as `unverified`. It never gates anything.
124
128
  - Update entries this pass re-examined, noting the evidence in **Resolution**.
125
- - Move `fixed` to `closed` only when all three hold: this pass covered the finding's file,
129
+ - Move `fixed` to `closed` only when all four hold: this pass covered the finding's file,
126
130
  re-examining the repaired code confirmed the defect is gone and nothing worse replaced
127
- it, and the report names it as closed. An unrelated new problem in the same file gets its
131
+ it, no finding it surfaced is still `open` or `fixed`, and the report names it as closed. An unrelated new problem in the same file gets its
128
132
  own entry. Never close implicitly.
129
133
  - Set `accepted` only on the user's explicit decision, with their reason. Never on their
130
134
  behalf.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: auto
3
3
  summary: run the loop unattended, within explicit bounds
4
- description: "Run the reviewed loop without stopping between steps, within bounds you set. With no argument it takes one work item and stops before completing it; `all` runs the remaining build plan; a number runs that many items. Specs, implements, verifies, applies the configured gates, repairs confirmed high-severity findings, and completes each item. Its invocation grants committing, dependency installs, and remote reads for the run, and grants nothing else: it still stops to ask before any merge. Under git.mode pull-request it lands every item on one shared integration branch and ends by opening a single aggregate review packet it never merges, after stating that whole remote budget up front and being told yes. Use only when the user runs /auto or explicitly asks for an unattended run."
4
+ description: "Run the reviewed loop without stopping between steps, within bounds you set. With no argument it takes one work item and stops before completing it; `all` runs the remaining build plan; a number runs that many items; `fix` works through the findings ledger instead, every class most severe first or one class such as `fix P1`, one fix per file and class, re-reviewing every repair and folding any finding a repair surfaces into the same fix. Specs, implements, verifies, applies the configured gates, repairs confirmed high-severity findings, and completes each item. Its invocation grants committing, dependency installs, and remote reads for the run, and grants nothing else: it still stops to ask before any merge. Under git.mode pull-request it lands every item on one shared integration branch and ends by opening a single aggregate review packet it never merges, after stating that whole remote budget up front and being told yes. Use only when the user runs /auto or explicitly asks for an unattended run."
5
5
  ---
6
6
 
7
7
  # auto - the same loop, without the pauses
@@ -19,6 +19,7 @@ between steps.
19
19
  a bound.
20
20
  - `/auto 3` - the next three items, completing each.
21
21
  - `/auto resume` - continue an interrupted run from the file-backed state.
22
+ - `/auto fix` - the findings ledger instead of the plan; see Fix mode.
22
23
 
23
24
  `auto.maxItems` caps successful completions. `auto.maxRepairAttempts` caps repeated
24
25
  attempts at the same finding. `auto.finalAudit` adds one review across everything the run
@@ -65,7 +66,8 @@ Before the first item:
65
66
  starts, naming the question, since a run that stops halfway through item four is worse
66
67
  than one that never began.
67
68
  - The working tree is clean, or the only dirt belongs to work being resumed.
68
- - The plan has unchecked items.
69
+ - The plan has unchecked items, or in fix mode the ledger has `open` or `fixed` findings in
70
+ range.
69
71
  - Under `pull-request`, the repository can host one: a remote exists and the host command
70
72
  works. A repository that cannot is a stop, not a reason to fall back to local merges. The
71
73
  mode exists to produce review gates, and silently producing a different history instead
@@ -110,6 +112,45 @@ For every item, in plan order:
110
112
 
111
113
  An item counts against `auto.maxItems` once it has landed, not once it is built.
112
114
 
115
+ ## Fix mode
116
+
117
+ `/auto fix` works through the findings ledger instead of the build plan, under the same
118
+ grant, gates, landing and stop rules.
119
+
120
+ - `/auto fix` or `/auto fix all` - every class, P0 first, until no `open` finding is
121
+ left or a bound is reached.
122
+ - `/auto fix P0` through `/auto fix P3` - only that class.
123
+
124
+ **The queue.** Read `religion/context/findings.md` afresh before each fix, because every fix
125
+ and every review changes it. Take the classes in turn, most severe first. Within a class, the
126
+ `open` findings that name the same file form one group, oldest first, and each group is one
127
+ work item: specced by /fix with all of its identifiers, then implemented, gated,
128
+ completed and landed exactly as Step 2 does for a plan item. A fix confined to one file and
129
+ one class stays a diff someone can review; a fix that sweeps several is not.
130
+
131
+ `unverified` findings are not repaired. Nothing has confirmed them, and repairing a guess
132
+ produces a change nobody can check; report them instead. `fixed` findings in range are
133
+ re-reviewed rather than repaired again, because the repair exists and only a review can
134
+ close it.
135
+
136
+ **Every repair is re-reviewed.** Repair is the whole point of this mode, so after
137
+ implementation the repaired findings always go to /audit in a subagent with fresh
138
+ context, whatever `qualityGates.audit` says. Only that review closes a finding.
139
+
140
+ **Folding.** When that review raises a new finding in code the fix changed, the audit records
141
+ it under its own identifier with a `**Surfaced by:**` line naming the finding whose repair
142
+ exposed it, and it joins the current fix as another repair step, whatever its class. The
143
+ finding that surfaced it cannot close while it is `open` or `fixed`. A defect a repair
144
+ introduced belongs with that repair: left for a later fix, it loses the context that
145
+ explains it.
146
+
147
+ **Bounds.** `auto.maxRepairAttempts` caps the attempts at any one finding. A fix folds in at
148
+ most three findings; a fourth is still recorded, but left out of this fix, and the fix
149
+ completes with what it has, its unclosed findings staying in the ledger. When completion is
150
+ blocked because a P0 or P1 is still `open` or `fixed`, the run stops. A finding the run has
151
+ already given up on is not queued again, and `auto.maxItems` caps completed fixes. Without
152
+ these bounds the loop need not end: a review of a repair can always find something new.
153
+
113
154
  ## Step 3 - close the run
114
155
 
115
156
  Under `trunk` and `branch-per-item` there is nothing to close: the items are done and the
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: fix
3
3
  summary: spec an unplanned bug or small change, or repair a recorded finding
4
- description: "Write a short spec for an unplanned bug or small change into religion/context/current-work.md so it runs through the same reviewed loop as planned work, then stop. Given a finding identifier instead, specs the repair of that recorded finding. Fixes are archived under religion/history/fixes/ and never touch the build plan. Use when the user runs /fix, reports a bug, asks to fix or change something that is not a planned item, or asks to pick up a finding from the ledger."
4
+ description: "Write a short spec for an unplanned bug or small change into religion/context/current-work.md so it runs through the same reviewed loop as planned work, then stop. Given one or more finding identifiers instead, specs the repair of those recorded findings together. Fixes are archived under religion/history/fixes/ and never touch the build plan. Use when the user runs /fix, reports a bug, asks to fix or change something that is not a planned item, or asks to pick up a finding from the ledger."
5
5
  ---
6
6
 
7
7
  # fix - spec an unplanned change
@@ -14,7 +14,9 @@ numbered, it ticks nothing, and it archives on its own.
14
14
  - **A description** - `/fix "password reset email never sends"`. A problem stated in the
15
15
  conversation already counts; this skill does not scan the project hoping to find
16
16
  something wrong.
17
- - **A finding identifier** - `/fix F-03` specs the repair of that ledger entry.
17
+ - **Finding identifiers** - `/fix F-03` specs the repair of that ledger entry, and
18
+ `/fix F-03 F-07` repairs several together. Group findings only when they share a file
19
+ and a severity, as /auto's fix mode does: one fix then stays one reviewable diff.
18
20
 
19
21
  - **Nothing** - read `religion/context/inbox.md` and offer what is there. Those notes were
20
22
  taken mid-build precisely because they were not worth stopping for at the time, and this is
@@ -31,8 +33,8 @@ would mean exploring, stop and point at /debug, which isolates a failure without
31
33
  changing anything. Writing a fix spec against a guessed cause produces a fix for the wrong
32
34
  problem.
33
35
 
34
- **For a finding**, read its entry in `religion/context/findings.md`: the file and line, why
35
- it matters, the suggested fix. The finding is the problem statement.
36
+ **For findings**, read each entry in `religion/context/findings.md`: the file and line, why
37
+ it matters, the suggested fix. The findings are the problem statement, one repair step each.
36
38
 
37
39
  If something is already in progress in `religion/context/current-work.md`, say so and ask
38
40
  whether to set it aside. One thing at a time is the point.
@@ -57,8 +59,8 @@ Fill in:
57
59
  test that fails without it. A bug that could recur silently is exactly what the test gate
58
60
  is for.
59
61
 
60
- For a finding repair, name the finding identifier in the Goal so the archive and the ledger
61
- agree about what happened.
62
+ For a finding repair, name every finding identifier in the Goal so the archive and the
63
+ ledger agree about what happened.
62
64
 
63
65
  ## Step 3 - stop
64
66