@sentropic/h2a 0.87.0 → 0.89.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 (41) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/dist/cli-contract.d.ts.map +1 -1
  4. package/dist/cli-contract.js +9 -1
  5. package/dist/cli-contract.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +83 -34
  8. package/dist/cli.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/runtime/local-files/index.d.ts +1 -1
  14. package/dist/runtime/local-files/index.d.ts.map +1 -1
  15. package/dist/runtime/local-files/index.js.map +1 -1
  16. package/dist/runtime/local-files/paths.d.ts +27 -9
  17. package/dist/runtime/local-files/paths.d.ts.map +1 -1
  18. package/dist/runtime/local-files/paths.js +78 -18
  19. package/dist/runtime/local-files/paths.js.map +1 -1
  20. package/dist/runtime/local-files/store.js +1 -1
  21. package/dist/runtime/local-files/store.js.map +1 -1
  22. package/dist/runtime/loop/engine/adapters.js +1 -1
  23. package/dist/runtime/loop/engine/adapters.js.map +1 -1
  24. package/dist/runtime/loop/index.d.ts +2 -0
  25. package/dist/runtime/loop/index.d.ts.map +1 -1
  26. package/dist/runtime/loop/index.js +25 -0
  27. package/dist/runtime/loop/index.js.map +1 -1
  28. package/dist/runtime/mcp/handlers.d.ts +2 -1
  29. package/dist/runtime/mcp/handlers.d.ts.map +1 -1
  30. package/dist/runtime/mcp/handlers.js +81 -33
  31. package/dist/runtime/mcp/handlers.js.map +1 -1
  32. package/dist/runtime/mcp/server.js +1 -1
  33. package/dist/runtime/mcp/server.js.map +1 -1
  34. package/dist/runtime/mcp/tools.d.ts.map +1 -1
  35. package/dist/runtime/mcp/tools.js +2 -1
  36. package/dist/runtime/mcp/tools.js.map +1 -1
  37. package/dist/runtime/mirror/serve.d.ts.map +1 -1
  38. package/dist/runtime/mirror/serve.js +4 -12
  39. package/dist/runtime/mirror/serve.js.map +1 -1
  40. package/package.json +2 -2
  41. package/skills/harness/track-report/SKILL.md +285 -58
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/runtime/mirror/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/runtime/mirror/serve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentropic/h2a",
3
- "version": "0.87.0",
3
+ "version": "0.89.0",
4
4
  "description": "h2a — the unified CLI + core for human-to-agent coordination.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -51,7 +51,7 @@
51
51
  "@hono/mcp": "^0.3.0",
52
52
  "@hono/node-server": "^2.0.12",
53
53
  "@modelcontextprotocol/sdk": "^1.30.0",
54
- "@sentropic/track": "^0.87.0",
54
+ "@sentropic/track": "^0.89.0",
55
55
  "hono": "^4.12.32"
56
56
  },
57
57
  "peerDependencies": {
@@ -5,99 +5,326 @@ description: Use when asked for a track report, status, or advancement report. R
5
5
 
6
6
  # harness/track-report
7
7
 
8
- The agent already in the conversation supplies the contextual prose. `track` supplies complete,
9
- deterministic facts. Do not call a model, adapter, gateway, or network-backed report path. Every command
10
- below is a local, read-only projection of the folded log.
8
+ `track` supplies complete, deterministic facts and already renders the four sections the owner
9
+ validated. The agent already in the conversation supplies the contextual synthesis on top of them. Do not
10
+ call a model, adapter, gateway, or network-backed report path. Every command below is a local, read-only
11
+ projection of the folded log.
12
+
13
+ The shape is not yours to choose. It is fixed by `docs/specs/examples/track-report-contextual.md` (the
14
+ artefact the owner approved) and by `docs/specs/2026-07-29-track-report-period.md` and its two
15
+ corrections. Where this file and that spec disagree, the spec wins.
16
+
17
+ ## Bootstrap a fresh clone
18
+
19
+ `track` is built from this repository; a fresh clone has neither `packages/track/dist` nor a local
20
+ `track` executable. From the repository root, bootstrap it once before the read commands:
21
+
22
+ ```bash
23
+ npm ci
24
+ npm run build -w @sentropic/track
25
+ track_bin="$(pwd -P)/packages/track/dist/cli/bin.js"
26
+ test -f "$track_bin"
27
+ node "$track_bin" --version
28
+ ```
29
+
30
+ `track_bin` is an absolute path to this checkout's built executable. Record and reuse that value in every
31
+ later tool call: `node "$track_bin" …` cannot fall through to a globally installed `track`, even when a
32
+ tool persists only its cwd and not its shell functions. The bootstrap and every command below are read-only
33
+ with respect to `.track/`.
11
34
 
12
35
  ## Read the deterministic layer
13
36
 
14
37
  Run these commands from the repository root, in this order:
15
38
 
16
39
  ```bash
17
- track report --raw --format json
18
- track report --wp --decisions --format json
19
- track decision ls --outcome pending --format json
40
+ node "$track_bin" report --raw --format json
41
+ node "$track_bin" report --wp --decisions --format json
42
+ node "$track_bin" decision ls --outcome pending --format json
20
43
  ```
21
44
 
22
- - The first command is the factual snapshot: all buckets, their raw total, recent events, decision
23
- `structure`, `outsideRollup`, and a reconciled `wpTotals`.
45
+ - The first command is the factual snapshot: all buckets, their raw total, decision `structure`,
46
+ `outsideRollup`, and a reconciled `wpTotals`. Its top-level `directives` has
47
+ `directivesProjection.kind: "rule-derived-facts"` and
48
+ `order: "aggregate-id-then-id"`: these are compact rule-derived facts, not the conductor actions.
49
+ `recentEventsProjection` says that `recentEvents` is the last **up to 200** append-ordered,
50
+ payload-free `position/eventId/kind/aggregateId` entries; it is history evidence, not a task queue.
24
51
  - The second is the complete conductor projection. Its `wpTree` and `view` are the only source for WP
25
- identity, per-WP percentages, directives, and their deterministic order. It never truncates rows.
52
+ identity, per-WP percentages, and action directives. `view.tables` is already the four sections in
53
+ order. `view.directivesProjection` is `conductor-action-directives` in `canonical-urgency` order.
54
+ `view.dispatchQueueProjection` identifies `dispatchQueue` as the canonical-order ids from that same
55
+ array whose modes are `subagent` or `local`; resolve an id only against `view.directives`, never against
56
+ raw-snapshot `directives`.
26
57
  - The third lists every pending decision without a renderer cap. Each row carries its exact `workspace`,
27
58
  `options`, `recommendation`, and `structure` (`structured` or `unstructured`).
28
59
 
60
+ The three commands are the live-report route. To verify the named historical fixture only, materialize its
61
+ fixed log and run these **same three commands** with `--track-dir <fixture-dir>` and `--commit <fixture-sha>`
62
+ on every command. That fixture override is not a live-report default and must not replace the commands
63
+ above.
64
+
65
+ `--track-dir <directory-containing-events.jsonl>` is a documented global override: it may appear before or
66
+ after the command, and `TRACK_DIR` is its environment equivalent. Confirm its spelling with
67
+ `node "$track_bin" --help` or `node "$track_bin" report --help`. It redirects the whole **store**, reads and
68
+ writes alike — a write verb run under `--track-dir` appends to that directory. Point it at a copy, never at
69
+ a log you are not the designated writer for. The report commands above are read-only by themselves; the
70
+ override does not make an arbitrary command read-only.
71
+
29
72
  Do not use `track report --flat` to recover omitted conductor rows: it is a deterministic flat diagnostic,
30
- not an emergency route. The conductor projection above is complete. Do not use `track report --level wp`
31
- to label WPs for this report; it is a different status projection. If it is useful as a diagnostic, its
32
- labels now match the conductor, but the conductor remains the report's single source.
73
+ not an emergency route. Do not use `track report --level wp` to label WPs for this report; it is a
74
+ different status projection.
33
75
 
34
- If `outsideRollup` is non-empty, render a visible **HORS ROLLUP** group with every row. `wpId` absent means
35
- the item has no WP ancestor; a present `wpId` means an intermediate non-WP item is outside the leaf-only
36
- rollup. Neither may disappear from the report. Check that `DONE + TO-DO + AWAITED + DROPPED` equals
76
+ Check that `DONE + TO-DO + AWAITED + DROPPED` equals
37
77
  `wpTotals.done + (wpTotals.active - wpTotals.done) + wpTotals.dropped`; if it does not, report the mismatch
38
78
  as a tool defect rather than silently selecting a denominator.
39
79
 
40
- ## Inspect decisions safely
80
+ `view.directives` is already in canonical urgency order. Preserve that array order whenever directives are
81
+ listed; never re-sort or group it by `rank`. `rank` is a coarse display badge, so repeated/interleaved
82
+ badges are intentional. The fixed ladder is: decision/engagement wait, dependency, failed acceptance,
83
+ in-progress work, stale acceptance, missing specification, WSJF-ranked to-do, then fallback. WSJF breaks
84
+ ties only within its tier; it does not explain a change between these tiers.
85
+
86
+ ## The three inputs, declared
87
+
88
+ The contextual report is a synthesis over **three** inputs, and it names which one each claim comes from:
89
+
90
+ 1. **the deterministic projection** — the three commands above. Structure, percentages, blockers,
91
+ dossiers, handles.
92
+ 2. **the repository history over the window** — `git log`, merged PRs, releases, tags. This is where
93
+ `15 PR mergées`, `release 0.86.0`, `#53`, `37 → 52` come from. No amount of reading `.track` yields
94
+ them. If you did not run the git commands, you do not have this input, and you write nothing that
95
+ would need it.
96
+ 3. **owner/session context** — the executor model (`sol xhigh`, `terra xhigh`), and which objectives the
97
+ owner considers the focus.
98
+
99
+ Every **structured** claim in FAIT — a count, a version, a PR number, a percentage — carries its
100
+ provenance and must be recomputable from input 1 or input 2. A claim traceable to neither is a
101
+ fabrication. Free prose is not machine-checkable and this rule does not pretend it is.
102
+
103
+ ## Authoritative section order
104
+
105
+ Render exactly four sections, in this order, and nothing else: **FAIT**, **À-FAIRE**, **DÉCISIONS**,
106
+ **RECOMMANDATION**. `view.tables` is already exactly that. There is no `À-FAIRE SANS WP`, no
107
+ `HORS ROLLUP`, no `À INSTRUIRE`, no `HISTORIQUE NON STRUCTURÉ`, no `ACTIONS DÉRIVÉES`: what those tables
108
+ carried is folded into the four, and what they carried that does not matter is not printed.
109
+
110
+ The header carries the **period**, the **acceptance baseline** and the two coverage counts. It carries no
111
+ bucket counters.
112
+
113
+ **There is always a window, and it always has bounds.** "The whole log" *is* a window: first recorded
114
+ event → now. Both bounds are in the log and need no selector, so the header always reads
115
+ `période : 2026-06-09 → 2026-07-29 (intégralité du journal)`. The phrase `aucune fenêtre` is wrong — it
116
+ described the absence of a flag, not the absence of a period. What is still forbidden is announcing a
117
+ window nothing supports: `--since`/`--until`/`--period` do not exist, so a window you did not measure in
118
+ the log is invented. `--now <iso>` pins the upper bound when you need a reproducible render.
119
+
120
+ The acceptance baseline is **not** a window. Keep the two apart in the sentence, as the renderer does.
121
+
122
+ **FAIT** — `scope · avancement · dernières actions`. The third column names what was accomplished, not the
123
+ arithmetic: `agrégat de périmètre; pas une action` and `WP clos (état enregistré)` are both forbidden.
124
+
125
+ **Write each cell by the finality.** Not the mechanism, not the chronology: the capability reached, what
126
+ it enables, what class of problem it closes. A reader who does not know the code must understand what was
127
+ gained. Numbers, versions, dates and identifiers come in support — once or twice, to prove — never as the
128
+ structure of the sentence.
129
+
130
+ What that means concretely, on WP2:
131
+
132
+ > ❌ *« reach-guard partagé sur les chemins réveil/relance et workspace-id git-dérivé (09/06),
133
+ > `discover --live` classé par confiance (14/06), signal de confiance de connexion honnête + arrêt
134
+ > gracieux et purge de présence fantôme (10/06), `touch()` qui ressuscite une présence balayée (18/06) »*
135
+ >
136
+ > ✅ *« Adresser un agent ne relève plus du pari.
137
+ > La cible est vérifiée avant l'envoi et les sessions mortes cessent de répondre — 337 destinataires
138
+ > annoncés, 3 réellement joignables. »*
139
+
140
+ The first is a commit list translated into French. What disappears: a parenthesised date on every clause,
141
+ symbol names in series, chronological enumeration. What stays: one or two measures that make the
142
+ capability credible.
41
143
 
42
- Never infer choices by parsing a prose `context` field.
144
+ **One idea per line.** A cell is written as an editor writes, with a line break between ideas — two to
145
+ four lines per WP on a long window. The renderer honours `\n` in every format, so use it. A cell that
146
+ overflows is enumerating instead of synthesising, which is the same defect again.
43
147
 
44
- - A `structured` decision has at least two stored `options` and a stored `recommendation`; render those
45
- choices, their stored titles/summaries, and the recommendation in **DÉCISIONS**. Do not invent an effect:
46
- no separate machine-readable effect field is exposed.
47
- - An `unstructured` decision has no machine-readable choice set, even if its prose happens to contain
48
- “Choix A”. Put it in **À INSTRUIRE** as “dossier à structurer”; say explicitly that alternatives are not
49
- recorded. Do not present it as an owner choice with invented alternatives.
148
+ **Over a long window the deterministic layer cannot help you here, and it says so.** When a scope has more
149
+ completions than fit, the cell reads `bilan à écrire : N livraisons sur la fenêtre, titres seuls dans le
150
+ projeté. / Écrire par la finalité …`. **That is an instruction, not a result.** It deliberately does *not*
151
+ list the titles: a chronological list of item titles is exactly the shape forbidden above, and the
152
+ renderer will not hand you one to paste. Get the material from input 2 — `git log`, merged PRs, releases,
153
+ tags over the window — plus `track query --bucket DONE` for the item set, and name the provenance. If you
154
+ do not have input 2, leave the cell saying what is missing.
50
155
 
51
- For a single structured dossier, use the exact workspace from `decision ls`:
156
+ **The global row is an aggregate: never turn its count into an accomplishment sentence.**
157
+
158
+ **Stop at the WP on a long window.** A sub-WP is implementation detail; beside its own parent it inflates
159
+ the table, repeats the parent's information and blurs the reading by theme. On a window of two weeks or
160
+ more the renderer aggregates sub-levels into their parent — their leaves, deliveries and directives merge
161
+ upward, nothing is lost — and the header declares how many (`8 sous-WP agrégés dans leur parent`). Do not
162
+ re-expand them. They come back on a short window, or on the owner's explicit request
163
+ (`track report --sub-wp`).
164
+
165
+ **À-FAIRE** — exactly five columns: `WP · av. · à faire · bloqué · prochaine action`. There is no
166
+ `cible action` column; a DONE item carrying acceptance debt is named inside `à faire` with its bucket.
167
+ Print the line `ordre = priorité ; les cinq premiers sont le focus` under the heading.
168
+
169
+ - `bloqué` names the **answer** that unblocks — `D7`, `D1–D5` — or a short gate token (`spec`,
170
+ `recette`, `dépendance`, `h2a`, `priorité`). It never restates the question.
171
+ - **An empty `bloqué` means no blockage is recorded.** A recorded gate rendered `—` is a failure, not a
172
+ clean cell. The machine-only `gateDetail` property carries the precise gate phrase if you need it.
173
+ - `prochaine action` names **the concrete next gesture on that item** — the file, the function, the
174
+ question to settle, the command to run. See the section below: this is the criterion that failed UAT.
175
+ - A row gated on a pending dossier has **no** next action until the decision lands — that is the only
176
+ case where `—` is correct there.
177
+ - WP labels are short human names (`WP2 · Addressing`), never the full stored title.
178
+ - One item per line, and an item's recorded body excerpt on its own line beneath it
179
+ (`↳ extrait : …`) — a supporting clause, never a paragraph appended to the title. The excerpt comes
180
+ from the log and costs no investigation; a bare title means the log records only a title, and that is
181
+ a different kind of emptiness from a row nobody has looked at yet. Keep the two distinguishable.
182
+
183
+ **DÉCISIONS** — a drawn table `# · sujet · alternatives · préco`, numbered `D1…Dn`, each recommendation on
184
+ the line of its own option. The renderer already draws it; `formatWpConductor` adds no fence in `text`, and
185
+ fences it in `md`.
186
+
187
+ **DÉCISIONS carries only pending dossiers the owner can answer now. Nothing else.**
188
+
189
+ - **A `D` number is reserved for a dossier whose options AND recommendation are stored.** A report that
190
+ prints alternatives absent from the log fails, however plausible they are.
191
+ - **A settled dossier leaves the report.** It has nothing left to answer, it crowds out the dossiers that
192
+ are still waiting, and it is already visible where it counts: in the freed `bloqué` cell of the row it
193
+ used to gate, or in FAIT if it produced something. It is counted among the omitted rows, with its
194
+ reason. Do not render it as history.
195
+ - **A pending dossier with no stored options cannot be answered either**, so it is not offered here.
196
+ `non enregistrées — à structurer` teaches nothing and cannot be replied to. It belongs in À-FAIRE as
197
+ the work of making it answerable: record its options and recommendation
198
+ (`track decision dossier <id>`), then it earns a `D` number.
199
+ - Never infer choices by parsing a prose `context` field. There is no machine-readable effect field; do not
200
+ invent one.
201
+ - For a single structured dossier, use the exact workspace from `decision ls`:
202
+ `node "$track_bin" focus <decision-id> --workspace <workspace-from-decision-ls>`. `--workspace` is
203
+ required; a mismatched workspace is an error. Never substitute `track workspace-id` or a workspace
204
+ inferred from the current directory.
205
+
206
+ **RECOMMANDATION** — what starts with no answer at all, then what each answer unblocks, then a single
207
+ reply line. The owner must be able to answer `vas y` or `D1 A · D2 B · D3 A`. If `decision ls` has zero
208
+ `structure: "structured"` pending rows, this section says exactly:
209
+ `Aucun D# disponible : aucun dossier structuré sélectionnable dans le journal.` Do not invite `D1 A` in
210
+ that case; name only recorded non-decision directives that can start now, and name each unstructured
211
+ dossier as the prerequisite to a selectable decision. If no non-decision directive exists, say that no
212
+ executable lane is attested.
213
+
214
+ ## `prochaine action` is investigated, not derived
215
+
216
+ This is the criterion the owner's UAT rejected, and it is the one that matters most.
217
+
218
+ The gate of a directive gives you `Terminer l'incrément en cours`, `Rédiger la spécification`,
219
+ `Relancer la vérification`. Those name the **class** of the work, never the work. Twenty rows, five
220
+ distinct sentences, zero information: that is a template, not a recommendation. The renderer no longer
221
+ serves them as next actions — it keeps the class on a machine-only `gateStep` property, and the class is
222
+ in any case what the `bloqué` column already says.
223
+
224
+ What the report must carry instead, **for every focus row**: the concrete next gesture on *that* item —
225
+ the file to change, the function, the question to settle, the command to run. You get it by **opening the
226
+ item**: its body, its acceptance criteria, the commits and the code it references. That is investigation,
227
+ not a rewording of the gate. `track report --resolve <handle>` gives you the id to open.
228
+
229
+ It costs real per-row work, so it is **bounded to the focus rows** — the five the ordering line names.
230
+ The renderer marks them `à instruire : ouvrir l'item et nommer le geste`; you must replace every one of
231
+ those markers before serving the report. Every other row keeps `non instruite`, which says plainly that
232
+ the action has not been instructed — that is honest, and it is what you leave there.
233
+
234
+ Checkable, and to be run before serving: `auditNextActions(values, gateClauses)` from
235
+ `@sentropic/track` returns `{ uninstructed, repeated, gateClauses, ok }`. `uninstructed > 0` means focus
236
+ rows still carry the renderer's marker — finish them. `ok === false` means a substantive action repeats
237
+ on three or more rows, or equals a gate clause: in both cases it names a class, not a gesture. Not
238
+ checkable, and the part that actually failed the UAT: whether the sentence is *right*. The owner judges
239
+ that, and no green test substitutes for it.
240
+
241
+ ## Compress, but never hide
242
+
243
+ The report is a decision surface, not an inventory. Compressing the projection is the work, not a defect —
244
+ the validated report renders 15 À-FAIRE rows against a raw projection of 64. Two rules make that safe:
245
+
246
+ - **State both counts.** The header says `N lignes projetées · M rendues` and how many were omitted.
247
+ Omission is a declared act, never a silent one.
248
+ - **Two classes are never omitted**: every WP carrying open work, and every pending dossier. Deleting a
249
+ row is never a way to turn a criterion green. An adversarial review once produced a report that passed
250
+ every shape criterion while deleting 44 of 48 rows and inventing the decisions it kept; these two rules
251
+ exist because of it.
252
+
253
+ What may be omitted: a WP with no open work, no recorded gate and no recorded completion; and a settled
254
+ dossier, which has nothing left to answer. **Every omission names its reason** — the header groups them
255
+ (`60 omises : 47 WP sans item ouvert… · 13 décision déjà tranchée…`). An omission without a why is the
256
+ silence this rule exists to forbid.
257
+
258
+ **If you cannot make a row intelligible, do not serve it as it is.** `non enregistrées · aucune option
259
+ attestée` describes the state of a datum, not a situation to act on. Either instruct the row — say what
260
+ would make it answerable, what it would take to act — or count it among the omissions and say why. Those
261
+ are the only two outcomes. Serving the obscure verbatim is the third, and it is the one the UAT rejected.
262
+
263
+ ## Handles, and what they are worth
264
+
265
+ Each actionable row carries a positional handle `[n.m]` — row `n`, item `m` — and the report ends with a
266
+ **resolution block** mapping every emitted handle to its item id, plus the one command that acts on it:
52
267
 
53
268
  ```bash
54
- track focus <decision-id> --workspace <workspace-from-decision-ls>
269
+ node "$track_bin" report --resolve <handle>
55
270
  ```
56
271
 
57
- `--workspace` is required. A mismatched workspace is an error; never substitute `track workspace-id` or a
58
- workspace inferred from the current directory. Number only structured decisions `D1…Dn`, in their relative
59
- `decision ls` order, and retain each decision id alongside the number. Unstructured dossiers do not reserve
60
- a D-number: list them in À INSTRUIRE as “dossier à structurer”.
272
+ The handle token `[n.m]` is emitted **verbatim in text, Markdown and HTML** — it is machine-generated, so
273
+ it is exempt from the Markdown escaping applied to user-originated titles, and the three formats yield the
274
+ same handle set. Copy a handle straight from any rendering into `--resolve`; never unescape it first.
275
+
276
+ Handles are **per-report and positional**. Two reports over the same log may number differently; the
277
+ resolution block is what makes a reply unambiguous. A reply quoting `[3.2]` without the report it came
278
+ from is not actionable, and the report says so. The resolution block is the machine's half of the page,
279
+ not a table the owner reads — it is also the only place an item id appears.
61
280
 
62
- This skill is **advisory**. No command, hook, MCP tool, or validator executes it
63
- or proves that a synthesis followed it. Do not describe this guidance as an
64
- enforcement mechanism.
281
+ **No ULID appears in any column the owner reads.** Not in À-FAIRE, not as decision identity, not in FAIT.
282
+ This is checkable by `[0-9A-HJKMNP-TV-Z]{26}` over the rendered table bodies, in every format.
65
283
 
66
- **FAIT** — `scope · avancement · dernières actions`. State the period you used (last report, baseline
67
- commit, or explicit session boundary) and synthesize accomplishments, not inventory. Keep the raw and
68
- conductor total distinction honest: they should now reconcile; mention HORS ROLLUP when it is non-empty.
284
+ ## The executor, and what the log does not record
69
285
 
70
- **À-FAIRE** — `WP · av. · à faire · bloqué · prochaine action`. Render every WP from `view.tables`, then
71
- the HORS ROLLUP rows when present. Start with the deterministic `view.directives` order: it combines the
72
- recorded gate/acceptance/WIP ladder with stored WSJF where one exists. Do not call that subjective
73
- “priority” when `facts.wsjf` is absent. A `priority-missing` directive means the log has no assessment;
74
- only an owner-authorized write such as
75
- `track priority assess <item-id> --ubv <n> --tc <n> --rr <n> --js <n>` can add one.
286
+ The log does **not** record a model or reasoning effort. Owner/session context means only (1) an explicit
287
+ owner statement in this report request/current conversation, or (2) an explicitly cited owner-authored
288
+ session artifact that maps this exact item, WP, or directive to an executor (and, if claimed, model/effort).
289
+ It excludes project memory, repository documents, installed configuration, defaults, prior conventions, and
290
+ inference. Context may enrich executor prose only; it never overrides emitted order, gates, or facts. When
291
+ the report needs model/effort but that narrow context is absent, write exactly:
292
+ `exécuteur: contexte owner requis (modèle/effort non présents dans le journal)`.
76
293
 
77
- `prochaine action` must name an executor. The log does **not** record a model or reasoning effort. Use a
78
- model/effort only when owner/session context supplied it; otherwise write exactly that the executor is
79
- owner context required, for example: `exécuteur: contexte owner requis (modèle/effort non présents dans le
80
- journal)`. Do not invent `sol xhigh` or similar conventions, and do not leave the field blank.
294
+ Do not call an absent `facts.wsjf` subjective "priority". A `priority-missing` directive means the log has
295
+ no assessment; only an owner-authorized write such as
296
+ `node "$track_bin" priority assess <item-id> --ubv <n> --tc <n> --rr <n> --js <n>` can add one.
81
297
 
82
- **DÉCISIONS** — only structured, genuine native dossiers (pending or settled). Render their stored alternatives,
83
- recommendation, and a durable selected option when present. `formatWpConductor` uses ordinary
84
- drawn tables and does not add a fence; add one only when the destination requires it. Rule-derived
85
- blocker prompts stay in À-FAIRE; unstructured dossiers stay in À INSTRUIRE.
298
+ ## The compact route is not this report
86
299
 
87
- **RECOMMANDATION** — an executable plan conditioned on those decisions: name lanes that can start now,
88
- what each answer unblocks, and where executor context is still required. The owner must be able to reply
89
- `vas y` or `D1 A · D2 B` without the report pretending an unrecorded choice exists.
300
+ `--inline` **and `--width <40..240>`** both select the same compact terminal summary — passing a width turns
301
+ inline on, whether or not you wrote `--inline`. That route is not the complete report: at every width it
302
+ drops **DÉCISIONS**, **RECOMMANDATION** and the handle resolution block, collapses a tail into “+N autres”,
303
+ and prints its own deterministic `PRÉCO` block. Never use either flag to satisfy the sections above, and do
304
+ not quote a `PRÉCO` line as the report's recommendation. The three read commands at the top of this file
305
+ carry no width and must not be given one.
90
306
 
91
- `track report --inline` is a compact terminal summary, not the complete report route: it may summarize a
92
- tail with an explicit count. Do not use it to satisfy the four sections above or to recover HORS ROLLUP rows.
307
+ `--decisions` changes the emitted JSON payload; it does not gate the DÉCISIONS section in text, Markdown, or
308
+ HTML, which render dossiers whenever the log holds any. Passing it is still correct — just do not conclude
309
+ from a missing section that the flag failed.
93
310
 
94
311
  ## Honesty rules
95
312
 
96
- - Every conductor row, pending decision, and outside-rollup item appears. Never summarize a hidden tail as
97
- “+N autres”.
98
- - A rule-derived prompt is not a decision. It belongs in À-FAIRE as a dossier/action to prepare.
313
+ These describe the three read commands above. They are guarantees of that route only; `--inline`/`--width`
314
+ truncates by design and `--flat` is a different projection.
315
+
316
+ - Every WP carrying open work and every pending decision appears. Compression is declared with both
317
+ counts; a hidden tail summarized as “+N autres” is not compression, it is hiding.
318
+ - A rule-derived prompt is not a decision. It belongs in À-FAIRE, never in DÉCISIONS, and never gets a
319
+ D-number.
99
320
  - Prefer named items and concrete acceptance debt over generic counts.
100
321
  - The deterministic layer proves structure and order; contextual wording remains the agent's responsibility.
101
322
  State uncertainty instead of promoting a missing stored fact to a conclusion.
102
323
 
103
- Spec: `docs/specs/2026-07-28-track-report-contextual-rendering.md`.
324
+ This skill is **advisory**. No command, hook, MCP tool, or validator executes it or proves that a synthesis
325
+ followed it. The unit tests bind the *renderer*, not an agent reading this file. Do not describe this
326
+ guidance as an enforcement mechanism.
327
+
328
+ Spec: `docs/specs/2026-07-29-track-report-period.md`.
329
+ Shape reference: `docs/specs/examples/track-report-contextual.md`.
330
+ Deterministic input: `docs/specs/examples/track-report-raw.txt`.