@nac3/forge-cli 1.26.0 → 1.27.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.
Files changed (67) hide show
  1. package/dist/chat/panel.d.ts.map +1 -1
  2. package/dist/chat/panel.js +26 -0
  3. package/dist/chat/panel.js.map +1 -1
  4. package/dist/chat/server.d.ts.map +1 -1
  5. package/dist/chat/server.js +10 -1
  6. package/dist/chat/server.js.map +1 -1
  7. package/dist/chat/tools/reader.d.ts.map +1 -1
  8. package/dist/chat/tools/reader.js +24 -4
  9. package/dist/chat/tools/reader.js.map +1 -1
  10. package/dist/commands/operate.d.ts.map +1 -1
  11. package/dist/commands/operate.js +42 -0
  12. package/dist/commands/operate.js.map +1 -1
  13. package/dist/commands/urazuke.d.ts.map +1 -1
  14. package/dist/commands/urazuke.js +189 -9
  15. package/dist/commands/urazuke.js.map +1 -1
  16. package/dist/core/limits_config.d.ts +8 -0
  17. package/dist/core/limits_config.d.ts.map +1 -1
  18. package/dist/core/limits_config.js +19 -0
  19. package/dist/core/limits_config.js.map +1 -1
  20. package/dist/core/machine_files.d.ts +27 -0
  21. package/dist/core/machine_files.d.ts.map +1 -0
  22. package/dist/core/machine_files.js +97 -0
  23. package/dist/core/machine_files.js.map +1 -0
  24. package/dist/docs/doctrine/session-orchestration.md +109 -109
  25. package/dist/docs/doctrine/urazuke.md +221 -221
  26. package/dist/nac3/dispatch_log.d.ts +16 -1
  27. package/dist/nac3/dispatch_log.d.ts.map +1 -1
  28. package/dist/nac3/dispatch_log.js +29 -10
  29. package/dist/nac3/dispatch_log.js.map +1 -1
  30. package/dist/telemetry/battery_events.d.ts +91 -0
  31. package/dist/telemetry/battery_events.d.ts.map +1 -0
  32. package/dist/telemetry/battery_events.js +84 -0
  33. package/dist/telemetry/battery_events.js.map +1 -0
  34. package/dist/telemetry/usage.d.ts.map +1 -1
  35. package/dist/telemetry/usage.js +11 -25
  36. package/dist/telemetry/usage.js.map +1 -1
  37. package/dist/urazuke/freeze.d.ts.map +1 -1
  38. package/dist/urazuke/freeze.js +82 -16
  39. package/dist/urazuke/freeze.js.map +1 -1
  40. package/dist/urazuke/gates_data.d.ts +4 -1
  41. package/dist/urazuke/gates_data.d.ts.map +1 -1
  42. package/dist/urazuke/gates_data.js +7 -1
  43. package/dist/urazuke/gates_data.js.map +1 -1
  44. package/dist/urazuke/gates_ledger.d.ts +25 -1
  45. package/dist/urazuke/gates_ledger.d.ts.map +1 -1
  46. package/dist/urazuke/gates_ledger.js +30 -6
  47. package/dist/urazuke/gates_ledger.js.map +1 -1
  48. package/dist/urazuke/method_config.d.ts +116 -0
  49. package/dist/urazuke/method_config.d.ts.map +1 -0
  50. package/dist/urazuke/method_config.js +328 -0
  51. package/dist/urazuke/method_config.js.map +1 -0
  52. package/dist/urazuke/prompts_client.d.ts +42 -12
  53. package/dist/urazuke/prompts_client.d.ts.map +1 -1
  54. package/dist/urazuke/prompts_client.js +120 -16
  55. package/dist/urazuke/prompts_client.js.map +1 -1
  56. package/dist/urazuke/prompts_freeze.d.ts +186 -0
  57. package/dist/urazuke/prompts_freeze.d.ts.map +1 -0
  58. package/dist/urazuke/prompts_freeze.js +498 -0
  59. package/dist/urazuke/prompts_freeze.js.map +1 -0
  60. package/dist/urazuke/start.d.ts.map +1 -1
  61. package/dist/urazuke/start.js +42 -2
  62. package/dist/urazuke/start.js.map +1 -1
  63. package/dist/version.d.ts +1 -1
  64. package/dist/version.js +1 -1
  65. package/docs/doctrine/session-orchestration.md +109 -109
  66. package/docs/doctrine/urazuke.md +221 -221
  67. package/package.json +124 -124
@@ -1,221 +1,221 @@
1
- # Urazuke -- the evidence method, as Forge runs it
2
-
3
- Urazuke (github.com/pkuschnirof/urazuke) is the method behind every project
4
- Forge builds or maintains: 24 ordered steps in four stretches, each with an
5
- exact prompt, the inputs the owner prepares, the artifacts the agent leaves
6
- in the repository, and a completion check the owner does WITHOUT reading
7
- code. An existing system built without it goes through eight normalisation
8
- stations (N0..N7) first and enters the loop at step 5.
9
-
10
- ## What is mechanical (not prose)
11
-
12
- - The project's workflow is `urazuke` (no code) or `urazuke-legacy` (code
13
- without the method's artifacts). Every canonical task carries its step.
14
- - The CURRENT step's prompt is injected into your system prompt every turn,
15
- with the state of its checks (section "URAZUKE -- peldano NN"). Act on
16
- that prompt as if the owner had pasted it. Do not skip ahead.
17
- - A canonical task closes ONLY when `evaluateStep()` is GREEN: the files
18
- the step names exist, are not stubs, say what they must; the sizing
19
- record is admissible (G9); the plan items carry a spec; the evidence
20
- receipts exist. `yujin.pending.close` refuses a red step. An override
21
- needs the OWNER's written `force_reason` AND its `force_kind` (kept in
22
- history, counted per motive -- see "A forced close carries a TYPE");
23
- never pass either on your own initiative.
24
- - Evidence is a RECEIPT Forge records (command, ref, exit code, counts),
25
- never your summary. "Tests pass" without a receipt is a claim.
26
- - A LONG run leaves its receipt the same way. `yujin.evidence.run` blocks
27
- the turn only while the run fits the blocking window (10 min, lowered with
28
- `limits.claude_cli_silence_ms`); over that, or with `background: true`, it
29
- is launched detached and returns a HANDLE. That is not a degraded mode:
30
- the receipt is written by whoever runs, not by whoever waits. Read it with
31
- `yujin.evidence.list` when the task finishes (`yujin.task.status({id})`
32
- for the progress). Do NOT relaunch a run that already has a handle.
33
- - And the corollary for any invocation that dies waiting: a verb call that
34
- comes back UNANSWERED (E_VERB_CALL_UNANSWERED) did not necessarily fail.
35
- Before redoing the work, LOOK FOR THE TRACE -- `yujin.evidence.list` for a
36
- receipt, `yujin.task.list` for a task. Two closes were reported as
37
- "believed" over a receipt that existed on disk the whole time.
38
-
39
- ## When does a project EXPECT a ladder?
40
-
41
- Written here because the condition must be findable, not inferred from the
42
- source (the owner's condition on F-06, 2026-11-01): "if tomorrow a project
43
- should have a ladder and does not leave that trace, the notice does not
44
- come out and we are where we started. The condition has to be WRITTEN
45
- where someone would look for it."
46
-
47
- The switch being ON means **the method is available**, not **you are
48
- walking it**. It is ON by default in Forge developer, so injecting the
49
- step block -- or warning that it is missing -- in every project with the
50
- switch on would charge ~700 characters of system prompt per turn to
51
- everyone who does not use the method.
52
-
53
- So Forge warns ("enabled and NOT arriving") only when the project leaves a
54
- TRACE that it expects a ladder. Exactly three traces count, any one of
55
- them is enough (`expectsLadder` in `src/chat/urazuke_section.ts`):
56
-
57
- 1. **A Urazuke workflow instance exists** for the project, open or closed
58
- (`findUrazukeInstance`). This is the normal trace: `yf urazuke start` /
59
- `yujin.urazuke.start` leaves it.
60
- 2. **The frozen copy of the gate definition** is on disk
61
- (`.forge/urazuke/gates.json`, PND-165): the project pinned a version of
62
- the method, so it is using it.
63
- 3. **The method's artifacts are in the repository**: all three of
64
- `docs/WORKING_AGREEMENT.md`, `docs/SEMANTIC_TREE.md` and `docs/GATES.md`
65
- exist and are not stubs (`hasMethodArtifacts` in
66
- `src/urazuke/probes.ts`).
67
-
68
- With none of the three, the turn records `reason: 'not_in_use'` and stays
69
- silent. That reason is itself the trace: it is in the result of
70
- `buildUrazukeSection`, so "the notice did not come out" can always be
71
- answered with WHICH condition failed. If you want the ladder in a project
72
- that has none of the three, open it -- `yujin.urazuke.start` -- and the
73
- step prompt arrives on the next turn.
74
-
75
- ## A forced close carries a TYPE, and the type is counted
76
-
77
- M-02, decided by the owner on 2026-11-01. A plan item ships only with its
78
- receipts, and some items have no red to produce at all (documentation,
79
- configuration). The answer is NOT a kind of pending that authorises
80
- itself -- nothing can guarantee a code item will not be declared
81
- "documentation" -- it is an honest forced close that is COUNTABLE:
82
-
83
- - `force_reason` (the owner's prose, min 15 chars) is still mandatory, and
84
- - `force_kind` is mandatory with it, from a CLOSED catalogue
85
- (`src/urazuke/overrides.ts`; `yf pending close --force-kind`, or
86
- `force_kind` on `yujin.pending.close`). A free-text type turns the
87
- counter into a cloud of synonyms, which is not counting.
88
-
89
- The condition that makes this worth having, in the owner's words: "the
90
- typed motive has to be a NUMBER in the report. You have to be able to ask
91
- how many closes were forced by `documentacion_sin_rojo_posible` and get an
92
- answer. If the type exists and nobody counts it, it is the same hole with
93
- a better name -- and worse, because it sounds solved."
94
-
95
- So the override is stored as DATA on the item's history entry
96
- (`history[].override = {gate, kind, missing}`), and
97
- `docs/RETROSPECTIVE_<date>.md` prints one row per motive and one per gate
98
- bypassed. Overrides recorded before this change are still counted, in
99
- their own `sin tipo` row: discounting them would have made the total DROP
100
- on the day of the fix, which is the worst way to measure a debt.
101
-
102
- ## The catalogue's file names are PROTOCOL
103
-
104
- Decided by the owner on 2026-11-01 (M-03, measured by the Urazuke
105
- experiment), as a rule of the contract and not as an error message:
106
-
107
- **The file names the step catalogue asks for are protocol and are NOT
108
- translated. The CONTENT goes in the project's language.**
109
-
110
- So a step that names `docs/ARCHITECTURE.md` is satisfied by a file at
111
- exactly that path, whose prose may be entirely in Spanish. A
112
- `docs/ARQUITECTURA.md` with the identical, correct content counts as
113
- ABSENT -- and the gate now says so, with that reason, every time an
114
- artifact is missing (`ARTIFACT_NAMES_ARE_PROTOCOL` in
115
- `src/urazuke/gate.ts`), whether or not a similar-looking neighbour is
116
- found next to it.
117
-
118
- Why not a per-language alias table, which was the other option: **an alias
119
- table is a second source of truth, and a second source of truth
120
- desynchronises** -- the defect this project already has on record three
121
- times. (Plus the price on the Forge side: 232 artifact names to maintain in
122
- two languages.) It is the same line the `language-sovereignty` doctrine
123
- draws for verb ids and code identifiers: translate the EXPERIENCE, never
124
- the protocol.
125
-
126
- What was unacceptable before this was never the requirement. It was the
127
- SILENCE: a file with the right content next to it, counted as absent, with
128
- no written reason.
129
-
130
- ## The five statuses, and why `closed` is NOT `green`
131
-
132
- A step carries ONE of five statuses, and two of them are easy to confuse --
133
- the confusion cost a report that said 0 of 24 when three steps were closed
134
- (F-07, measured by the Urazuke experiment, 2026-11-01):
135
-
136
- | status | meaning |
137
- |--------------|--------------------------------------------------------------|
138
- | `closed` | the canonical task of this step IS CLOSED. Consolidated progress. The BEST state a step can be in. |
139
- | `green` | the gate passes and the task is STILL OPEN: it CAN be closed, nobody closed it yet. |
140
- | `red` | a check is missing. It does not close. |
141
- | `owner` | nothing mechanical to check; the owner signs it. |
142
- | `unmeasured` | the definition in force needs an evaluator this installation cannot measure. It does NOT close and it is NOT green. |
143
-
144
- The two rules that follow:
145
-
146
- 1. **`closed` and `green` are disjoint.** A closed step is reported as
147
- `closed`, never as `green`. So **counting `green` to measure progress
148
- LOSES every closed step** -- the best ones. Progress is `closed + green`
149
- (`done_or_ready`), and a summary prints BOTH numbers, never one.
150
- 2. **Nobody counts statuses on their own.** `summarizeLadder()` in
151
- `src/urazuke/current.ts` is the only counter; the verb, the CLI, the
152
- retrospective and the cyclic report all read it. A second, independent
153
- count is exactly the inference the method warns against: it is how the
154
- distinction gets lost again, in one consumer, silently.
155
-
156
- ## How to work inside it
157
-
158
- 1. Read the URAZUKE section: red checks are what is missing. Produce the
159
- artifact at the path named, with real content, or ask the owner for the
160
- input that is theirs (`antes de enviar`). Never invent an owner input.
161
- 2. When the section says GREEN, close the task with `yujin.pending.close`
162
- (full expediente) and the next step's prompt arrives on the next turn.
163
- 3. `yujin.urazuke.status` shows the whole ladder; `yujin.urazuke.step`
164
- shows any step in full (prompts, inputs, artifacts, checklist).
165
- 4. The plan is the pendings: each item needs `spec` (acceptance "given /
166
- when / then" + `how_verified`) before it is implemented (step 5).
167
- 5. No deadlines, ever: the method fixes the order and the gates, not the
168
- calendar. Speed is a consequence, not the objective.
169
-
170
- ## The profiles axis: three evaluators, and where their data lives
171
-
172
- Added 2026-11-01 (Pieza 6, D-044). The published definition requires these
173
- three on the three anchors of the construction loop, and until that day this
174
- installation could not measure any of them -- so adopting the published
175
- definition froze three permanently unmeasurable steps.
176
-
177
- | evaluator | step | what it measures |
178
- |---|---|---|
179
- | `pendings_profiles` | 5 | every open plan item that touches a screen declares its convergence group, the profiles that have it, and ONE acceptance criterion per profile |
180
- | `profile_matrix` | 8 | the matrix is consistent, the navigation is DERIVED from it, and each profile's e2e reaches exactly its row |
181
- | `manual_cases_per_profile` | 10 | every manual case ran once per affected profile, derived from the matrix |
182
-
183
- The data, and the one rule that explains every choice -- **the matrix is the
184
- producer**:
185
-
186
- - `docs/PROFILE_MATRIX.md` carries the four columns of Annex H B2 and
187
- nothing else: functionality, home, profiles, entry point. The table is
188
- found by HEADER, so the column order is free.
189
- - `.forge/profile-navigation.json` is the generated navigation, and it
190
- declares a fingerprint. The evaluator **recomputes** that fingerprint from
191
- the matrix and compares; it never reads the declared one and compares it
192
- with itself, which would pass any file. The fingerprint is
193
- self-describing (algorithm, encoding, canonical form, covers, excludes) --
194
- one that cannot be reproduced from outside is not evidence.
195
- - `.forge/profile-reachability.json` lists, per profile, what the e2e
196
- **reached** (not what it attempted) and the id of its receipt. The
197
- evaluator contrasts that id against the receipt registry: an artifact
198
- whose receipt the registry does not have is prose.
199
- - the two directions of "neither less nor more" fail DIFFERENTLY and never
200
- merge into one red: reaching **less** than the row is a MISSING piece
201
- (construction incomplete); reaching **more** is an AUTHORIZATION defect,
202
- high severity by written definition. If the message does not name the
203
- class, the reader under-rates it.
204
- - the per-profile pending fields live in `PendingSpec` **in the registry**,
205
- not in `docs/PENDING.md` (owner's decision, 2026-11-01): a gate cannot
206
- measure prose, `pendings_spec` already measures there, and two sources for
207
- the same datum age in opposite directions. The document is generated from
208
- the registry or cites it. Write them with
209
- `yf pending add --touches-screen --convergence-group ... --row-profile ...
210
- --accept-for perfil=criterio`.
211
- - `touches_screen` is a THREE-state field: absent means "not declared" and
212
- the evaluator reports it as such -- never as "does not touch". Not looking
213
- is not the same as nothing being there.
214
- - the manual case ledger carries `functionality` (the link the method's
215
- "derived from the matrix" implies): `yf urazuke rules sign <rule> passed
216
- --by <name> --profile <id> --functionality "<row>"`. A case with a single
217
- profile does NOT count as executed when its row has more.
218
-
219
- To measure what adopting the published definition would cost BEFORE
220
- adopting it: `yf urazuke rules show --published` (read only, writes
221
- nothing, never blocks) and `yf urazuke gates pull`.
1
+ # Urazuke -- the evidence method, as Forge runs it
2
+
3
+ Urazuke (github.com/pkuschnirof/urazuke) is the method behind every project
4
+ Forge builds or maintains: 24 ordered steps in four stretches, each with an
5
+ exact prompt, the inputs the owner prepares, the artifacts the agent leaves
6
+ in the repository, and a completion check the owner does WITHOUT reading
7
+ code. An existing system built without it goes through eight normalisation
8
+ stations (N0..N7) first and enters the loop at step 5.
9
+
10
+ ## What is mechanical (not prose)
11
+
12
+ - The project's workflow is `urazuke` (no code) or `urazuke-legacy` (code
13
+ without the method's artifacts). Every canonical task carries its step.
14
+ - The CURRENT step's prompt is injected into your system prompt every turn,
15
+ with the state of its checks (section "URAZUKE -- peldano NN"). Act on
16
+ that prompt as if the owner had pasted it. Do not skip ahead.
17
+ - A canonical task closes ONLY when `evaluateStep()` is GREEN: the files
18
+ the step names exist, are not stubs, say what they must; the sizing
19
+ record is admissible (G9); the plan items carry a spec; the evidence
20
+ receipts exist. `yujin.pending.close` refuses a red step. An override
21
+ needs the OWNER's written `force_reason` AND its `force_kind` (kept in
22
+ history, counted per motive -- see "A forced close carries a TYPE");
23
+ never pass either on your own initiative.
24
+ - Evidence is a RECEIPT Forge records (command, ref, exit code, counts),
25
+ never your summary. "Tests pass" without a receipt is a claim.
26
+ - A LONG run leaves its receipt the same way. `yujin.evidence.run` blocks
27
+ the turn only while the run fits the blocking window (10 min, lowered with
28
+ `limits.claude_cli_silence_ms`); over that, or with `background: true`, it
29
+ is launched detached and returns a HANDLE. That is not a degraded mode:
30
+ the receipt is written by whoever runs, not by whoever waits. Read it with
31
+ `yujin.evidence.list` when the task finishes (`yujin.task.status({id})`
32
+ for the progress). Do NOT relaunch a run that already has a handle.
33
+ - And the corollary for any invocation that dies waiting: a verb call that
34
+ comes back UNANSWERED (E_VERB_CALL_UNANSWERED) did not necessarily fail.
35
+ Before redoing the work, LOOK FOR THE TRACE -- `yujin.evidence.list` for a
36
+ receipt, `yujin.task.list` for a task. Two closes were reported as
37
+ "believed" over a receipt that existed on disk the whole time.
38
+
39
+ ## When does a project EXPECT a ladder?
40
+
41
+ Written here because the condition must be findable, not inferred from the
42
+ source (the owner's condition on F-06, 2026-11-01): "if tomorrow a project
43
+ should have a ladder and does not leave that trace, the notice does not
44
+ come out and we are where we started. The condition has to be WRITTEN
45
+ where someone would look for it."
46
+
47
+ The switch being ON means **the method is available**, not **you are
48
+ walking it**. It is ON by default in Forge developer, so injecting the
49
+ step block -- or warning that it is missing -- in every project with the
50
+ switch on would charge ~700 characters of system prompt per turn to
51
+ everyone who does not use the method.
52
+
53
+ So Forge warns ("enabled and NOT arriving") only when the project leaves a
54
+ TRACE that it expects a ladder. Exactly three traces count, any one of
55
+ them is enough (`expectsLadder` in `src/chat/urazuke_section.ts`):
56
+
57
+ 1. **A Urazuke workflow instance exists** for the project, open or closed
58
+ (`findUrazukeInstance`). This is the normal trace: `yf urazuke start` /
59
+ `yujin.urazuke.start` leaves it.
60
+ 2. **The frozen copy of the gate definition** is on disk
61
+ (`.forge/urazuke/gates.json`, PND-165): the project pinned a version of
62
+ the method, so it is using it.
63
+ 3. **The method's artifacts are in the repository**: all three of
64
+ `docs/WORKING_AGREEMENT.md`, `docs/SEMANTIC_TREE.md` and `docs/GATES.md`
65
+ exist and are not stubs (`hasMethodArtifacts` in
66
+ `src/urazuke/probes.ts`).
67
+
68
+ With none of the three, the turn records `reason: 'not_in_use'` and stays
69
+ silent. That reason is itself the trace: it is in the result of
70
+ `buildUrazukeSection`, so "the notice did not come out" can always be
71
+ answered with WHICH condition failed. If you want the ladder in a project
72
+ that has none of the three, open it -- `yujin.urazuke.start` -- and the
73
+ step prompt arrives on the next turn.
74
+
75
+ ## A forced close carries a TYPE, and the type is counted
76
+
77
+ M-02, decided by the owner on 2026-11-01. A plan item ships only with its
78
+ receipts, and some items have no red to produce at all (documentation,
79
+ configuration). The answer is NOT a kind of pending that authorises
80
+ itself -- nothing can guarantee a code item will not be declared
81
+ "documentation" -- it is an honest forced close that is COUNTABLE:
82
+
83
+ - `force_reason` (the owner's prose, min 15 chars) is still mandatory, and
84
+ - `force_kind` is mandatory with it, from a CLOSED catalogue
85
+ (`src/urazuke/overrides.ts`; `yf pending close --force-kind`, or
86
+ `force_kind` on `yujin.pending.close`). A free-text type turns the
87
+ counter into a cloud of synonyms, which is not counting.
88
+
89
+ The condition that makes this worth having, in the owner's words: "the
90
+ typed motive has to be a NUMBER in the report. You have to be able to ask
91
+ how many closes were forced by `documentacion_sin_rojo_posible` and get an
92
+ answer. If the type exists and nobody counts it, it is the same hole with
93
+ a better name -- and worse, because it sounds solved."
94
+
95
+ So the override is stored as DATA on the item's history entry
96
+ (`history[].override = {gate, kind, missing}`), and
97
+ `docs/RETROSPECTIVE_<date>.md` prints one row per motive and one per gate
98
+ bypassed. Overrides recorded before this change are still counted, in
99
+ their own `sin tipo` row: discounting them would have made the total DROP
100
+ on the day of the fix, which is the worst way to measure a debt.
101
+
102
+ ## The catalogue's file names are PROTOCOL
103
+
104
+ Decided by the owner on 2026-11-01 (M-03, measured by the Urazuke
105
+ experiment), as a rule of the contract and not as an error message:
106
+
107
+ **The file names the step catalogue asks for are protocol and are NOT
108
+ translated. The CONTENT goes in the project's language.**
109
+
110
+ So a step that names `docs/ARCHITECTURE.md` is satisfied by a file at
111
+ exactly that path, whose prose may be entirely in Spanish. A
112
+ `docs/ARQUITECTURA.md` with the identical, correct content counts as
113
+ ABSENT -- and the gate now says so, with that reason, every time an
114
+ artifact is missing (`ARTIFACT_NAMES_ARE_PROTOCOL` in
115
+ `src/urazuke/gate.ts`), whether or not a similar-looking neighbour is
116
+ found next to it.
117
+
118
+ Why not a per-language alias table, which was the other option: **an alias
119
+ table is a second source of truth, and a second source of truth
120
+ desynchronises** -- the defect this project already has on record three
121
+ times. (Plus the price on the Forge side: 232 artifact names to maintain in
122
+ two languages.) It is the same line the `language-sovereignty` doctrine
123
+ draws for verb ids and code identifiers: translate the EXPERIENCE, never
124
+ the protocol.
125
+
126
+ What was unacceptable before this was never the requirement. It was the
127
+ SILENCE: a file with the right content next to it, counted as absent, with
128
+ no written reason.
129
+
130
+ ## The five statuses, and why `closed` is NOT `green`
131
+
132
+ A step carries ONE of five statuses, and two of them are easy to confuse --
133
+ the confusion cost a report that said 0 of 24 when three steps were closed
134
+ (F-07, measured by the Urazuke experiment, 2026-11-01):
135
+
136
+ | status | meaning |
137
+ |--------------|--------------------------------------------------------------|
138
+ | `closed` | the canonical task of this step IS CLOSED. Consolidated progress. The BEST state a step can be in. |
139
+ | `green` | the gate passes and the task is STILL OPEN: it CAN be closed, nobody closed it yet. |
140
+ | `red` | a check is missing. It does not close. |
141
+ | `owner` | nothing mechanical to check; the owner signs it. |
142
+ | `unmeasured` | the definition in force needs an evaluator this installation cannot measure. It does NOT close and it is NOT green. |
143
+
144
+ The two rules that follow:
145
+
146
+ 1. **`closed` and `green` are disjoint.** A closed step is reported as
147
+ `closed`, never as `green`. So **counting `green` to measure progress
148
+ LOSES every closed step** -- the best ones. Progress is `closed + green`
149
+ (`done_or_ready`), and a summary prints BOTH numbers, never one.
150
+ 2. **Nobody counts statuses on their own.** `summarizeLadder()` in
151
+ `src/urazuke/current.ts` is the only counter; the verb, the CLI, the
152
+ retrospective and the cyclic report all read it. A second, independent
153
+ count is exactly the inference the method warns against: it is how the
154
+ distinction gets lost again, in one consumer, silently.
155
+
156
+ ## How to work inside it
157
+
158
+ 1. Read the URAZUKE section: red checks are what is missing. Produce the
159
+ artifact at the path named, with real content, or ask the owner for the
160
+ input that is theirs (`antes de enviar`). Never invent an owner input.
161
+ 2. When the section says GREEN, close the task with `yujin.pending.close`
162
+ (full expediente) and the next step's prompt arrives on the next turn.
163
+ 3. `yujin.urazuke.status` shows the whole ladder; `yujin.urazuke.step`
164
+ shows any step in full (prompts, inputs, artifacts, checklist).
165
+ 4. The plan is the pendings: each item needs `spec` (acceptance "given /
166
+ when / then" + `how_verified`) before it is implemented (step 5).
167
+ 5. No deadlines, ever: the method fixes the order and the gates, not the
168
+ calendar. Speed is a consequence, not the objective.
169
+
170
+ ## The profiles axis: three evaluators, and where their data lives
171
+
172
+ Added 2026-11-01 (Pieza 6, D-044). The published definition requires these
173
+ three on the three anchors of the construction loop, and until that day this
174
+ installation could not measure any of them -- so adopting the published
175
+ definition froze three permanently unmeasurable steps.
176
+
177
+ | evaluator | step | what it measures |
178
+ |---|---|---|
179
+ | `pendings_profiles` | 5 | every open plan item that touches a screen declares its convergence group, the profiles that have it, and ONE acceptance criterion per profile |
180
+ | `profile_matrix` | 8 | the matrix is consistent, the navigation is DERIVED from it, and each profile's e2e reaches exactly its row |
181
+ | `manual_cases_per_profile` | 10 | every manual case ran once per affected profile, derived from the matrix |
182
+
183
+ The data, and the one rule that explains every choice -- **the matrix is the
184
+ producer**:
185
+
186
+ - `docs/PROFILE_MATRIX.md` carries the four columns of Annex H B2 and
187
+ nothing else: functionality, home, profiles, entry point. The table is
188
+ found by HEADER, so the column order is free.
189
+ - `.forge/profile-navigation.json` is the generated navigation, and it
190
+ declares a fingerprint. The evaluator **recomputes** that fingerprint from
191
+ the matrix and compares; it never reads the declared one and compares it
192
+ with itself, which would pass any file. The fingerprint is
193
+ self-describing (algorithm, encoding, canonical form, covers, excludes) --
194
+ one that cannot be reproduced from outside is not evidence.
195
+ - `.forge/profile-reachability.json` lists, per profile, what the e2e
196
+ **reached** (not what it attempted) and the id of its receipt. The
197
+ evaluator contrasts that id against the receipt registry: an artifact
198
+ whose receipt the registry does not have is prose.
199
+ - the two directions of "neither less nor more" fail DIFFERENTLY and never
200
+ merge into one red: reaching **less** than the row is a MISSING piece
201
+ (construction incomplete); reaching **more** is an AUTHORIZATION defect,
202
+ high severity by written definition. If the message does not name the
203
+ class, the reader under-rates it.
204
+ - the per-profile pending fields live in `PendingSpec` **in the registry**,
205
+ not in `docs/PENDING.md` (owner's decision, 2026-11-01): a gate cannot
206
+ measure prose, `pendings_spec` already measures there, and two sources for
207
+ the same datum age in opposite directions. The document is generated from
208
+ the registry or cites it. Write them with
209
+ `yf pending add --touches-screen --convergence-group ... --row-profile ...
210
+ --accept-for perfil=criterio`.
211
+ - `touches_screen` is a THREE-state field: absent means "not declared" and
212
+ the evaluator reports it as such -- never as "does not touch". Not looking
213
+ is not the same as nothing being there.
214
+ - the manual case ledger carries `functionality` (the link the method's
215
+ "derived from the matrix" implies): `yf urazuke rules sign <rule> passed
216
+ --by <name> --profile <id> --functionality "<row>"`. A case with a single
217
+ profile does NOT count as executed when its row has more.
218
+
219
+ To measure what adopting the published definition would cost BEFORE
220
+ adopting it: `yf urazuke rules show --published` (read only, writes
221
+ nothing, never blocks) and `yf urazuke gates pull`.
@@ -28,7 +28,22 @@ export declare function newTraceId(): string;
28
28
  export declare function hashUserText(text: string): string;
29
29
  /** Recursively redact + truncate an args object for safe logging. */
30
30
  export declare function redactArgs(args: unknown, depth?: number): unknown;
31
- /** Append a JSONL row. Never throws. */
31
+ /** Append a JSONL row. Never throws.
32
+ *
33
+ * EL DESTINO SE RESUELVE UNA SOLA VEZ, ARRIBA, ANTES DEL PRIMER AWAIT.
34
+ *
35
+ * El 2026-10-19 esto se "arreglo" moviendo la resolucion del path del
36
+ * import a la llamada, y no alcanzo: medido el 2026-11-03 con el arbol de
37
+ * configuracion fotografiado antes y despues de la bateria completa, el
38
+ * nac3_log.jsonl del dueno SEGUIA creciendo (+8.409 bytes, con entradas
39
+ * inconfundibles de prueba como el verbo `yujin.nope.does-not-exist`).
40
+ *
41
+ * La causa es la misma carrera que G-12: `void logDispatch(...)` --
42
+ * nadie lo espera -- pasaba por tres lecturas del entorno en instantes
43
+ * distintos (ensureDir, rotateIfNeeded, el appendFile), y para cuando
44
+ * despertaba la ultima, el afterEach del test ya habia borrado
45
+ * YF_CONFIG_DIR. Resolver el path "en el momento de la llamada" no sirve
46
+ * si hay varios momentos. Ver src/core/machine_files.ts. */
32
47
  export declare function logDispatch(entry: DispatchLogEntry): Promise<void>;
33
48
  /** Return the resolved log path. Exposed so tests can clean up. */
34
49
  export declare function logPath(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch_log.d.ts","sourceRoot":"","sources":["../../src/nac3/dispatch_log.ts"],"names":[],"mappings":"AAsDA,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,aAAa,GACb,qBAAqB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;iDACiD;AACjD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;+CAE+C;AAC/C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAuB5D;AAsBD,wCAAwC;AACxC,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CASxE;AAED,mEAAmE;AACnE,wBAAgB,OAAO,IAAI,MAAM,CAEhC"}
1
+ {"version":3,"file":"dispatch_log.d.ts","sourceRoot":"","sources":["../../src/nac3/dispatch_log.ts"],"names":[],"mappings":"AAuDA,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,aAAa,GACb,qBAAqB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;iDACiD;AACjD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;+CAE+C;AAC/C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAuB5D;AAsBD;;;;;;;;;;;;;;;6DAe6D;AAC7D,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxE;AAED,mEAAmE;AACnE,wBAAgB,OAAO,IAAI,MAAM,CAEhC"}
@@ -34,6 +34,7 @@ import path from 'node:path';
34
34
  import os from 'node:os';
35
35
  import crypto from 'node:crypto';
36
36
  import { renameWithRetry } from '../core/atomic_write.js';
37
+ import { machineFileDestination } from '../core/machine_files.js';
37
38
  /* Resolved at CALL time, not at import time, and honouring both overrides:
38
39
  * a test that sets YF_CONFIG_DIR / YUJIN_FORGE_HOME after the module loaded
39
40
  * must not write into the real ~/.yujin-forge/nac3_log.jsonl (it did on
@@ -92,34 +93,52 @@ export function redactArgs(args, depth = 0) {
92
93
  }
93
94
  return String(args);
94
95
  }
95
- async function ensureDir() {
96
+ async function ensureDir(dir) {
96
97
  try {
97
- await fs.mkdir(logDir(), { recursive: true });
98
+ await fs.mkdir(dir, { recursive: true });
98
99
  }
99
100
  catch {
100
101
  /* permission denied / fs error -- we'll fail-safe in append. */
101
102
  }
102
103
  }
103
- async function rotateIfNeeded() {
104
+ async function rotateIfNeeded(file) {
104
105
  try {
105
- const stat = await fs.stat(activeFile());
106
+ const stat = await fs.stat(file);
106
107
  if (stat.size < MAX_BYTES)
107
108
  return;
108
109
  const ts = new Date().toISOString().replace(/[-:T.]/g, '').slice(0, 15);
109
- const rotated = path.join(logDir(), 'nac3_log.' + ts + '.jsonl');
110
- await renameWithRetry(activeFile(), rotated);
110
+ const rotated = path.join(path.dirname(file), 'nac3_log.' + ts + '.jsonl');
111
+ await renameWithRetry(file, rotated);
111
112
  }
112
113
  catch {
113
114
  /* missing file is fine; other errors swallowed by design. */
114
115
  }
115
116
  }
116
- /** Append a JSONL row. Never throws. */
117
+ /** Append a JSONL row. Never throws.
118
+ *
119
+ * EL DESTINO SE RESUELVE UNA SOLA VEZ, ARRIBA, ANTES DEL PRIMER AWAIT.
120
+ *
121
+ * El 2026-10-19 esto se "arreglo" moviendo la resolucion del path del
122
+ * import a la llamada, y no alcanzo: medido el 2026-11-03 con el arbol de
123
+ * configuracion fotografiado antes y despues de la bateria completa, el
124
+ * nac3_log.jsonl del dueno SEGUIA creciendo (+8.409 bytes, con entradas
125
+ * inconfundibles de prueba como el verbo `yujin.nope.does-not-exist`).
126
+ *
127
+ * La causa es la misma carrera que G-12: `void logDispatch(...)` --
128
+ * nadie lo espera -- pasaba por tres lecturas del entorno en instantes
129
+ * distintos (ensureDir, rotateIfNeeded, el appendFile), y para cuando
130
+ * despertaba la ultima, el afterEach del test ya habia borrado
131
+ * YF_CONFIG_DIR. Resolver el path "en el momento de la llamada" no sirve
132
+ * si hay varios momentos. Ver src/core/machine_files.ts. */
117
133
  export async function logDispatch(entry) {
118
134
  try {
119
- await ensureDir();
120
- await rotateIfNeeded();
135
+ const destino = machineFileDestination('nac3_log.jsonl');
136
+ if (!destino.allowed || !destino.file || !destino.dir)
137
+ return;
138
+ await ensureDir(destino.dir);
139
+ await rotateIfNeeded(destino.file);
121
140
  const line = JSON.stringify(entry) + '\n';
122
- await fs.appendFile(activeFile(), line, { encoding: 'utf-8' });
141
+ await fs.appendFile(destino.file, line, { encoding: 'utf-8' });
123
142
  }
124
143
  catch {
125
144
  /* swallow -- dispatch path must not depend on log durability. */
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch_log.js","sourceRoot":"","sources":["../../src/nac3/dispatch_log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch_log.js","sourceRoot":"","sources":["../../src/nac3/dispatch_log.ts"],"names":[],"mappings":"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"}