arcane-cli 1.19.0 → 1.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/assets/.arcane/governance/spell-authoring-standards.md +34 -22
- package/dist/assets/.arcane/governance/threat-model.md +4 -4
- package/dist/assets/.arcane/spells/_fragments/action-required.md +27 -0
- package/dist/assets/.arcane/spells/_fragments/presence-report.md +1 -1
- package/dist/assets/.arcane/spells/spell-address-review.md +21 -9
- package/dist/assets/.arcane/spells/spell-adopt-docs.md +21 -9
- package/dist/assets/.arcane/spells/spell-app-store-accounts.md +22 -10
- package/dist/assets/.arcane/spells/spell-architect.md +21 -9
- package/dist/assets/.arcane/spells/spell-close-session.md +26 -14
- package/dist/assets/.arcane/spells/spell-commit-work.md +22 -10
- package/dist/assets/.arcane/spells/spell-create-pull-request.md +22 -10
- package/dist/assets/.arcane/spells/spell-eas-store-deploy.md +21 -9
- package/dist/assets/.arcane/spells/spell-full-cycle.md +21 -9
- package/dist/assets/.arcane/spells/spell-implement.md +1 -1
- package/dist/assets/.arcane/spells/spell-make-discoverable.md +21 -9
- package/dist/assets/.arcane/spells/spell-open-session.md +23 -11
- package/dist/assets/.arcane/spells/spell-parallel-workers.md +23 -11
- package/dist/assets/.arcane/spells/spell-plan.md +21 -9
- package/dist/assets/.arcane/spells/spell-review-batch.md +21 -9
- package/dist/assets/.arcane/spells/spell-review.md +22 -10
- package/dist/assets/.arcane/spells/spell-scope.md +21 -9
- package/dist/assets/.arcane/spells/spell-ship.md +21 -9
- package/dist/assets/.arcane/spells/spell-sync-pull-request.md +22 -10
- package/dist/assets/ai-context/system-prompt-context.md +1 -1
- package/dist/assets/report/show-report.template.html +31 -14
- package/dist/assets/schemas/presence.schema.json +28 -9
- package/dist/index.js +34 -28
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/assets/.arcane/spells/_fragments/needs-you.md +0 -15
|
@@ -252,23 +252,35 @@ If `external_provider=jira` or `external_provider=other`, add explicit TODOs in
|
|
|
252
252
|
|
|
253
253
|
### 9. Present and Confirm
|
|
254
254
|
|
|
255
|
-
<!-- fragment:
|
|
256
|
-
**
|
|
255
|
+
<!-- fragment:action-required:start -->
|
|
256
|
+
**Action required — what only the operator can do.** When this run leaves an action that only the operator can take, report it in one block at the very top of the final report, before every other section and before any optional next step. The block exists because these are the operator's decisions to make, not because the agent is stuck: write it as a hand-off of authority, never as a plea for help. Frame it with a horizontal rule above and below, so it stands apart in a terminal as well as on a rendered page:
|
|
257
257
|
|
|
258
258
|
```markdown
|
|
259
|
-
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 🚧 Action required
|
|
262
|
+
|
|
263
|
+
**Now**
|
|
264
|
+
|
|
265
|
+
- <exactly what to do: the command, the link, or the question> — <why only the operator can do it>
|
|
260
266
|
|
|
261
|
-
|
|
267
|
+
**When you're at your desk**
|
|
268
|
+
|
|
269
|
+
- <exactly what to do> — <why only the operator can do it>
|
|
270
|
+
|
|
271
|
+
---
|
|
262
272
|
```
|
|
263
273
|
|
|
264
|
-
- **What belongs in it:** an action
|
|
265
|
-
- **
|
|
274
|
+
- **What belongs in it:** an action only the operator can take — approving or merging a pull request, accepting a decision record, answering a question the work is waiting on, confirming a `guarded` push, running an interactive command such as `spell unblock-push`, or a step on an external platform the agent cannot reach. An optional suggestion, a next spell to run, or anything the agent could do itself is not a required action and stays out of the block.
|
|
275
|
+
- **Two tiers, one block.** **Now** holds what the work is not correct or complete without. **When you're at your desk** holds what only the operator can do but that can wait: a permission rule, a leftover remote branch, a credential to set up. Leave out a tier that has nothing in it; never split the tiers into two blocks.
|
|
276
|
+
- **One line per action.** Say exactly what to do, then, after the dash, why only the operator can do it. Write the command, link or question out in full; never point elsewhere with "see above".
|
|
266
277
|
- **Never only among optional steps.** An action required for correctness is never listed only under next steps, suggestions, `Carry Forward` or `What's Next?`. It may be repeated there, but it always appears in this block.
|
|
267
|
-
- **
|
|
278
|
+
- **Done items stay, struck through.** Within one session, once an item has been listed, keep it in every later report of the block; when the operator has done it, strike it through (`~~<the line>~~`) rather than dropping it, so progress shows and nothing disappears silently. The session's close carries only the open items forward.
|
|
279
|
+
- **Omit it when empty.** When nothing is left for the operator and nothing was struck through this session, leave the block out entirely: no heading, no rules and no "None" line.
|
|
268
280
|
- **Every final report.** The block belongs in whatever report ends the run, including a report written when the spell stops early.
|
|
269
|
-
- **Report
|
|
281
|
+
- **Report the Now tier to the presence channel.** When the **Now** tier has open items, also run `spell presence report --status waiting --required-action "<line 1>" --required-action "<line 2>"`, one flag per open line of that tier; the other tier is not blocking and is not reported. With no presence channel configured on this machine the command prints nothing and exits 0, so the block itself and the rest of the run are unchanged.
|
|
270
282
|
- Enforcement: explicitly advisory prose (ARC-023) — no check reads a spell's actual output for this block; it holds by these instructions alone.
|
|
271
|
-
<!-- fragment:
|
|
283
|
+
<!-- fragment:action-required:end -->
|
|
272
284
|
|
|
273
285
|
Present the execution plan to the user. Ask:
|
|
274
286
|
1. Does the epic split make sense?
|
|
@@ -97,23 +97,35 @@ Workflow:
|
|
|
97
97
|
- OR: BLOCK — [reason]
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
-
<!-- fragment:
|
|
101
|
-
**
|
|
100
|
+
<!-- fragment:action-required:start -->
|
|
101
|
+
**Action required — what only the operator can do.** When this run leaves an action that only the operator can take, report it in one block at the very top of the final report, before every other section and before any optional next step. The block exists because these are the operator's decisions to make, not because the agent is stuck: write it as a hand-off of authority, never as a plea for help. Frame it with a horizontal rule above and below, so it stands apart in a terminal as well as on a rendered page:
|
|
102
102
|
|
|
103
103
|
```markdown
|
|
104
|
-
|
|
104
|
+
---
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
## 🚧 Action required
|
|
107
|
+
|
|
108
|
+
**Now**
|
|
109
|
+
|
|
110
|
+
- <exactly what to do: the command, the link, or the question> — <why only the operator can do it>
|
|
111
|
+
|
|
112
|
+
**When you're at your desk**
|
|
113
|
+
|
|
114
|
+
- <exactly what to do> — <why only the operator can do it>
|
|
115
|
+
|
|
116
|
+
---
|
|
107
117
|
```
|
|
108
118
|
|
|
109
|
-
- **What belongs in it:** an action
|
|
110
|
-
- **
|
|
119
|
+
- **What belongs in it:** an action only the operator can take — approving or merging a pull request, accepting a decision record, answering a question the work is waiting on, confirming a `guarded` push, running an interactive command such as `spell unblock-push`, or a step on an external platform the agent cannot reach. An optional suggestion, a next spell to run, or anything the agent could do itself is not a required action and stays out of the block.
|
|
120
|
+
- **Two tiers, one block.** **Now** holds what the work is not correct or complete without. **When you're at your desk** holds what only the operator can do but that can wait: a permission rule, a leftover remote branch, a credential to set up. Leave out a tier that has nothing in it; never split the tiers into two blocks.
|
|
121
|
+
- **One line per action.** Say exactly what to do, then, after the dash, why only the operator can do it. Write the command, link or question out in full; never point elsewhere with "see above".
|
|
111
122
|
- **Never only among optional steps.** An action required for correctness is never listed only under next steps, suggestions, `Carry Forward` or `What's Next?`. It may be repeated there, but it always appears in this block.
|
|
112
|
-
- **
|
|
123
|
+
- **Done items stay, struck through.** Within one session, once an item has been listed, keep it in every later report of the block; when the operator has done it, strike it through (`~~<the line>~~`) rather than dropping it, so progress shows and nothing disappears silently. The session's close carries only the open items forward.
|
|
124
|
+
- **Omit it when empty.** When nothing is left for the operator and nothing was struck through this session, leave the block out entirely: no heading, no rules and no "None" line.
|
|
113
125
|
- **Every final report.** The block belongs in whatever report ends the run, including a report written when the spell stops early.
|
|
114
|
-
- **Report
|
|
126
|
+
- **Report the Now tier to the presence channel.** When the **Now** tier has open items, also run `spell presence report --status waiting --required-action "<line 1>" --required-action "<line 2>"`, one flag per open line of that tier; the other tier is not blocking and is not reported. With no presence channel configured on this machine the command prints nothing and exits 0, so the block itself and the rest of the run are unchanged.
|
|
115
127
|
- Enforcement: explicitly advisory prose (ARC-023) — no check reads a spell's actual output for this block; it holds by these instructions alone.
|
|
116
|
-
<!-- fragment:
|
|
128
|
+
<!-- fragment:action-required:end -->
|
|
117
129
|
|
|
118
130
|
7. **Request human approval** — present the ship report and wait for explicit approval.
|
|
119
131
|
|
|
@@ -110,7 +110,7 @@ then classify **each conflicted hunk independently** — a single file can conta
|
|
|
110
110
|
that one side's content is a strict superset of the other's. **STOP.** Do not guess, do not pick a
|
|
111
111
|
side, do not attempt a "reasonable-looking" merge of the two. Abort the in-progress rebase/merge
|
|
112
112
|
(`git rebase --abort` / `git merge --abort`) so the branch is left exactly as it was, then report:
|
|
113
|
-
- First, the `##
|
|
113
|
+
- First, the `## 🚧 Action required` block described in Step 6, naming the manual resolution as the action.
|
|
114
114
|
- The exact conflicting file(s) and hunk(s).
|
|
115
115
|
- Both sides' conflicting content, verbatim.
|
|
116
116
|
- That the recoverable ref from Step 1 still points at the pre-sync state.
|
|
@@ -172,23 +172,35 @@ report the discrepancy rather than declaring the sync done.
|
|
|
172
172
|
|
|
173
173
|
## Step 6 — Report
|
|
174
174
|
|
|
175
|
-
<!-- fragment:
|
|
176
|
-
**
|
|
175
|
+
<!-- fragment:action-required:start -->
|
|
176
|
+
**Action required — what only the operator can do.** When this run leaves an action that only the operator can take, report it in one block at the very top of the final report, before every other section and before any optional next step. The block exists because these are the operator's decisions to make, not because the agent is stuck: write it as a hand-off of authority, never as a plea for help. Frame it with a horizontal rule above and below, so it stands apart in a terminal as well as on a rendered page:
|
|
177
177
|
|
|
178
178
|
```markdown
|
|
179
|
-
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 🚧 Action required
|
|
182
|
+
|
|
183
|
+
**Now**
|
|
184
|
+
|
|
185
|
+
- <exactly what to do: the command, the link, or the question> — <why only the operator can do it>
|
|
180
186
|
|
|
181
|
-
|
|
187
|
+
**When you're at your desk**
|
|
188
|
+
|
|
189
|
+
- <exactly what to do> — <why only the operator can do it>
|
|
190
|
+
|
|
191
|
+
---
|
|
182
192
|
```
|
|
183
193
|
|
|
184
|
-
- **What belongs in it:** an action
|
|
185
|
-
- **
|
|
194
|
+
- **What belongs in it:** an action only the operator can take — approving or merging a pull request, accepting a decision record, answering a question the work is waiting on, confirming a `guarded` push, running an interactive command such as `spell unblock-push`, or a step on an external platform the agent cannot reach. An optional suggestion, a next spell to run, or anything the agent could do itself is not a required action and stays out of the block.
|
|
195
|
+
- **Two tiers, one block.** **Now** holds what the work is not correct or complete without. **When you're at your desk** holds what only the operator can do but that can wait: a permission rule, a leftover remote branch, a credential to set up. Leave out a tier that has nothing in it; never split the tiers into two blocks.
|
|
196
|
+
- **One line per action.** Say exactly what to do, then, after the dash, why only the operator can do it. Write the command, link or question out in full; never point elsewhere with "see above".
|
|
186
197
|
- **Never only among optional steps.** An action required for correctness is never listed only under next steps, suggestions, `Carry Forward` or `What's Next?`. It may be repeated there, but it always appears in this block.
|
|
187
|
-
- **
|
|
198
|
+
- **Done items stay, struck through.** Within one session, once an item has been listed, keep it in every later report of the block; when the operator has done it, strike it through (`~~<the line>~~`) rather than dropping it, so progress shows and nothing disappears silently. The session's close carries only the open items forward.
|
|
199
|
+
- **Omit it when empty.** When nothing is left for the operator and nothing was struck through this session, leave the block out entirely: no heading, no rules and no "None" line.
|
|
188
200
|
- **Every final report.** The block belongs in whatever report ends the run, including a report written when the spell stops early.
|
|
189
|
-
- **Report
|
|
201
|
+
- **Report the Now tier to the presence channel.** When the **Now** tier has open items, also run `spell presence report --status waiting --required-action "<line 1>" --required-action "<line 2>"`, one flag per open line of that tier; the other tier is not blocking and is not reported. With no presence channel configured on this machine the command prints nothing and exits 0, so the block itself and the rest of the run are unchanged.
|
|
190
202
|
- Enforcement: explicitly advisory prose (ARC-023) — no check reads a spell's actual output for this block; it holds by these instructions alone.
|
|
191
|
-
<!-- fragment:
|
|
203
|
+
<!-- fragment:action-required:end -->
|
|
192
204
|
|
|
193
205
|
```
|
|
194
206
|
✓ PR synced: <URL>
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
- **Branch:** main
|
|
34
34
|
- **Blockers:** None.
|
|
35
35
|
- **Pending Verification:** None.
|
|
36
|
-
- **
|
|
36
|
+
- **Action required:** None.
|
|
37
37
|
- **Notes:** —
|
|
38
38
|
|
|
39
39
|
> ✓ Consumed: YYYY-MM-DD — scaffold placeholder, not a real session; ships pre-consumed so the first
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- @codemagician/arcane-ui v2.
|
|
1
|
+
<!-- @codemagician/arcane-ui v2.16.0 -- SEE LICENSE IN LICENSE. Generated by scripts/build-report-template.tsx. Do not edit by hand. -->
|
|
2
2
|
<!doctype html>
|
|
3
3
|
<html lang="en">
|
|
4
4
|
<head>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<title>{{masthead.title}}</title>
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com">
|
|
9
9
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@500;600;700&family=Rajdhani:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap">
|
|
10
|
-
<style>:root{--cat-platform:#7fdfff;--cat-docs:#aac0d6;--cat-process:#c3d97a;--cat-fix:#ff7a6b;--cat-decision:#ffb547;--cat-governance:#8ab4ff;--cat-feature:#5cf2a4;--cat-spell:#c9a2ff;--ink-60:#9fb8d6;--f-display:'Chakra Petch', 'Saira Condensed', system-ui, sans-serif;--bg:#000000;--r-corner:var(--r-chamfer);--r-chamfer:2px;--ink-30:#4f6a8a;--ink-10:#1d2a3d;--ink-70:#aac0d6;--f-mono:'JetBrains Mono', ui-monospace, monospace;--bg-1:#060708;--ink-15:#2a3e58;--ink-50:#7c95b5;--ink-90:#e4eaf0;--signal-info:#7fdfff;--signal-alert:#ff3a3a;--signal-warn:#ffb547;--signal-ok:#5cf2a4;--f-ui:'Rajdhani', 'Chakra Petch', system-ui, sans-serif;--ink-80:#c8d5e6;--accent:#ffffff;--ink-100:#ffffff;--stroke-hair:.5px}@media (prefers-color-scheme: light){:root{--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-60:#3d5578;--bg:#f0f4f8;--ink-30:#8aaac8;--ink-10:#cddae8;--ink-70:#2e4260;--bg-1:#e4eaef;--ink-15:#bdd0e2;--ink-50:#435b78;--ink-90:#141e2e;--signal-info:#006181;--signal-alert:#b70000;--signal-warn:#824d00;--signal-ok:#086736;--ink-80:#1f2f46;--accent:#595959;--ink-100:#070c14}}@media print{:root{--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-60:#3d5578;--bg:#f0f4f8;--ink-30:#8aaac8;--ink-10:#cddae8;--ink-70:#2e4260;--bg-1:#e4eaef;--ink-15:#bdd0e2;--ink-50:#435b78;--ink-90:#141e2e;--signal-info:#006181;--signal-alert:#b70000;--signal-warn:#824d00;--signal-ok:#086736;--ink-80:#1f2f46;--accent:#595959;--ink-100:#070c14}}:root[data-theme="dark"]{--cat-platform:#7fdfff;--cat-docs:#aac0d6;--cat-process:#c3d97a;--cat-fix:#ff7a6b;--cat-decision:#ffb547;--cat-governance:#8ab4ff;--cat-feature:#5cf2a4;--cat-spell:#c9a2ff;--ink-60:#9fb8d6;--bg:#000000;--ink-30:#4f6a8a;--ink-10:#1d2a3d;--ink-70:#aac0d6;--bg-1:#060708;--ink-15:#2a3e58;--ink-50:#7c95b5;--ink-90:#e4eaf0;--signal-info:#7fdfff;--signal-alert:#ff3a3a;--signal-warn:#ffb547;--signal-ok:#5cf2a4;--ink-80:#c8d5e6;--accent:#ffffff;--ink-100:#ffffff}:root[data-theme="light"]{--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-60:#3d5578;--bg:#f0f4f8;--ink-30:#8aaac8;--ink-10:#cddae8;--ink-70:#2e4260;--bg-1:#e4eaef;--ink-15:#bdd0e2;--ink-50:#435b78;--ink-90:#141e2e;--signal-info:#006181;--signal-alert:#b70000;--signal-warn:#824d00;--signal-ok:#086736;--ink-80:#1f2f46;--accent:#595959;--ink-100:#070c14}:root:has(#arcane-report-theme-dark:checked){--cat-platform:#7fdfff;--cat-docs:#aac0d6;--cat-process:#c3d97a;--cat-fix:#ff7a6b;--cat-decision:#ffb547;--cat-governance:#8ab4ff;--cat-feature:#5cf2a4;--cat-spell:#c9a2ff;--ink-60:#9fb8d6;--bg:#000000;--ink-30:#4f6a8a;--ink-10:#1d2a3d;--ink-70:#aac0d6;--bg-1:#060708;--ink-15:#2a3e58;--ink-50:#7c95b5;--ink-90:#e4eaf0;--signal-info:#7fdfff;--signal-alert:#ff3a3a;--signal-warn:#ffb547;--signal-ok:#5cf2a4;--ink-80:#c8d5e6;--accent:#ffffff;--ink-100:#ffffff}:root:has(#arcane-report-theme-light:checked){--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-60:#3d5578;--bg:#f0f4f8;--ink-30:#8aaac8;--ink-10:#cddae8;--ink-70:#2e4260;--bg-1:#e4eaef;--ink-15:#bdd0e2;--ink-50:#435b78;--ink-90:#141e2e;--signal-info:#006181;--signal-alert:#b70000;--signal-warn:#824d00;--signal-ok:#086736;--ink-80:#1f2f46;--accent:#595959;--ink-100:#070c14}@layer arcane-ui{.arc-badge[data-variant="pill"] {
|
|
10
|
+
<style>:root{--cat-platform:#7fdfff;--cat-docs:#aac0d6;--cat-process:#c3d97a;--cat-fix:#ff7a6b;--cat-decision:#ffb547;--cat-governance:#8ab4ff;--cat-feature:#5cf2a4;--cat-spell:#c9a2ff;--ink-60:#9fb8d6;--f-display:'Chakra Petch', 'Saira Condensed', system-ui, sans-serif;--bg:#000000;--r-corner:var(--r-chamfer);--r-chamfer:2px;--ink-30:#4f6a8a;--ink-10:#1d2a3d;--ink-70:#aac0d6;--f-mono:'JetBrains Mono', ui-monospace, monospace;--bg-1:#060708;--ink-15:#2a3e58;--ink-50:#7c95b5;--ink-90:#e4eaf0;--signal-info:#7fdfff;--signal-alert:#ff3a3a;--signal-warn:#ffb547;--signal-ok:#5cf2a4;--f-ui:'Rajdhani', 'Chakra Petch', system-ui, sans-serif;--ink-80:#c8d5e6;--accent:#ffffff;--caution-black:#111111;--caution-yellow:#ffd100;--ink-100:#ffffff;--stroke-hair:.5px}@media (prefers-color-scheme: light){:root{--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-60:#3d5578;--bg:#f0f4f8;--ink-30:#8aaac8;--ink-10:#cddae8;--ink-70:#2e4260;--bg-1:#e4eaef;--ink-15:#bdd0e2;--ink-50:#435b78;--ink-90:#141e2e;--signal-info:#006181;--signal-alert:#b70000;--signal-warn:#824d00;--signal-ok:#086736;--ink-80:#1f2f46;--accent:#595959;--ink-100:#070c14}}@media print{:root{--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-60:#3d5578;--bg:#f0f4f8;--ink-30:#8aaac8;--ink-10:#cddae8;--ink-70:#2e4260;--bg-1:#e4eaef;--ink-15:#bdd0e2;--ink-50:#435b78;--ink-90:#141e2e;--signal-info:#006181;--signal-alert:#b70000;--signal-warn:#824d00;--signal-ok:#086736;--ink-80:#1f2f46;--accent:#595959;--ink-100:#070c14}}:root[data-theme="dark"]{--cat-platform:#7fdfff;--cat-docs:#aac0d6;--cat-process:#c3d97a;--cat-fix:#ff7a6b;--cat-decision:#ffb547;--cat-governance:#8ab4ff;--cat-feature:#5cf2a4;--cat-spell:#c9a2ff;--ink-60:#9fb8d6;--bg:#000000;--ink-30:#4f6a8a;--ink-10:#1d2a3d;--ink-70:#aac0d6;--bg-1:#060708;--ink-15:#2a3e58;--ink-50:#7c95b5;--ink-90:#e4eaf0;--signal-info:#7fdfff;--signal-alert:#ff3a3a;--signal-warn:#ffb547;--signal-ok:#5cf2a4;--ink-80:#c8d5e6;--accent:#ffffff;--ink-100:#ffffff}:root[data-theme="light"]{--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-60:#3d5578;--bg:#f0f4f8;--ink-30:#8aaac8;--ink-10:#cddae8;--ink-70:#2e4260;--bg-1:#e4eaef;--ink-15:#bdd0e2;--ink-50:#435b78;--ink-90:#141e2e;--signal-info:#006181;--signal-alert:#b70000;--signal-warn:#824d00;--signal-ok:#086736;--ink-80:#1f2f46;--accent:#595959;--ink-100:#070c14}:root:has(#arcane-report-theme-dark:checked){--cat-platform:#7fdfff;--cat-docs:#aac0d6;--cat-process:#c3d97a;--cat-fix:#ff7a6b;--cat-decision:#ffb547;--cat-governance:#8ab4ff;--cat-feature:#5cf2a4;--cat-spell:#c9a2ff;--ink-60:#9fb8d6;--bg:#000000;--ink-30:#4f6a8a;--ink-10:#1d2a3d;--ink-70:#aac0d6;--bg-1:#060708;--ink-15:#2a3e58;--ink-50:#7c95b5;--ink-90:#e4eaf0;--signal-info:#7fdfff;--signal-alert:#ff3a3a;--signal-warn:#ffb547;--signal-ok:#5cf2a4;--ink-80:#c8d5e6;--accent:#ffffff;--ink-100:#ffffff}:root:has(#arcane-report-theme-light:checked){--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-60:#3d5578;--bg:#f0f4f8;--ink-30:#8aaac8;--ink-10:#cddae8;--ink-70:#2e4260;--bg-1:#e4eaef;--ink-15:#bdd0e2;--ink-50:#435b78;--ink-90:#141e2e;--signal-info:#006181;--signal-alert:#b70000;--signal-warn:#824d00;--signal-ok:#086736;--ink-80:#1f2f46;--accent:#595959;--ink-100:#070c14}@layer arcane-ui{.arc-badge[data-variant="pill"] {
|
|
11
11
|
display: inline-flex;
|
|
12
12
|
align-items: center;
|
|
13
13
|
gap: 6px;
|
|
@@ -318,16 +318,33 @@ font-style: italic;
|
|
|
318
318
|
.arc-ledger-row > .arc-badge {
|
|
319
319
|
justify-self: end;
|
|
320
320
|
}
|
|
321
|
-
.arc-
|
|
321
|
+
.arc-action-required {
|
|
322
322
|
margin-bottom: 26px;
|
|
323
323
|
}
|
|
324
|
-
.arc-
|
|
324
|
+
.arc-action-required__stripe {
|
|
325
|
+
display: block;
|
|
326
|
+
height: 6px;
|
|
327
|
+
background: repeating-linear-gradient(
|
|
328
|
+
-45deg,
|
|
329
|
+
var(--caution-yellow) 0 8px,
|
|
330
|
+
var(--caution-black) 8px 16px
|
|
331
|
+
);
|
|
332
|
+
-webkit-print-color-adjust: exact;
|
|
333
|
+
print-color-adjust: exact;
|
|
334
|
+
}
|
|
335
|
+
.arc-action-required__stripe:first-child {
|
|
336
|
+
margin-bottom: 12px;
|
|
337
|
+
}
|
|
338
|
+
.arc-action-required__stripe:last-child {
|
|
339
|
+
margin-top: 12px;
|
|
340
|
+
}
|
|
341
|
+
.arc-action-required__head {
|
|
325
342
|
display: flex;
|
|
326
343
|
align-items: baseline;
|
|
327
344
|
gap: 10px;
|
|
328
345
|
margin-bottom: 8px;
|
|
329
346
|
}
|
|
330
|
-
.arc-
|
|
347
|
+
.arc-action-required__title {
|
|
331
348
|
font-family: var(--f-display);
|
|
332
349
|
font-weight: 600;
|
|
333
350
|
font-size: 12px;
|
|
@@ -336,12 +353,12 @@ text-transform: uppercase;
|
|
|
336
353
|
color: var(--ink-90);
|
|
337
354
|
margin: 0;
|
|
338
355
|
}
|
|
339
|
-
.arc-
|
|
356
|
+
.arc-action-required__count {
|
|
340
357
|
font-family: var(--f-mono);
|
|
341
358
|
font-size: 11px;
|
|
342
359
|
color: var(--ink-50);
|
|
343
360
|
}
|
|
344
|
-
.arc-
|
|
361
|
+
.arc-action-required__list {
|
|
345
362
|
list-style: none;
|
|
346
363
|
margin: 0;
|
|
347
364
|
padding: 0;
|
|
@@ -349,20 +366,20 @@ display: flex;
|
|
|
349
366
|
flex-direction: column;
|
|
350
367
|
gap: 8px;
|
|
351
368
|
}
|
|
352
|
-
.arc-
|
|
369
|
+
.arc-action-required__item {
|
|
353
370
|
border: 1px solid var(--ink-15);
|
|
354
371
|
border-left: 2px solid var(--signal-warn);
|
|
355
372
|
border-radius: var(--r-corner);
|
|
356
373
|
background: var(--bg-1);
|
|
357
374
|
padding: 12px 16px;
|
|
358
375
|
}
|
|
359
|
-
.arc-
|
|
376
|
+
.arc-action-required__link {
|
|
360
377
|
color: var(--accent);
|
|
361
378
|
}
|
|
362
|
-
.arc-
|
|
379
|
+
.arc-action-required__text {
|
|
363
380
|
color: var(--ink-90);
|
|
364
381
|
}
|
|
365
|
-
.arc-
|
|
382
|
+
.arc-action-required__empty {
|
|
366
383
|
border: 1px solid var(--ink-15);
|
|
367
384
|
border-left: 2px solid var(--signal-ok);
|
|
368
385
|
border-radius: var(--r-corner);
|
|
@@ -372,14 +389,14 @@ display: flex;
|
|
|
372
389
|
align-items: center;
|
|
373
390
|
gap: 10px;
|
|
374
391
|
}
|
|
375
|
-
.arc-
|
|
392
|
+
.arc-action-required__dot {
|
|
376
393
|
display: inline-block;
|
|
377
394
|
width: 6px;
|
|
378
395
|
height: 6px;
|
|
379
396
|
border-radius: 50%;
|
|
380
397
|
background: var(--signal-ok);
|
|
381
398
|
}
|
|
382
|
-
.arc-
|
|
399
|
+
.arc-action-required__empty-label {
|
|
383
400
|
font-family: var(--f-display);
|
|
384
401
|
font-size: 13px;
|
|
385
402
|
letter-spacing: .04em;
|
|
@@ -628,6 +645,6 @@ padding-bottom: 0;
|
|
|
628
645
|
}}#arcane-report-theme-toggle-wrap input:checked+label{color:var(--ink-90);border-color:var(--ink-30)}#arcane-report-theme-toggle-wrap input:focus-visible+label{box-shadow:0 0 0 2px var(--ink-50)}@media print{#arcane-report-theme-toggle-wrap{display:none}} body{margin:0;background:var(--bg);color:var(--ink-80);font-family:var(--f-ui),system-ui,sans-serif} a{text-decoration:none} a:hover{text-decoration:underline} code{font-family:var(--f-mono);font-size:.92em} .unwritten{color:var(--ink-50);font-style:italic}</style>
|
|
629
646
|
</head>
|
|
630
647
|
<body>
|
|
631
|
-
<svg width="0" height="0" class="arc-category-icons__sprite" aria-hidden="true" focusable="false"><symbol id="cat-spell" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75v3.5M8 10.75v3.5M1.75 8h3.5M10.75 8h3.5M3.6 3.6l2.4 2.4M10 10l2.4 2.4M12.4 3.6 10 6M6 10l-2.4 2.4"></path></symbol><symbol id="cat-feature" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.25" y="2.25" width="11.5" height="11.5" rx="1"></rect><path d="M8 5.25v5.5M5.25 8h5.5"></path></symbol><symbol id="cat-governance" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 13.25 3.75v4.2c0 3.05-2.2 5.3-5.25 6.3-3.05-1-5.25-3.25-5.25-6.3v-4.2z"></path></symbol><symbol id="cat-decision" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 14.25 8 8 14.25 1.75 8z"></path></symbol><symbol id="cat-fix" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 13.4 4.9v6.2L8 14.25 2.6 11.1V4.9z"></path><circle cx="8" cy="8" r="2.25"></circle></symbol><symbol id="cat-process" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M13 8a5 5 0 0 1-8.65 3.45M3 8a5 5 0 0 1 8.65-3.45"></path><path d="M11.65 2.15v2.4h-2.4M4.35 13.85v-2.4h2.4"></path></symbol><symbol id="cat-docs" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.75 1.75h5.75l2.75 2.75v9.75h-8.5z"></path><path d="M9.5 1.75v3h3M6 8h4M6 10.75h4"></path></symbol><symbol id="cat-platform" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.25" y="2.25" width="11.5" height="3.75" rx=".75"></rect><rect x="2.25" y="8.25" width="11.5" height="3.75" rx=".75"></rect><path d="M4.75 4.1h.01M4.75 10.1h.01"></path><path d="M8 12v2.25"></path></symbol></svg><main><fieldset id="arcane-report-theme-toggle-wrap" role="radiogroup" class="arc-report-theme-toggle"><legend class="arc-report-theme-toggle__legend">Report color theme</legend><input type="radio" id="arcane-report-theme-auto" class="arc-report-theme-toggle__input" name="arcane-report-theme" checked="" value="auto"/><label for="arcane-report-theme-auto" class="arc-report-theme-toggle__label">Auto</label><input type="radio" id="arcane-report-theme-light" class="arc-report-theme-toggle__input" name="arcane-report-theme" value="light"/><label for="arcane-report-theme-light" class="arc-report-theme-toggle__label">Light</label><input type="radio" id="arcane-report-theme-dark" class="arc-report-theme-toggle__input" name="arcane-report-theme" value="dark"/><label for="arcane-report-theme-dark" class="arc-report-theme-toggle__label">Dark</label></fieldset><div class="arc-report-masthead"><div class="arc-report-masthead__top"><span class="arc-report-masthead__label">{{masthead.eyebrow}}</span><span aria-hidden="true" class="arc-report-masthead__rule"></span><span class="arc-report-masthead__label">{{program.slug}}</span></div><h1 class="arc-report-masthead__title">{{masthead.title}}</h1><p class="arc-report-masthead__dek">{{masthead.dek}}</p><div class="arc-report-masthead__meta"><span><span class="arc-report-masthead__key">status</span> <span class="arc-report-masthead__status" data-tone="ok">{{program.status}}</span></span><span><span class="arc-report-masthead__key">started</span> {{program.started}}</span><span><span class="arc-report-masthead__key">completed</span> {{program.completed}}</span><span><span class="arc-report-masthead__key">baseline</span> {{program.baseline}}</span></div></div><div class="arc-show-report__stats"><dl class="arc-stat-rail">{{#stats}}<div class="arc-stat-rail__cell"><dt class="arc-stat-rail__label">{{label}}</dt><dd class="arc-stat-rail__value"><div class="arc-stat-tile arc-stat-tile--sm arc-stat-rail__tile" data-size="sm"><div class="arc-num arc-stat-tile__value">{{value}}</div></div></dd></div>{{/stats}}</dl></div><div class="arc-show-report__split"><div class="arc-show-report__needs"><div class="arc-
|
|
648
|
+
<svg width="0" height="0" class="arc-category-icons__sprite" aria-hidden="true" focusable="false"><symbol id="cat-spell" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75v3.5M8 10.75v3.5M1.75 8h3.5M10.75 8h3.5M3.6 3.6l2.4 2.4M10 10l2.4 2.4M12.4 3.6 10 6M6 10l-2.4 2.4"></path></symbol><symbol id="cat-feature" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.25" y="2.25" width="11.5" height="11.5" rx="1"></rect><path d="M8 5.25v5.5M5.25 8h5.5"></path></symbol><symbol id="cat-governance" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 13.25 3.75v4.2c0 3.05-2.2 5.3-5.25 6.3-3.05-1-5.25-3.25-5.25-6.3v-4.2z"></path></symbol><symbol id="cat-decision" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 14.25 8 8 14.25 1.75 8z"></path></symbol><symbol id="cat-fix" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 13.4 4.9v6.2L8 14.25 2.6 11.1V4.9z"></path><circle cx="8" cy="8" r="2.25"></circle></symbol><symbol id="cat-process" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M13 8a5 5 0 0 1-8.65 3.45M3 8a5 5 0 0 1 8.65-3.45"></path><path d="M11.65 2.15v2.4h-2.4M4.35 13.85v-2.4h2.4"></path></symbol><symbol id="cat-docs" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.75 1.75h5.75l2.75 2.75v9.75h-8.5z"></path><path d="M9.5 1.75v3h3M6 8h4M6 10.75h4"></path></symbol><symbol id="cat-platform" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.25" y="2.25" width="11.5" height="3.75" rx=".75"></rect><rect x="2.25" y="8.25" width="11.5" height="3.75" rx=".75"></rect><path d="M4.75 4.1h.01M4.75 10.1h.01"></path><path d="M8 12v2.25"></path></symbol></svg><main><fieldset id="arcane-report-theme-toggle-wrap" role="radiogroup" class="arc-report-theme-toggle"><legend class="arc-report-theme-toggle__legend">Report color theme</legend><input type="radio" id="arcane-report-theme-auto" class="arc-report-theme-toggle__input" name="arcane-report-theme" checked="" value="auto"/><label for="arcane-report-theme-auto" class="arc-report-theme-toggle__label">Auto</label><input type="radio" id="arcane-report-theme-light" class="arc-report-theme-toggle__input" name="arcane-report-theme" value="light"/><label for="arcane-report-theme-light" class="arc-report-theme-toggle__label">Light</label><input type="radio" id="arcane-report-theme-dark" class="arc-report-theme-toggle__input" name="arcane-report-theme" value="dark"/><label for="arcane-report-theme-dark" class="arc-report-theme-toggle__label">Dark</label></fieldset><div class="arc-report-masthead"><div class="arc-report-masthead__top"><span class="arc-report-masthead__label">{{masthead.eyebrow}}</span><span aria-hidden="true" class="arc-report-masthead__rule"></span><span class="arc-report-masthead__label">{{program.slug}}</span></div><h1 class="arc-report-masthead__title">{{masthead.title}}</h1><p class="arc-report-masthead__dek">{{masthead.dek}}</p><div class="arc-report-masthead__meta"><span><span class="arc-report-masthead__key">status</span> <span class="arc-report-masthead__status" data-tone="ok">{{program.status}}</span></span><span><span class="arc-report-masthead__key">started</span> {{program.started}}</span><span><span class="arc-report-masthead__key">completed</span> {{program.completed}}</span><span><span class="arc-report-masthead__key">baseline</span> {{program.baseline}}</span></div></div><div class="arc-show-report__stats"><dl class="arc-stat-rail">{{#stats}}<div class="arc-stat-rail__cell"><dt class="arc-stat-rail__label">{{label}}</dt><dd class="arc-stat-rail__value"><div class="arc-stat-tile arc-stat-tile--sm arc-stat-rail__tile" data-size="sm"><div class="arc-num arc-stat-tile__value">{{value}}</div></div></dd></div>{{/stats}}</dl></div><div class="arc-show-report__split"><div class="arc-show-report__needs"><div class="arc-action-required">{{#needsYouCount}}<span aria-hidden="true" class="arc-action-required__stripe"></span><div class="arc-action-required__head"><h2 class="arc-action-required__title">Action required</h2><span class="arc-action-required__count">{{needsYouCount}} open</span></div><ul class="arc-action-required__list">{{#needsYou}}<li class="arc-action-required__item">{{#href}}<a href="{{href}}" class="arc-action-required__link">{{title}}</a>{{/href}}{{^href}}<span class="arc-action-required__text">{{title}}</span>{{/href}}</li>{{/needsYou}}</ul><span aria-hidden="true" class="arc-action-required__stripe"></span>{{/needsYouCount}}{{^needsYouCount}}<div class="arc-action-required__empty"><span aria-hidden="true" class="arc-action-required__dot"></span><span class="arc-action-required__empty-label">No action required</span></div>{{/needsYouCount}}</div></div>{{#hasOutcome}}<div class="arc-show-report__outcome">{{outcome}}</div>{{/hasOutcome}}</div><div class="arc-category-legend">{{#legend}}<span class="arc-category-legend__item"><span class="arc-category-legend__icon" data-tone="{{key}}"><svg width="12" height="12" aria-hidden="true" focusable="false"><use href="#cat-{{key}}"></use></svg></span>{{label}}</span>{{/legend}}</div>{{#sections}}<div class="arc-report-section"><div class="arc-report-section__header"><h2 class="arc-report-section__title">{{title}}</h2><span class="arc-report-section__spacer"></span><span class="arc-report-section__count">{{rowCount}}</span></div><ol class="arc-ledger-list">{{#rows}}<li class="arc-ledger-list__item"><div class="arc-ledger-row">{{#hasHref}}<a href="{{href}}" class="arc-ledger-row__id">{{id}}</a>{{/hasHref}}{{^hasHref}}<span class="arc-ledger-row__id">{{id}}</span>{{/hasHref}}<div><div class="arc-ledger-row__title">{{title}}</div><div class="arc-ledger-row__description">{{#isUnwritten}}<span class="unwritten">unwritten</span>{{/isUnwritten}}{{^isUnwritten}}{{{descriptionHtml}}}{{/isUnwritten}}</div></div><span class="arc-badge" data-variant="pill" data-tone="{{category}}"><svg width="12" height="12" aria-hidden="true" focusable="false"><use href="#cat-{{category}}"></use></svg>{{categoryLabel}}</span></div></li>{{/rows}}</ol></div>{{/sections}}{{#hasCorrections}}{{#corrections}}<div class="arc-corrections"><div class="arc-corrections__head"><h2 class="arc-corrections__title">Calibration</h2><span class="arc-corrections__summary">{{checked}} checked · {{corrected}} corrected · {{unverifiable}} unverifiable</span></div><div class="arc-corrections__scope">{{scopeNote}}</div><div class="arc-corrections__highlights">{{#highlights}}<div class="arc-corrections__highlight"><span class="arc-corrections__tag">{{categoryLabel}}</span><div><div class="arc-corrections__highlight-title">{{title}}</div><div class="arc-corrections__description">{{#isUnwritten}}<span class="unwritten">unwritten</span>{{/isUnwritten}}{{^isUnwritten}}{{{descriptionHtml}}}{{/isUnwritten}}</div></div></div>{{/highlights}}</div></div>{{/corrections}}{{/hasCorrections}}{{#hasParked}}<div class="arc-parked"><div class="arc-parked__header"><h2 class="arc-parked__heading">Parked</h2><span class="arc-parked__count">{{parkedCount}} item{{^parkedIsSingular}}s{{/parkedIsSingular}} · deliberately not built</span></div><div class="arc-parked__list">{{#parked}}<div class="arc-parked__item"><span aria-hidden="true" class="arc-parked__dash"></span><span><span class="arc-parked__title">{{title}}</span> — {{reason}}</span></div>{{/parked}}</div></div>{{/hasParked}}</main><footer class="arc-show-report__footer">{{#hasCast}}<div class="arc-cast"><h2 class="arc-cast__title">Cast</h2><div class="arc-cast__list">{{#cast}}<div class="arc-cast__row"><span>{{name}}</span><span class="arc-cast__commits">{{commits}} commit{{^isSingular}}s{{/isSingular}}</span></div>{{/cast}}</div></div>{{/hasCast}}<div class="arc-report-provenance"><h2 class="arc-report-provenance__heading">Provenance</h2><div class="arc-report-provenance__body">compiled from {{sourcesJoined}}<br/>as of {{compiledAtDate}} · template {{provenance.templateVersion}} · schema {{schemaVersion}} · no runtime scripts</div></div></footer>
|
|
632
649
|
</body>
|
|
633
650
|
</html>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"task",
|
|
16
16
|
"message",
|
|
17
17
|
"status",
|
|
18
|
-
"
|
|
18
|
+
"required_actions",
|
|
19
19
|
"started_at",
|
|
20
20
|
"reported_at",
|
|
21
21
|
"ended_at",
|
|
@@ -73,11 +73,11 @@
|
|
|
73
73
|
],
|
|
74
74
|
"description": "working: a spell is running; waiting: the session asked the operator for something; blocked: cannot proceed for an external reason; idle: open, no spell running; done: ended (set by end only)."
|
|
75
75
|
},
|
|
76
|
-
"
|
|
76
|
+
"required_actions": {
|
|
77
77
|
"type": "array",
|
|
78
78
|
"maxItems": 20,
|
|
79
79
|
"items": {
|
|
80
|
-
"$ref": "#/$defs/
|
|
80
|
+
"$ref": "#/$defs/requiredAction"
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
"started_at": {
|
|
@@ -216,7 +216,7 @@
|
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
},
|
|
219
|
-
"
|
|
219
|
+
"requiredAction": {
|
|
220
220
|
"type": "object",
|
|
221
221
|
"additionalProperties": false,
|
|
222
222
|
"required": [
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
"action": {
|
|
228
228
|
"type": "string",
|
|
229
229
|
"maxLength": 256,
|
|
230
|
-
"description": "Exactly what the operator must do: one line of a '##
|
|
230
|
+
"description": "Exactly what the operator must do: one line of a '## 🚧 Action required' block.",
|
|
231
231
|
"minLength": 1
|
|
232
232
|
},
|
|
233
233
|
"reason": {
|
|
@@ -390,14 +390,33 @@
|
|
|
390
390
|
"maxLength": 256,
|
|
391
391
|
"description": "Absent keeps the stored value; null clears it."
|
|
392
392
|
},
|
|
393
|
-
"
|
|
393
|
+
"required_actions": {
|
|
394
394
|
"type": "array",
|
|
395
395
|
"maxItems": 20,
|
|
396
396
|
"items": {
|
|
397
|
-
"$ref": "#/$defs/
|
|
397
|
+
"$ref": "#/$defs/requiredAction"
|
|
398
398
|
},
|
|
399
399
|
"description": "Replaces the stored list on every report; absent means []. More than 20 entries is refused with 400, never cut."
|
|
400
|
+
},
|
|
401
|
+
"needs_you": {
|
|
402
|
+
"type": "array",
|
|
403
|
+
"maxItems": 20,
|
|
404
|
+
"items": {
|
|
405
|
+
"$ref": "#/$defs/requiredAction"
|
|
406
|
+
},
|
|
407
|
+
"deprecated": true,
|
|
408
|
+
"description": "The name of required_actions before 1.20 (ARC-060 decision 14), accepted as required_actions for the 1.20 series. Never sent together with required_actions: a body with both is refused with 400 naming needs_you."
|
|
400
409
|
}
|
|
410
|
+
},
|
|
411
|
+
"not": {
|
|
412
|
+
"properties": {
|
|
413
|
+
"required_actions": true,
|
|
414
|
+
"needs_you": true
|
|
415
|
+
},
|
|
416
|
+
"required": [
|
|
417
|
+
"required_actions",
|
|
418
|
+
"needs_you"
|
|
419
|
+
]
|
|
401
420
|
}
|
|
402
421
|
},
|
|
403
422
|
"end": {
|
|
@@ -528,7 +547,7 @@
|
|
|
528
547
|
}
|
|
529
548
|
},
|
|
530
549
|
"event": {
|
|
531
|
-
"description": "One change on GET /v0/events: the event name and the full record after the change. Exactly one event per accepted report, by the precedence started > resumed >
|
|
550
|
+
"description": "One change on GET /v0/events: the event name and the full record after the change. Exactly one event per accepted report, by the precedence started > resumed > action_required > updated (architecture D5). The record is the truth and the event name is why it was sent: a consumer that alerts on 'action required' reads the record's required_actions, because a first or a resumed report can carry lines under another event name.",
|
|
532
551
|
"type": "object",
|
|
533
552
|
"additionalProperties": false,
|
|
534
553
|
"required": [
|
|
@@ -540,7 +559,7 @@
|
|
|
540
559
|
"enum": [
|
|
541
560
|
"session.started",
|
|
542
561
|
"session.updated",
|
|
543
|
-
"session.
|
|
562
|
+
"session.action_required",
|
|
544
563
|
"session.stale",
|
|
545
564
|
"session.resumed",
|
|
546
565
|
"session.ended",
|