@azure-id/orc 1.9.1 → 1.9.2

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 (107) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README-id.md +38 -39
  3. package/README.md +36 -35
  4. package/bin/build-agents.js +109 -109
  5. package/bin/cli.js +35 -33
  6. package/bin/onboarding-content.js +4 -4
  7. package/bin/pricing.json +207 -200
  8. package/bin/verify-contracts.js +2 -2
  9. package/bin/verify-package.js +7 -7
  10. package/bin/webui/css/04-motion.css +162 -152
  11. package/bin/webui/css/panels/knowledge.css +563 -116
  12. package/bin/webui/fixtures/extra.js +2036 -2036
  13. package/bin/webui/fixtures/hookui.js +5 -5
  14. package/bin/webui/fixtures/settings.js +305 -305
  15. package/bin/webui/i18n/en/knowledge.json +117 -2
  16. package/bin/webui/i18n/id/knowledge.json +117 -2
  17. package/bin/webui/js/panels/knowledge.js +552 -7
  18. package/bin/webui/js/panels/overview.js +13 -4
  19. package/mock-run/context-combiner.md +100 -100
  20. package/mock-run/orc-budget.md +534 -534
  21. package/mock-run/orc-challenge-council.md +262 -262
  22. package/mock-run/orc-ultra.md +103 -103
  23. package/package.json +1 -1
  24. package/templates/agents/MODEL-MAPPING.md +43 -43
  25. package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -56
  26. package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -60
  27. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -58
  28. package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -75
  29. package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -110
  30. package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -114
  31. package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -112
  32. package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -132
  33. package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -109
  34. package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -109
  35. package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -90
  36. package/templates/agents/orc-claude-writer-opus-5-med.md +55 -55
  37. package/templates/agents/orc-context-combiner-opus-5-high.md +88 -88
  38. package/templates/agents/orc-doc-checker-opus-5-low.md +108 -108
  39. package/templates/agents/orc-doc-writer-opus-5-med.md +134 -134
  40. package/templates/agents/orc-executor-opus-5-high.md +2 -2
  41. package/templates/agents/orc-executor-opus-5-low.md +2 -2
  42. package/templates/agents/orc-executor-opus-5-med.md +2 -2
  43. package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -1
  44. package/templates/agents/orc-judge-opus-5-xhigh.md +85 -85
  45. package/templates/agents/orc-learn-writer-opus-5-low.md +73 -73
  46. package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -65
  47. package/templates/agents/orc-planner-mini-opus-5-med.md +4 -4
  48. package/templates/agents/orc-planner-mini-sonnet-5-high.md +1 -1
  49. package/templates/agents/orc-planner-opus-5-med.md +160 -160
  50. package/templates/agents/orc-recon-opus-5-low.md +3 -3
  51. package/templates/agents/orc-retro-opus-5-med.md +3 -3
  52. package/templates/agents/orc-reviewer-opus-5-med.md +60 -60
  53. package/templates/agents/orc-scout-opus-5-low.md +40 -40
  54. package/templates/agents/orc-system-analyst-opus-5-high.md +120 -120
  55. package/templates/agents/orc-test-author-opus-5-med.md +71 -71
  56. package/templates/agents/orc-test-designer-opus-5-high.md +158 -158
  57. package/templates/agents/orc-test-interpreter-opus-5-low.md +130 -130
  58. package/templates/agents/orc-verifier-opus-5-med.md +69 -69
  59. package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -81
  60. package/templates/commands/orc-ultra.md +17 -17
  61. package/templates/commands/orc-verify.md +11 -11
  62. package/templates/hooks/README.md +2 -2
  63. package/templates/hooks/orc-effort-guard.js +178 -178
  64. package/templates/hooks/orc-statusline.js +6 -6
  65. package/templates/skills/_shared/code-graph.md +1 -1
  66. package/templates/skills/_shared/config-precedence.md +198 -198
  67. package/templates/skills/_shared/extra-dispatch.md +1346 -1346
  68. package/templates/skills/_shared/opus5-only.md +8 -8
  69. package/templates/skills/_shared/phases/analyst-gates.md +136 -136
  70. package/templates/skills/_shared/phases/review.md +1 -1
  71. package/templates/skills/_shared/phases/trace.md +1 -1
  72. package/templates/skills/_shared/return-validation.md +1 -1
  73. package/templates/skills/context-combiner/SKILL.md +1 -1
  74. package/templates/skills/context-combiner/schemas/combined-report.md +78 -78
  75. package/templates/skills/orc/README.md +2 -2
  76. package/templates/skills/orc/SKILL.md +7 -7
  77. package/templates/skills/orc/config.md +9 -9
  78. package/templates/skills/orc/examples/full-run-mock.md +73 -73
  79. package/templates/skills/orc/references/effort-and-mode.md +222 -222
  80. package/templates/skills/orc/references/preflight-report.md +2 -2
  81. package/templates/skills/orc/references/ultra-mode.md +3 -3
  82. package/templates/skills/orc/subskills/orc-planner/SKILL.md +2 -2
  83. package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -121
  84. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -76
  85. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -45
  86. package/templates/skills/orc-analyze/SKILL.md +2 -2
  87. package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -42
  88. package/templates/skills/orc-analyze/schemas/report-audit.md +83 -83
  89. package/templates/skills/orc-analyze/schemas/report-prose.md +63 -63
  90. package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -78
  91. package/templates/skills/orc-challenge/README.md +142 -142
  92. package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -273
  93. package/templates/skills/orc-challenge/references/council.md +315 -315
  94. package/templates/skills/orc-challenge/references/intake.md +171 -171
  95. package/templates/skills/orc-claude/SKILL.md +14 -14
  96. package/templates/skills/orc-diy/README.md +143 -143
  97. package/templates/skills/orc-diy/references/flow-schema.md +1 -1
  98. package/templates/skills/orc-doc/README.md +229 -229
  99. package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -325
  100. package/templates/skills/orc-doc/references/chunking.md +527 -527
  101. package/templates/skills/orc-fast/SKILL.md +1 -1
  102. package/templates/skills/orc-learn/SKILL.md +14 -14
  103. package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -61
  104. package/templates/skills/orc-mini/SKILL.md +3 -3
  105. package/templates/skills/orc-verify/SKILL.md +15 -15
  106. package/templates/skills/orc-verify/examples/verify-mock.md +33 -33
  107. package/templates/skills/orc-wiki/references/extra.md +1 -1
@@ -35,13 +35,13 @@ canonical 6-band table, and dispatches the matching **executor agent**.
35
35
  | [30,40) | claude-sonnet-4-6 | medium | orc-executor-sonnet-4-6-med |
36
36
  | [40,55) | claude-sonnet-4-6 | high | orc-executor-sonnet-4-6-high |
37
37
  | [55,65) | claude-sonnet-5 | high | orc-executor-sonnet-5-high |
38
- | [65,90) | claude-opus-5 | low | orc-executor-opus-5-low |
39
- | [90,100] | claude-opus-5 | medium | orc-executor-opus-5-med |
38
+ | [65,90) | claude-opus-5-5 | low | orc-executor-opus-5-low |
39
+ | [90,100] | claude-opus-5-5 | medium | orc-executor-opus-5-med |
40
40
 
41
41
  (Haiku has no effort ladder — that agent carries no `effort:` field.) The risk
42
42
  floor (≥70) lands `orc-executor-opus-5-low` at minimum in THIS table. Above ~65
43
43
  the useful dial stopped being the model GENERATION and became the EFFORT, which
44
- is why the old four Opus rows are two. **Every band from 65 needs an Opus 5 MAIN
44
+ is why the old four Opus rows are two. **Every band from 65 needs an Opus 5.5 MAIN
45
45
  session** or it silently falls back to the session model (the tier-honesty rule
46
46
  reports the downgrade) — two bands where it used to be one, and that is the cost
47
47
  of this table.
@@ -59,15 +59,15 @@ One model, EFFORT as the cost dial. Off by default; nothing changes until set.
59
59
 
60
60
  | Score | Model | Effort | Executor agent |
61
61
  |-------|-------|--------|----------------|
62
- | [0,90) | claude-opus-5 | low | orc-executor-opus-5-low |
63
- | [90,100] | claude-opus-5 | medium | orc-executor-opus-5-med |
62
+ | [0,90) | claude-opus-5-5 | low | orc-executor-opus-5-low |
63
+ | [90,100] | claude-opus-5-5 | medium | orc-executor-opus-5-med |
64
64
 
65
65
  Two bands, sharing the 90 edge with the default table's top two rows. That
66
- symmetry is the point: once the default table's high end is already Opus 5 with
66
+ symmetry is the point: once the default table's high end is already Opus 5.5 with
67
67
  effort as the dial, this mode differs from it only BELOW 65, so a third band
68
68
  would be a distinction the default table stopped making.
69
69
 
70
- **Tier cost:** today TWO bands in six need an Opus 5 main session; with this on,
70
+ **Tier cost:** today TWO bands in six need an Opus 5.5 main session; with this on,
71
71
  EVERY dispatch does, so a lower session downgrades every task (warn-only — a
72
72
  hook can gate effort, never model). **Scope:** it is NOT executor-only — it also
73
73
  forces every fixed role below, across every lane. orc-diy's table
@@ -93,8 +93,8 @@ un-shown number.
93
93
  | Ultra advisor (/orc-ultra only) | orc-advisor-opus-5-xhigh |
94
94
  | Ultra judge (/orc-ultra only) | orc-judge-opus-5-xhigh |
95
95
 
96
- Under `opus5_only`, every role above that is not already `claude-opus-5`
97
- dispatches its Opus 5 variant instead — plus the roles owned by other lanes
96
+ Under `opus5_only`, every role above that is not already `claude-opus-5-5`
97
+ dispatches its Opus 5.5 variant instead — plus the roles owned by other lanes
98
98
  (scout, wiki scanner, CLAUDE.md writer, retro miner, fast executor).
99
99
 
100
100
  ## Where each subsystem's rule is written down
@@ -1,73 +1,73 @@
1
- # Example — Annotated Full Run (v2.2, dry run)
2
-
3
- O: = orchestrator (Opus 4.8 high, always) · U: = user. Nothing real. The
4
- orchestrator NEVER implements — it always spawns scored subagents.
5
-
6
- U: Orchestrate: merchant notification system — in-app, email digest, prefs page.
7
-
8
- ## Phase 0 — Intake
9
- O: Creates run folder run/merchant-notifications/ FIRST.
10
- [reads repo: TS/yarn/jest — asks nothing about stack] Rough size: medium+ → 4-question tier (one batched round):
11
- 1) What should exist when done? 2) Out of scope? 3) How do we know it's done? 4) Patterns/files to avoid?
12
- U: [answers] no push, no admin; bell count + both digest schedules + prefs persist; follow services/ pattern, don't touch auth_service.
13
- O: [drafts run/merchant-notifications/intent-spec.md] Sign-off: gate or soft? (default gate)
14
- U: gate → approved
15
-
16
- ## Phase 1 — Planning
17
- O: Planner? U: OpenSpec
18
- O: [6 tasks with declared_files incl. tests + per-file grounding attestations + sliced acceptance[], depends_on, spec_ref] ⚠ T1/T2 share models/notification.ts → scheduling separates them.
19
- Grounding spot-check (Phase 1 exit): globs all `exists` paths — 13/14 present, models/notifcation.ts MISSING (typo) → plan bounced to planner with the miss list → corrected to models/notification.ts ✓.
20
-
21
- ## Phase 2 — Effort, dispatch style, scoring
22
- O: Refined: medium, partially dependent. Recommend PARALLEL waves. Confirm? U: yes. Batch pause? U: every 2 waves.
23
- O: Facet scoring (planner facets → formula → band; facet gate: breadth + fan recomputed, risk cites checked):
24
- T1 3·new-surface·stateful·new-tests·fan0/3·low = 6+18+16+8+9 = 57 → sonnet-5-high (keystone — every later task imports its enum)
25
- T2 3·imitate·branching·new-tests·fan1/0·low = 6+8+8+8+5 = 35 → sonnet-4-6-med
26
- T3 3·imitate·branching·update-existing·fan1/0·low = 6+8+8+4+5 = 31 → sonnet-4-6-med
27
- T4 2·imitate·branching·update-existing·fan1/0·low = 6+8+8+4+5 = 31 → sonnet-4-6-med
28
- T5 1·mechanical·none·update-existing·fan0/0·low = 2+0+0+4 = 6 → haiku-4-5
29
- T6 1·mechanical·none·none·fan0/0·low = 2+0+0+0 = 2 → haiku-4-5
30
- Plan: 6 tasks, 3 waves W1{T1} W2{T2,T3,T4} W3{T5,T6}, all spawned. Anticipated escalations? U: none, go.
31
-
32
- ## Phase 3 — Execution (ALL spawned; orchestrator coordinates only)
33
- O: [checkpoint + state-of-play written into run/merchant-notifications/ BEFORE dispatch]
34
- ▶ W1: spawn Agent-A(T1, sonnet-5-high) — milestones 40%→100% — return validated ✓ (evidence: `yarn jest models/` exit 0, tail quoted; unmet[] empty) — log: DECISION type enum.
35
- ▶ W2: spawn 3 agents (sonnet-4-6-med each).
36
- Agent-C needs_context (1/2): "needs T1's enum interface" → O adjudicates in-scope → re-slices → resumes. (User never bothered.)
37
- Agent-C user escalation: "digest send time?" → U: 07:00 fixed → ANSWER broadcast to log.
38
- Returns validated ✓ · collision audit clean.
39
- ⏸ BATCH PAUSE (stop sequence):
40
- checkpoint ✓ → state-of-play ✓ → dispatch report shown (models/scores) → "Run /usage to see your remaining limits."
41
- → resume block:
42
- | Continue ORC run `merchant-notifications`.
43
- | Read run/merchant-notifications/state-of-play.md, then run/merchant-notifications/checkpoint.json.
44
- | Resume from checkpoint phase/wave. Intent-spec approved — do not re-plan. Do not redo done tasks.
45
- "Reply continue here, or paste in a fresh session (recommended if long)."
46
-
47
- U: [next day, FRESH session, pastes block]
48
- O: [state-of-play → checkpoint → re-anchored] "Resuming: merchant notifications (in-app+digest+prefs). Still correct?" U: yes.
49
- ▶ W3: spawn T5+T6 (haiku-4-5) → done. All 6 complete.
50
-
51
- ## Phase 5 — Review (spawned worker, Opus 5 medium)
52
- O: Code pattern? U: none. Findings (P0–P3 ladder, each P0–P2 anchored file:line + verbatim quote):
53
- P1 T2 no pagination — services/notification_list.ts:88 — O spot-checks: Reads line 88, quote matches ✓ → asks user, U: fix it
54
- · P3 email_digest naming ×2 · 12 tests added. (An unanchored finding would be auto-P3 — never fixed unasked.)
55
-
56
- ## Phase 6 — Verify (spawned worker, Opus 5 medium; criteria = definition-of-done)
57
- criteria[] with per-line evidence: bell ✓ (test name) · both schedules ✗ (weekly cron missing = P0, unmet criterion, evidence: no cron entry in scheduler.ts) · prefs ✓ → FAILED → quote spot-check ✓ → P0 auto-fix (single attempt, no ask) → re-verify → PASSED. 14/14.
58
-
59
- ## Phase 7 — Summary
60
- O: 6 tasks/3 waves/6 spawns/1 pause/1 fresh-session resume · 1 needs_context · 1 escalation · verify fixed_then_passed · branch green. P2 fix-batch: none · Apply the 2 P3 cosmetics? U: no.
61
-
62
- ## Phase 8 — Ship (orc-pr, reads pr.md)
63
- O: Branch: feat/notifications. Commit? Push? PR? U: yes all.
64
- O: Ticket/title/target? U: DRP-482 / Add merchant notification system / develop
65
- O: ✓ committed → pushed → run/merchant-notifications/DRP-482-add-merchant-notification-system.md from pr.md (base develop).
66
- Log deleted · checkpoint + dispatch log KEPT · completion dispatch report shown → "Run /usage to see your remaining limits."
67
-
68
- ## What this exercises
69
- always-spawn (even cheap tasks get a subagent) · facet-scored arithmetic · 6-band ladder ·
70
- per-run folder run/merchant-notifications/ · usage reminder (no programmatic /usage) ·
71
- planner grounding spot-check catching a hallucinated path · executor evidence (verbatim
72
- build/test proof) · reviewer quote spot-check before any P0/P1 action ·
73
- definition-of-done catching the weekly-cron gap · needs_context resolved internally · fresh-session resume.
1
+ # Example — Annotated Full Run (v2.2, dry run)
2
+
3
+ O: = orchestrator (Opus 4.8 high, always) · U: = user. Nothing real. The
4
+ orchestrator NEVER implements — it always spawns scored subagents.
5
+
6
+ U: Orchestrate: merchant notification system — in-app, email digest, prefs page.
7
+
8
+ ## Phase 0 — Intake
9
+ O: Creates run folder run/merchant-notifications/ FIRST.
10
+ [reads repo: TS/yarn/jest — asks nothing about stack] Rough size: medium+ → 4-question tier (one batched round):
11
+ 1) What should exist when done? 2) Out of scope? 3) How do we know it's done? 4) Patterns/files to avoid?
12
+ U: [answers] no push, no admin; bell count + both digest schedules + prefs persist; follow services/ pattern, don't touch auth_service.
13
+ O: [drafts run/merchant-notifications/intent-spec.md] Sign-off: gate or soft? (default gate)
14
+ U: gate → approved
15
+
16
+ ## Phase 1 — Planning
17
+ O: Planner? U: OpenSpec
18
+ O: [6 tasks with declared_files incl. tests + per-file grounding attestations + sliced acceptance[], depends_on, spec_ref] ⚠ T1/T2 share models/notification.ts → scheduling separates them.
19
+ Grounding spot-check (Phase 1 exit): globs all `exists` paths — 13/14 present, models/notifcation.ts MISSING (typo) → plan bounced to planner with the miss list → corrected to models/notification.ts ✓.
20
+
21
+ ## Phase 2 — Effort, dispatch style, scoring
22
+ O: Refined: medium, partially dependent. Recommend PARALLEL waves. Confirm? U: yes. Batch pause? U: every 2 waves.
23
+ O: Facet scoring (planner facets → formula → band; facet gate: breadth + fan recomputed, risk cites checked):
24
+ T1 3·new-surface·stateful·new-tests·fan0/3·low = 6+18+16+8+9 = 57 → sonnet-5-high (keystone — every later task imports its enum)
25
+ T2 3·imitate·branching·new-tests·fan1/0·low = 6+8+8+8+5 = 35 → sonnet-4-6-med
26
+ T3 3·imitate·branching·update-existing·fan1/0·low = 6+8+8+4+5 = 31 → sonnet-4-6-med
27
+ T4 2·imitate·branching·update-existing·fan1/0·low = 6+8+8+4+5 = 31 → sonnet-4-6-med
28
+ T5 1·mechanical·none·update-existing·fan0/0·low = 2+0+0+4 = 6 → haiku-4-5
29
+ T6 1·mechanical·none·none·fan0/0·low = 2+0+0+0 = 2 → haiku-4-5
30
+ Plan: 6 tasks, 3 waves W1{T1} W2{T2,T3,T4} W3{T5,T6}, all spawned. Anticipated escalations? U: none, go.
31
+
32
+ ## Phase 3 — Execution (ALL spawned; orchestrator coordinates only)
33
+ O: [checkpoint + state-of-play written into run/merchant-notifications/ BEFORE dispatch]
34
+ ▶ W1: spawn Agent-A(T1, sonnet-5-high) — milestones 40%→100% — return validated ✓ (evidence: `yarn jest models/` exit 0, tail quoted; unmet[] empty) — log: DECISION type enum.
35
+ ▶ W2: spawn 3 agents (sonnet-4-6-med each).
36
+ Agent-C needs_context (1/2): "needs T1's enum interface" → O adjudicates in-scope → re-slices → resumes. (User never bothered.)
37
+ Agent-C user escalation: "digest send time?" → U: 07:00 fixed → ANSWER broadcast to log.
38
+ Returns validated ✓ · collision audit clean.
39
+ ⏸ BATCH PAUSE (stop sequence):
40
+ checkpoint ✓ → state-of-play ✓ → dispatch report shown (models/scores) → "Run /usage to see your remaining limits."
41
+ → resume block:
42
+ | Continue ORC run `merchant-notifications`.
43
+ | Read run/merchant-notifications/state-of-play.md, then run/merchant-notifications/checkpoint.json.
44
+ | Resume from checkpoint phase/wave. Intent-spec approved — do not re-plan. Do not redo done tasks.
45
+ "Reply continue here, or paste in a fresh session (recommended if long)."
46
+
47
+ U: [next day, FRESH session, pastes block]
48
+ O: [state-of-play → checkpoint → re-anchored] "Resuming: merchant notifications (in-app+digest+prefs). Still correct?" U: yes.
49
+ ▶ W3: spawn T5+T6 (haiku-4-5) → done. All 6 complete.
50
+
51
+ ## Phase 5 — Review (spawned worker, Opus 5.5 medium)
52
+ O: Code pattern? U: none. Findings (P0–P3 ladder, each P0–P2 anchored file:line + verbatim quote):
53
+ P1 T2 no pagination — services/notification_list.ts:88 — O spot-checks: Reads line 88, quote matches ✓ → asks user, U: fix it
54
+ · P3 email_digest naming ×2 · 12 tests added. (An unanchored finding would be auto-P3 — never fixed unasked.)
55
+
56
+ ## Phase 6 — Verify (spawned worker, Opus 5.5 medium; criteria = definition-of-done)
57
+ criteria[] with per-line evidence: bell ✓ (test name) · both schedules ✗ (weekly cron missing = P0, unmet criterion, evidence: no cron entry in scheduler.ts) · prefs ✓ → FAILED → quote spot-check ✓ → P0 auto-fix (single attempt, no ask) → re-verify → PASSED. 14/14.
58
+
59
+ ## Phase 7 — Summary
60
+ O: 6 tasks/3 waves/6 spawns/1 pause/1 fresh-session resume · 1 needs_context · 1 escalation · verify fixed_then_passed · branch green. P2 fix-batch: none · Apply the 2 P3 cosmetics? U: no.
61
+
62
+ ## Phase 8 — Ship (orc-pr, reads pr.md)
63
+ O: Branch: feat/notifications. Commit? Push? PR? U: yes all.
64
+ O: Ticket/title/target? U: DRP-482 / Add merchant notification system / develop
65
+ O: ✓ committed → pushed → run/merchant-notifications/DRP-482-add-merchant-notification-system.md from pr.md (base develop).
66
+ Log deleted · checkpoint + dispatch log KEPT · completion dispatch report shown → "Run /usage to see your remaining limits."
67
+
68
+ ## What this exercises
69
+ always-spawn (even cheap tasks get a subagent) · facet-scored arithmetic · 6-band ladder ·
70
+ per-run folder run/merchant-notifications/ · usage reminder (no programmatic /usage) ·
71
+ planner grounding spot-check catching a hallucinated path · executor evidence (verbatim
72
+ build/test proof) · reviewer quote spot-check before any P0/P1 action ·
73
+ definition-of-done catching the weekly-cron gap · needs_context resolved internally · fresh-session resume.