@azure-id/orc 1.9.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +722 -0
- package/README-id.md +56 -42
- package/README.md +58 -41
- package/bin/build-agents.js +125 -29
- package/bin/clear-logs.js +620 -0
- package/bin/cli.js +1873 -180
- package/bin/fix.js +459 -0
- package/bin/gotcha-import.js +1081 -0
- package/bin/gotcha.js +1566 -0
- package/bin/graph-query.js +1 -1
- package/bin/graph.js +717 -717
- package/bin/habit.js +1538 -0
- package/bin/mockrun-catalog.js +284 -276
- package/bin/onboarding-content.js +2 -1
- package/bin/pricing.json +28 -21
- package/bin/run-undo.js +398 -0
- package/bin/trace-write.js +869 -0
- package/bin/verify-contracts.js +627 -100
- package/bin/verify-package.js +68 -10
- package/bin/webui/api.js +151 -6
- package/bin/webui/app.html +239 -232
- package/bin/webui/css/00-tokens.css +110 -92
- package/bin/webui/css/04-motion.css +87 -0
- package/bin/webui/css/06-responsive.css +203 -178
- package/bin/webui/css/panels/behaviour.css +205 -0
- package/bin/webui/css/panels/hookui.css +79 -0
- package/bin/webui/fixtures/behaviour.js +562 -0
- package/bin/webui/fixtures/extra.js +9 -9
- package/bin/webui/fixtures/flow.js +81 -81
- package/bin/webui/fixtures/hookui.js +506 -431
- package/bin/webui/fixtures/index.js +66 -3
- package/bin/webui/fixtures/knowledge.js +9 -3
- package/bin/webui/fixtures/maintenance.js +123 -42
- package/bin/webui/fixtures/rules.js +1007 -1002
- package/bin/webui/fixtures/settings.js +6 -7
- package/bin/webui/fixtures/stats.js +25 -6
- package/bin/webui/fixtures/wait.js +98 -97
- package/bin/webui/i18n/en/behaviour.json +156 -0
- package/bin/webui/i18n/en/hookui.json +290 -194
- package/bin/webui/i18n/en/maintenance.json +71 -52
- package/bin/webui/i18n/en/nav.json +25 -24
- package/bin/webui/i18n/en/settings.json +60 -60
- package/bin/webui/i18n/en/tour.json +37 -35
- package/bin/webui/i18n/id/behaviour.json +156 -0
- package/bin/webui/i18n/id/hookui.json +290 -194
- package/bin/webui/i18n/id/maintenance.json +71 -52
- package/bin/webui/i18n/id/nav.json +25 -24
- package/bin/webui/i18n/id/settings.json +60 -60
- package/bin/webui/i18n/id/tour.json +37 -35
- package/bin/webui/js/01-i18n.js +155 -154
- package/bin/webui/js/05-banners.js +181 -172
- package/bin/webui/js/06-edit.js +193 -183
- package/bin/webui/js/90-tour.js +498 -494
- package/bin/webui/js/91-shortcuts.js +126 -126
- package/bin/webui/js/99-boot.js +121 -118
- package/bin/webui/js/panels/behaviour.js +1087 -0
- package/bin/webui/js/panels/hookui.js +2196 -1691
- package/bin/webui/js/panels/maintenance.js +336 -235
- package/bin/webui/js/panels/settings.js +726 -719
- package/mock-run/INDEX.md +110 -107
- package/mock-run/extra-slots.md +1 -1
- package/mock-run/gotcha-import.md +118 -0
- package/mock-run/habits.md +129 -0
- package/mock-run/orc-aftermath.md +392 -392
- package/mock-run/orc-budget.md +29 -33
- package/mock-run/orc-cli.md +200 -200
- package/mock-run/orc-explain.md +86 -86
- package/mock-run/orc-extra.md +389 -392
- package/mock-run/orc-fix.md +87 -0
- package/mock-run/orc-pattern.md +112 -112
- package/mock-run/orc-quick.md +6 -1
- package/mock-run/orc.md +157 -157
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +37 -34
- package/templates/agents/orc-advisor-opus-5-xhigh.md +1 -7
- package/templates/agents/orc-analyze-mini-opus-5-med.md +1 -6
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -5
- package/templates/agents/{orc-claude-writer-opus-4-8-high.md → orc-claude-writer-opus-5-low.md} +48 -53
- package/templates/agents/orc-context-combiner-opus-5-high.md +1 -11
- package/templates/agents/orc-executor-haiku-4-5.md +14 -6
- package/templates/agents/orc-executor-opus-4-7-high.md +14 -6
- package/templates/agents/orc-executor-opus-4-7-med.md +14 -6
- package/templates/agents/orc-executor-opus-4-8-high.md +14 -6
- package/templates/agents/orc-executor-opus-5-high.md +14 -6
- package/templates/agents/orc-executor-opus-5-low.md +14 -6
- package/templates/agents/orc-executor-opus-5-med.md +14 -6
- package/templates/agents/orc-executor-sonnet-4-6-high.md +14 -6
- package/templates/agents/orc-executor-sonnet-4-6-med.md +14 -6
- package/templates/agents/orc-executor-sonnet-5-high.md +15 -7
- package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
- package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -10
- package/templates/agents/orc-judge-opus-5-xhigh.md +5 -9
- package/templates/agents/orc-learn-writer-opus-5-low.md +1 -7
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +1 -8
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +58 -63
- package/templates/agents/orc-planner-mini-opus-5-med.md +1 -4
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -3
- package/templates/agents/orc-planner-opus-5-med.md +1 -4
- package/templates/agents/orc-recon-opus-5-low.md +1 -8
- package/templates/agents/orc-recon-sonnet-4-6-med.md +1 -8
- package/templates/agents/orc-retro-opus-5-med.md +6 -8
- package/templates/agents/orc-retro-sonnet-5-high.md +7 -8
- package/templates/agents/orc-reviewer-opus-5-low.md +96 -0
- package/templates/agents/orc-scout-opus-5-low.md +1 -6
- package/templates/agents/orc-scout-sonnet-4-6-high.md +35 -39
- package/templates/agents/orc-system-analyst-opus-5-high.md +1 -6
- package/templates/agents/orc-test-author-opus-5-med.md +4 -5
- package/templates/agents/orc-trace-writer-haiku-4-5.md +3 -7
- package/templates/agents/orc-verifier-opus-5-med.md +16 -8
- package/templates/agents/{orc-wiki-scanner-opus-4-8-high.md → orc-wiki-scanner-opus-5-low.md} +74 -79
- package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +97 -106
- package/templates/commands/orc-analyze.md +13 -21
- package/templates/commands/orc-fast.md +10 -15
- package/templates/commands/orc-fix.md +18 -0
- package/templates/commands/orc-poly.md +12 -21
- package/templates/commands/orc-pr-driver.md +11 -30
- package/templates/commands/orc-pr-setup.md +10 -31
- package/templates/commands/orc-route.md +11 -41
- package/templates/commands/orc-test.md +5 -60
- package/templates/commands/orc-wiki.md +64 -64
- package/templates/hooks/README.md +109 -7
- package/templates/hooks/orc-session-hook.js +339 -0
- package/templates/hooks/orc-statusline-render.js +317 -23
- package/templates/hooks/orc-statusline.js +165 -50
- package/templates/hooks/orc-subagent-line.js +23 -5
- package/templates/hooks/orc-weather-fetch.js +123 -0
- package/templates/skills/_shared/README.md +9 -0
- package/templates/skills/_shared/code-graph.md +47 -55
- package/templates/skills/_shared/config-precedence.md +3 -1
- package/templates/skills/_shared/extra-dispatch.md +78 -93
- package/templates/skills/_shared/gotchas.md +248 -177
- package/templates/skills/_shared/habits.md +101 -0
- package/templates/skills/_shared/lane-contract.md +84 -0
- package/templates/skills/_shared/opus5-only.md +14 -14
- package/templates/skills/_shared/phases/README.md +142 -83
- package/templates/skills/_shared/phases/analyst-gates.md +10 -21
- package/templates/skills/_shared/phases/execution.md +8 -14
- package/templates/skills/_shared/phases/house-rules.md +27 -32
- package/templates/skills/_shared/phases/intake.md +127 -133
- package/templates/skills/_shared/phases/mock-example.md +46 -56
- package/templates/skills/_shared/phases/plan-handoff.md +91 -97
- package/templates/skills/_shared/phases/planning.md +7 -17
- package/templates/skills/_shared/phases/preflight.md +19 -42
- package/templates/skills/_shared/phases/review.md +24 -28
- package/templates/skills/_shared/phases/rules.md +18 -42
- package/templates/skills/_shared/phases/scoring.md +55 -65
- package/templates/skills/_shared/phases/security-checklist.md +46 -50
- package/templates/skills/_shared/phases/security.md +45 -55
- package/templates/skills/_shared/phases/ship.md +6 -15
- package/templates/skills/_shared/phases/stop-resume.md +2 -5
- package/templates/skills/_shared/phases/summary.md +73 -48
- package/templates/skills/_shared/phases/testgen.md +41 -51
- package/templates/skills/_shared/phases/trace-verbs.md +447 -0
- package/templates/skills/_shared/phases/trace.md +66 -297
- package/templates/skills/_shared/phases/verify.md +62 -70
- package/templates/skills/_shared/phases/wave-grouping.md +128 -133
- package/templates/skills/_shared/phases/wiki-consult.md +10 -6
- package/templates/skills/_shared/read-ladder.md +2 -55
- package/templates/skills/_shared/return-validation.md +17 -70
- package/templates/skills/_shared/review-slice.md +106 -0
- package/templates/skills/_shared/smoke-gate.md +46 -28
- package/templates/skills/_shared/wait.md +1 -0
- package/templates/skills/context-combiner/SKILL.md +15 -44
- package/templates/skills/orc/README.md +2 -2
- package/templates/skills/orc/SKILL.md +35 -63
- package/templates/skills/orc/config.md +25 -27
- package/templates/skills/orc/examples/full-run-mock.md +2 -1
- package/templates/skills/orc/references/effort-and-mode.md +17 -17
- package/templates/skills/orc/references/pattern-gate.md +89 -89
- package/templates/skills/orc/references/phases/intake.md +41 -47
- package/templates/skills/orc/references/phases/integration.md +13 -19
- package/templates/skills/orc/references/preflight-report.md +11 -12
- package/templates/skills/orc/references/ultra-mode.md +9 -7
- package/templates/skills/orc/schemas/checkpoint.md +122 -122
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +27 -73
- package/templates/skills/orc/subskills/orc-execution/core.md +12 -99
- package/templates/skills/orc/subskills/orc-execution/subagent.md +14 -13
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +12 -53
- package/templates/skills/orc/subskills/orc-review-verify/core.md +52 -135
- package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -7
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +11 -22
- package/templates/skills/orc/subskills/orc-testgen/core.md +20 -59
- package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -7
- package/templates/skills/orc-advisor/SKILL.md +56 -60
- package/templates/skills/orc-analyze/SKILL.md +33 -67
- package/templates/skills/orc-analyze/schemas/report-audit.md +2 -1
- package/templates/skills/orc-analyze/schemas/report-prose.md +2 -1
- package/templates/skills/orc-analyze-mini/SKILL.md +35 -70
- package/templates/skills/orc-claude/SKILL.md +14 -14
- package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
- package/templates/skills/orc-diy/README.md +31 -0
- package/templates/skills/orc-diy/SKILL.md +27 -78
- package/templates/skills/orc-diy/references/blocks/pattern.md +18 -18
- package/templates/skills/orc-fast/SKILL.md +49 -75
- package/templates/skills/orc-fix/SKILL.md +110 -0
- package/templates/skills/orc-judge/SKILL.md +77 -82
- package/templates/skills/orc-mini/SKILL.md +64 -112
- package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
- package/templates/skills/orc-pattern/SKILL.md +27 -48
- package/templates/skills/orc-poly/SKILL.md +32 -61
- package/templates/skills/orc-pr-driver/SKILL.md +25 -51
- package/templates/skills/orc-pr-driver/references/green-gate.md +113 -105
- package/templates/skills/orc-pr-setup/SKILL.md +20 -45
- package/templates/skills/orc-quick/README.md +44 -3
- package/templates/skills/orc-quick/SKILL.md +77 -108
- package/templates/skills/orc-quick/references/dispatch-gate.md +18 -6
- package/templates/skills/orc-quick/references/gh-mode.md +50 -1
- package/templates/skills/orc-quick/references/look.md +3 -1
- package/templates/skills/orc-retro/SKILL.md +20 -19
- package/templates/skills/orc-retro/examples/retro-mock.md +17 -17
- package/templates/skills/orc-route/SKILL.md +25 -45
- package/templates/skills/orc-test/SKILL.md +16 -37
- package/templates/skills/orc-verify/SKILL.md +14 -32
- package/templates/skills/orc-wait/SKILL.md +156 -163
- package/templates/skills/orc-wiki/README.md +325 -325
- package/templates/skills/orc-wiki/SKILL.md +195 -195
- package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
- package/templates/skills/orc-wiki/references/extra.md +2 -2
- package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
- package/templates/skills/orc-wiki/references/phases/phase-0.md +2 -7
- package/templates/skills/orc-wiki/references/phases/phase-1.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-2.md +4 -9
- package/templates/skills/orc-wiki/references/phases/phase-3.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-3c.md +4 -8
- package/templates/agents/orc-claude-writer-opus-5-med.md +0 -55
- package/templates/agents/orc-reviewer-opus-5-med.md +0 -60
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +0 -81
|
@@ -33,7 +33,7 @@ const config = {
|
|
|
33
33
|
{ key: "opus5_only", tier: "common", answers: [{"family":"executor-band","prio":"P1","mode":"replace"},{"family":"fixed-role-model","prio":"P1","mode":"replace"}], family: "executor-band", prio: "P1", lanes: ["orc","orc-analyze","orc-challenge","orc-claude","orc-diy","orc-doc","orc-fast","orc-mini","orc-pattern","orc-quick","orc-retro","orc-wiki"], gated_by: null, value: "true", default: false, is_overridden: true, is_shadowed: true, shadow_reason: "partly shadowed by extra_enabled — [0,30), [30,55), [50,60), [60,70) are routed to a non-Claude worker; the quick-executor, doc-writer position is held by one too (not consulted here); every other score and position still resolves here", desc: "EVERY dispatched role uses ONE model — Opus 5.5 — with EFFORT as the cost dial.", options: ["true", "false"], control: { kind: "enum", choices: ["true", "false"], min: null, max: null } },
|
|
34
34
|
{ key: "wiki_fresh_max", tier: "advanced", answers: [{"family":"wiki","prio":"P2","mode":"replace"}], family: "wiki", prio: "P2", lanes: ["orc","orc-fast","orc-learn","orc-wiki"], gated_by: null, value: 10, default: 10, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Wiki freshness: commit distance < this → FRESH.", options: null, control: { kind: "int", choices: null, min: 1, max: null } },
|
|
35
35
|
{ key: "wiki_aging_max", tier: "advanced", answers: [{"family":"wiki","prio":"P2","mode":"replace"}], family: "wiki", prio: "P2", lanes: ["orc","orc-fast","orc-learn","orc-wiki"], gated_by: null, value: 30, default: 30, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Wiki freshness: commit distance <= this → AGING; beyond → STALE.", options: null, control: { kind: "int", choices: null, min: 1, max: null } },
|
|
36
|
-
{ key: "log_dir", tier: "advanced", answers: [{"family":"paths","prio":"P2","mode":"replace"}], family: "paths", prio: "P2", lanes: ["context-combiner","orc","orc-aftermath","orc-analyze","orc-analyze-mini","orc-boundary","orc-brainstorm","orc-budget","orc-challenge","orc-claude","orc-diy","orc-doc","orc-explain","orc-export","orc-fast","orc-grill","orc-handoff","orc-learn","orc-mini","orc-pact","orc-pattern","orc-poly","orc-pr-driver","orc-pr-setup","orc-quick","orc-retro","orc-route","orc-verify","orc-wiki"], gated_by: null, value: ".claude/orc/logs", default: ".claude/orc/logs", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Persistent trace folder (never auto-deleted).", options: null, control: { kind: "path", choices: null, min: null, max: null } },
|
|
36
|
+
{ key: "log_dir", tier: "advanced", answers: [{"family":"paths","prio":"P2","mode":"replace"}], family: "paths", prio: "P2", lanes: ["context-combiner","orc","orc-aftermath","orc-analyze","orc-analyze-mini","orc-boundary","orc-brainstorm","orc-budget","orc-challenge","orc-claude","orc-diy","orc-doc","orc-explain","orc-export","orc-fast","orc-fix","orc-grill","orc-handoff","orc-learn","orc-mini","orc-pact","orc-pattern","orc-poly","orc-pr-driver","orc-pr-setup","orc-quick","orc-retro","orc-route","orc-verify","orc-wiki"], gated_by: null, value: ".claude/orc/logs", default: ".claude/orc/logs", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Persistent trace folder (never auto-deleted).", options: null, control: { kind: "path", choices: null, min: null, max: null } },
|
|
37
37
|
{ key: "retro_repo", tier: "advanced", answers: [{"family":"retro","prio":"P2","mode":"replace"}], family: "retro", prio: "P2", lanes: ["orc","orc-retro"], gated_by: null, value: "azure-id/orc", default: "azure-id/orc", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "GitHub owner/repo that receives /orc-retro reports.", options: null, control: { kind: "repo", choices: null, min: null, max: null } },
|
|
38
38
|
// v0.50.0 — the nine `orc extra` keys, copied from the live registry so the
|
|
39
39
|
// shapes cannot drift. `extra_enabled` is TRUE here on purpose: an ARMED
|
|
@@ -47,7 +47,7 @@ const config = {
|
|
|
47
47
|
{"key": "extra_vault_max_attempts", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 10, "default": 10, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Wrong passphrases before the encrypted key DELETES ITSELF. It is a key rather than a magic number so the count is inspectable and testable — NOT so it can be switched off; below 3 is refused. The counter stops someone at your keyboard; it does not stop someone who copies the vault file and tries offline, and scrypt's cost is the only defence there.", "options": null, "control": {"kind": "int", "choices": null, "min": 3, "max": null}},
|
|
48
48
|
{"key": "extra_timeout_s", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 900, "default": 900, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Per-dispatch wall clock for a foreign worker. The child's own timeouts are DERIVED from this rather than set independently, so three timeouts cannot disagree about which one fires first.", "options": null, "control": {"kind": "int", "choices": null, "min": 30, "max": null}},
|
|
49
49
|
{"key": "extra_verify_max_days", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 7, "default": 7, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Past this a profile's verification reads STALE and is re-pinged before wave 1. A STALE profile STILL ROUTES — a stale check is not a failed one (the /orc-pact UNCHECKABLE rule) — and freshness is computed on read, never stored.", "options": null, "control": {"kind": "int", "choices": null, "min": 1, "max": null}},
|
|
50
|
-
{ key: "orchestrator_model", tier: "advanced", answers: [{"family":"session","prio":"P2","mode":"replace"}], family: "session", prio: "P2", lanes: ["orc"], gated_by: null, value: "claude-opus-4-8", tierNote: null, default: "claude-opus-4-8", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Main-session model (below Opus breaks the tier ladder).", options: null, control: { kind: "enum", choices: ["claude-opus-5-5", "claude-opus-4-8", "claude-sonnet-5"], min: null, max: null } },
|
|
50
|
+
{ key: "orchestrator_model", tier: "advanced", answers: [{"family":"session","prio":"P2","mode":"replace"}], family: "session", prio: "P2", lanes: ["orc"], gated_by: null, value: "claude-opus-4-8", tierNote: null, default: "claude-opus-4-8", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Main-session model (below Opus breaks the tier ladder).", options: null, control: { kind: "enum", choices: ["claude-opus-5-5", "claude-opus-4-8", "claude-sonnet-5-5"], min: null, max: null } },
|
|
51
51
|
],
|
|
52
52
|
// The registry-less, hand-written key — read-only everywhere, and shadowed here.
|
|
53
53
|
hand_edited: [
|
|
@@ -69,11 +69,10 @@ const config = {
|
|
|
69
69
|
score_table: {
|
|
70
70
|
active: "opus5_only",
|
|
71
71
|
default: [
|
|
72
|
-
{ from: 0, to:
|
|
73
|
-
{ from:
|
|
74
|
-
{ from:
|
|
75
|
-
{ from:
|
|
76
|
-
{ from: 65, to: 90, inclusive_to: false, agent: "orc-executor-opus-5-low" },
|
|
72
|
+
{ from: 0, to: 21, inclusive_to: false, agent: "orc-executor-sonnet-5-low" },
|
|
73
|
+
{ from: 21, to: 31, inclusive_to: false, agent: "orc-executor-sonnet-5-med" },
|
|
74
|
+
{ from: 31, to: 41, inclusive_to: false, agent: "orc-executor-sonnet-5-high" },
|
|
75
|
+
{ from: 41, to: 90, inclusive_to: false, agent: "orc-executor-opus-5-low" },
|
|
77
76
|
{ from: 90, to: 100, inclusive_to: true, agent: "orc-executor-opus-5-med" },
|
|
78
77
|
],
|
|
79
78
|
opus5_only: [
|
|
@@ -24,9 +24,28 @@ const stats = {
|
|
|
24
24
|
downgrades: 3,
|
|
25
25
|
unfinished: 2,
|
|
26
26
|
unknown_lane: 1,
|
|
27
|
+
// v2.1.0 W7 — runs `orc clear logs --apply` pruned; their counts live in
|
|
28
|
+
// logs-rollup.json and are already inside every total above.
|
|
29
|
+
pruned_runs: 17,
|
|
27
30
|
// v1.8.2 W4b — the code-graph row. `paid` is exact; the avoided pair is an
|
|
28
31
|
// ESTIMATE and always a RANGE, which is why the panel never shows one number.
|
|
29
32
|
graph: { calls: 41, runs: 6, paid: 4912, avoided_low: 18900, avoided_high: 71400, estimate: true },
|
|
33
|
+
// v2.0.0 W6b (Q7) — questions per run. `null` = could not be computed.
|
|
34
|
+
questions: {
|
|
35
|
+
runs: 61,
|
|
36
|
+
per_run_p50: 2,
|
|
37
|
+
per_run_trend: [
|
|
38
|
+
{ run: "run-quick-fix-guest-charge-060826-101500.txt", lane: "quick", date: "2026-08-06", asked: 3, answered_for_you: 1 },
|
|
39
|
+
{ run: "run-mini-add-export-070826-140000.txt", lane: "mini", date: "2026-08-07", asked: 0, answered_for_you: 2 },
|
|
40
|
+
],
|
|
41
|
+
asked: 131,
|
|
42
|
+
answered_for_you: 58,
|
|
43
|
+
subagent_questions: 12,
|
|
44
|
+
by: { user: 104, ledger: 31, learned: 15, config: 20, default: 7 },
|
|
45
|
+
by_lane: { quick: { runs: 17, asked: 44, answered_for_you: 30, per_run_p50: 2 }, mini: { runs: 9, asked: 11, answered_for_you: 6, per_run_p50: 1 } },
|
|
46
|
+
by_point: { "quick.q3.offer.review": { asked: 12, answered_for_you: 9, lanes: ["quick"] } },
|
|
47
|
+
rule: "asked = ASK by=user|learned + QUESTION count=<n>; answered for you = ASK by=ledger|config|default",
|
|
48
|
+
},
|
|
30
49
|
};
|
|
31
50
|
|
|
32
51
|
/* ============================================================ v0.46.0 ====== */
|
|
@@ -53,9 +72,9 @@ const budgetForecast = {
|
|
|
53
72
|
// A task at CONTEXT RISK — the state that cannot be designed on a small plan.
|
|
54
73
|
context_risk: [{ task: "T12", agent: "orc-executor-opus-5-med", peak: 189000, window: 200000, pct: 95 }],
|
|
55
74
|
bands: [
|
|
56
|
-
{ band: "[0,
|
|
57
|
-
{ band: "[
|
|
58
|
-
{ band: "[
|
|
75
|
+
{ band: "[0,21)", agent: "orc-executor-sonnet-5-low", count: 2, tasks: ["T01", "T02"], samples: 9, p50: { input: 1200, cache_write: 6400, cache_read: 11800, output: 900 }, p90: { input: 1800, cache_write: 9200, cache_read: 17000, output: 1400 } },
|
|
76
|
+
{ band: "[31,41)", agent: "orc-executor-sonnet-5-high", count: 3, tasks: ["T03", "T05", "T07"], samples: 12, p50: { input: 7800, cache_write: 52100, cache_read: 104000, output: 8400 }, p90: { input: 11000, cache_write: 75000, cache_read: 150000, output: 12000 } },
|
|
77
|
+
{ band: "[41,90)", agent: "orc-executor-opus-5-low", count: 1, tasks: ["T04"], samples: 6, p50: { input: 5700, cache_write: 40200, cache_read: 81000, output: 9300 }, p90: { input: 8100, cache_write: 58000, cache_read: 117000, output: 13400 } },
|
|
59
78
|
// A band with insufficient history — the low-confidence warning is not
|
|
60
79
|
// optional chrome, so the fixture has to be able to trigger it.
|
|
61
80
|
{ band: "[90,100]", agent: "orc-executor-opus-5-med", count: 1, tasks: ["T12"], samples: 2, p50: { input: 9100, cache_write: 61000, cache_read: 128000, output: 17000 }, p90: { input: 14000, cache_write: 94000, cache_read: 198000, output: 26000 } },
|
|
@@ -91,9 +110,9 @@ const budgetRates = {
|
|
|
91
110
|
dispatches_joined: 96,
|
|
92
111
|
price_table_as_of: "2026-08-01",
|
|
93
112
|
bands: {
|
|
94
|
-
"[0,
|
|
95
|
-
"[
|
|
96
|
-
"[
|
|
113
|
+
"[0,21)": { samples: 9, p50: { input: 1200, cache_write: 6400, cache_read: 11800, output: 900 }, p90: { input: 1800, cache_write: 9200, cache_read: 17000, output: 1400 }, peak_p50: 24000, peak_p90: 38000 },
|
|
114
|
+
"[31,41)": { samples: 12, p50: { input: 7800, cache_write: 52100, cache_read: 104000, output: 8400 }, p90: { input: 11000, cache_write: 75000, cache_read: 150000, output: 12000 }, peak_p50: 78000, peak_p90: 121000 },
|
|
115
|
+
"[41,90)": { samples: 6, p50: { input: 5700, cache_write: 40200, cache_read: 81000, output: 9300 }, p90: { input: 8100, cache_write: 58000, cache_read: 117000, output: 13400 }, peak_p50: 96000, peak_p90: 142000 },
|
|
97
116
|
"[90,100]": { samples: 2, p50: { input: 9100, cache_write: 61000, cache_read: 128000, output: 17000 }, p90: { input: 14000, cache_write: 94000, cache_read: 198000, output: 26000 }, peak_p50: 151000, peak_p90: 189000 },
|
|
98
117
|
},
|
|
99
118
|
roles: {
|
|
@@ -1,97 +1,98 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* fixtures/wait.js — canned `orc usage check` / `orc wait …` responses.
|
|
4
|
-
*
|
|
5
|
-
* ONE OF EVERY STATE, including the ugly ones. You cannot design an `unknown`
|
|
6
|
-
* chip on a project whose statusline is happily writing a reading every second,
|
|
7
|
-
* and `unknown` is the state that matters most here: it is what every install
|
|
8
|
-
* on Claude Code before v2.1.80 sees, forever.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
// LOW, and low on the WORST window rather than the obvious one. The 5-hour
|
|
12
|
-
// window is the one people watch; this fixture has it comfortable and the
|
|
13
|
-
// weekly one nearly gone, which is the case a panel gets wrong.
|
|
14
|
-
const usage = {
|
|
15
|
-
ok: true,
|
|
16
|
-
state: "low",
|
|
17
|
-
five_hour: {
|
|
18
|
-
window: "5h",
|
|
19
|
-
used_percentage: 62,
|
|
20
|
-
remaining_percentage: 38,
|
|
21
|
-
resets_at: new Date(Date.now() + 96 * 60000).toISOString(),
|
|
22
|
-
resets_in_minutes: 96,
|
|
23
|
-
low: false,
|
|
24
|
-
},
|
|
25
|
-
seven_day: {
|
|
26
|
-
window: "wk",
|
|
27
|
-
used_percentage: 94,
|
|
28
|
-
remaining_percentage: 6,
|
|
29
|
-
resets_at: new Date(Date.now() + 2 * 86400000).toISOString(),
|
|
30
|
-
resets_in_minutes: 2880,
|
|
31
|
-
low: true,
|
|
32
|
-
},
|
|
33
|
-
worst: "wk",
|
|
34
|
-
context: 81,
|
|
35
|
-
stop_pct: 10,
|
|
36
|
-
gate: "wait",
|
|
37
|
-
reading_age_minutes: 2,
|
|
38
|
-
note: "read BEFORE a wave; the wave then spends tokens, so this is a reading and not a promise.",
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
// The state a fresh install on older Claude Code sits in permanently.
|
|
42
|
-
const usageUnknown = {
|
|
43
|
-
ok: true,
|
|
44
|
-
state: "unknown",
|
|
45
|
-
reason: "no reading in the last 30 minutes",
|
|
46
|
-
five_hour: null,
|
|
47
|
-
seven_day: null,
|
|
48
|
-
context: null,
|
|
49
|
-
stop_pct: 10,
|
|
50
|
-
gate: "warn",
|
|
51
|
-
note: "unknown is not low — a run is never stopped on a missing reading. Claude Code before v2.1.80 sends no usage headers.",
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const waitLanes = {
|
|
55
|
-
ok: true,
|
|
56
|
-
modes: ["safe", "soft", "hard"],
|
|
57
|
-
checkpoints: ["full", "docset", "entry", "cycle", "snapshot", "none"],
|
|
58
|
-
lanes: [
|
|
59
|
-
{ lane: "/orc", checkpoint: "full", safe_point: "wave or phase edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the full checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
|
|
60
|
-
{ lane: "/orc-doc", checkpoint: "full", safe_point: "wave edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the full checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
|
|
61
|
-
{ lane: "/orc-quick", checkpoint: "entry", safe_point: "after an entry closes", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the entry checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
|
|
62
|
-
{ lane: "/orc-brainstorm", checkpoint: "snapshot", safe_point: "phase edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the snapshot checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
|
|
63
|
-
// A `none` row KEEPS ITS SLOT. Filtering it out would make "this lane has
|
|
64
|
-
// nothing to checkpoint" and "this lane does not support a wait" identical.
|
|
65
|
-
{ lane: "/orc-explain", checkpoint: "none", safe_point: "read-only, seconds long", modes: ["safe", "soft", "hard"], modes_differ: false, detail: "nothing to checkpoint — one dispatch, or a read. safe, soft and hard behave identically here." },
|
|
66
|
-
{ lane: "/orc-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* fixtures/wait.js — canned `orc usage check` / `orc wait …` responses.
|
|
4
|
+
*
|
|
5
|
+
* ONE OF EVERY STATE, including the ugly ones. You cannot design an `unknown`
|
|
6
|
+
* chip on a project whose statusline is happily writing a reading every second,
|
|
7
|
+
* and `unknown` is the state that matters most here: it is what every install
|
|
8
|
+
* on Claude Code before v2.1.80 sees, forever.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// LOW, and low on the WORST window rather than the obvious one. The 5-hour
|
|
12
|
+
// window is the one people watch; this fixture has it comfortable and the
|
|
13
|
+
// weekly one nearly gone, which is the case a panel gets wrong.
|
|
14
|
+
const usage = {
|
|
15
|
+
ok: true,
|
|
16
|
+
state: "low",
|
|
17
|
+
five_hour: {
|
|
18
|
+
window: "5h",
|
|
19
|
+
used_percentage: 62,
|
|
20
|
+
remaining_percentage: 38,
|
|
21
|
+
resets_at: new Date(Date.now() + 96 * 60000).toISOString(),
|
|
22
|
+
resets_in_minutes: 96,
|
|
23
|
+
low: false,
|
|
24
|
+
},
|
|
25
|
+
seven_day: {
|
|
26
|
+
window: "wk",
|
|
27
|
+
used_percentage: 94,
|
|
28
|
+
remaining_percentage: 6,
|
|
29
|
+
resets_at: new Date(Date.now() + 2 * 86400000).toISOString(),
|
|
30
|
+
resets_in_minutes: 2880,
|
|
31
|
+
low: true,
|
|
32
|
+
},
|
|
33
|
+
worst: "wk",
|
|
34
|
+
context: 81,
|
|
35
|
+
stop_pct: 10,
|
|
36
|
+
gate: "wait",
|
|
37
|
+
reading_age_minutes: 2,
|
|
38
|
+
note: "read BEFORE a wave; the wave then spends tokens, so this is a reading and not a promise.",
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// The state a fresh install on older Claude Code sits in permanently.
|
|
42
|
+
const usageUnknown = {
|
|
43
|
+
ok: true,
|
|
44
|
+
state: "unknown",
|
|
45
|
+
reason: "no reading in the last 30 minutes",
|
|
46
|
+
five_hour: null,
|
|
47
|
+
seven_day: null,
|
|
48
|
+
context: null,
|
|
49
|
+
stop_pct: 10,
|
|
50
|
+
gate: "warn",
|
|
51
|
+
note: "unknown is not low — a run is never stopped on a missing reading. Claude Code before v2.1.80 sends no usage headers.",
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const waitLanes = {
|
|
55
|
+
ok: true,
|
|
56
|
+
modes: ["safe", "soft", "hard"],
|
|
57
|
+
checkpoints: ["full", "docset", "entry", "cycle", "snapshot", "none"],
|
|
58
|
+
lanes: [
|
|
59
|
+
{ lane: "/orc", checkpoint: "full", safe_point: "wave or phase edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the full checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
|
|
60
|
+
{ lane: "/orc-doc", checkpoint: "full", safe_point: "wave edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the full checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
|
|
61
|
+
{ lane: "/orc-quick", checkpoint: "entry", safe_point: "after an entry closes", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the entry checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
|
|
62
|
+
{ lane: "/orc-brainstorm", checkpoint: "snapshot", safe_point: "phase edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the snapshot checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
|
|
63
|
+
// A `none` row KEEPS ITS SLOT. Filtering it out would make "this lane has
|
|
64
|
+
// nothing to checkpoint" and "this lane does not support a wait" identical.
|
|
65
|
+
{ lane: "/orc-explain", checkpoint: "none", safe_point: "read-only, seconds long", modes: ["safe", "soft", "hard"], modes_differ: false, detail: "nothing to checkpoint — one dispatch, or a read. safe, soft and hard behave identically here." },
|
|
66
|
+
{ lane: "/orc-fix", checkpoint: "none", safe_point: "after the record is written", modes: ["safe", "soft", "hard"], modes_differ: false, detail: "nothing to checkpoint — one dispatch, or a read. safe, soft and hard behave identically here." },
|
|
67
|
+
{ lane: "/orc-verify", checkpoint: "none", safe_point: "single dispatch", modes: ["safe", "soft", "hard"], modes_differ: false, detail: "nothing to checkpoint — one dispatch, or a read. safe, soft and hard behave identically here." },
|
|
68
|
+
],
|
|
69
|
+
note: "A lane not in this list does not support a wait.",
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Blocked AND waiting at once — the busiest the card ever gets.
|
|
73
|
+
const waitStatus = {
|
|
74
|
+
ok: true,
|
|
75
|
+
run: "rate-limit-api",
|
|
76
|
+
waiting: true,
|
|
77
|
+
mode: "soft",
|
|
78
|
+
hop: 30,
|
|
79
|
+
hops_done: 2,
|
|
80
|
+
hops_planned: 4,
|
|
81
|
+
ends_at: new Date(Date.now() + 44 * 60000).toISOString(),
|
|
82
|
+
cancel_requested: false,
|
|
83
|
+
blocked: true,
|
|
84
|
+
block_reason: "window resets in 5m, task needs 10",
|
|
85
|
+
blocked_at: new Date(Date.now() - 12 * 60000).toISOString(),
|
|
86
|
+
block_age_minutes: 12,
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// No run in flight. An empty result is an ANSWER, so it still carries an object.
|
|
90
|
+
const waitStatusNone = {
|
|
91
|
+
ok: true,
|
|
92
|
+
run: null,
|
|
93
|
+
waiting: false,
|
|
94
|
+
blocked: false,
|
|
95
|
+
note: "no run is in flight",
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
module.exports = { usage, usageUnknown, waitLanes, waitStatus, waitStatusNone };
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
{
|
|
2
|
+
"behaviour.title": "Behaviour",
|
|
3
|
+
"behaviour.sub": "What the lanes learned about how you work, from your own answers, in this project only. Nothing here leaves this machine.",
|
|
4
|
+
"behaviour.learning": "Learning",
|
|
5
|
+
"behaviour.window": "Window",
|
|
6
|
+
"behaviour.modeTitle": "Set behaviour learning to {mode}?",
|
|
7
|
+
"behaviour.modeDone": "Behaviour learning is now {mode}.",
|
|
8
|
+
"behaviour.mode.off": "Nothing is recorded and nothing is loaded. It costs zero tokens. Earlier answers are kept.",
|
|
9
|
+
"behaviour.mode.observe": "Your answers are recorded, so this page fills. The lanes behave as before: no suggestion, no proposal.",
|
|
10
|
+
"behaviour.mode.propose": "Your answers are recorded. An accepted habit marks your usual option, and a run shows one proposal at most. Nothing changes without your yes.",
|
|
11
|
+
"behaviour.off.eyebrow": "Behaviour learning is off",
|
|
12
|
+
"behaviour.off.title": "ORC does not learn from your answers now, and this costs nothing.",
|
|
13
|
+
"behaviour.off.kept": "{n} answers from an earlier period are kept.",
|
|
14
|
+
"behaviour.off.how": "Use the Learning switch above, or run one of these commands:",
|
|
15
|
+
"behaviour.portrait": "Your portrait · {window}",
|
|
16
|
+
"behaviour.noProposal": "No habit waits for your decision now.",
|
|
17
|
+
"behaviour.emptyTitle": "No answers yet",
|
|
18
|
+
"behaviour.emptyHint": "Run a lane. Each question it asks is recorded in its trace, and this page fills from those lines.",
|
|
19
|
+
"behaviour.tile.runs": "Runs observed",
|
|
20
|
+
"behaviour.tile.runsNote": "from {n} traces",
|
|
21
|
+
"behaviour.tile.answers": "Answers recorded",
|
|
22
|
+
"behaviour.tile.answersNote": "one per question you saw",
|
|
23
|
+
"behaviour.tile.saved": "Questions saved",
|
|
24
|
+
"behaviour.tile.savedNote": "answered for you by the ledger or config",
|
|
25
|
+
"behaviour.tile.qpr": "Questions per run",
|
|
26
|
+
"behaviour.tile.qprNote": "fewer questions, never fewer checks",
|
|
27
|
+
"behaviour.tile.prev": "before: {n}",
|
|
28
|
+
"behaviour.tabsLabel": "Behaviour views",
|
|
29
|
+
"behaviour.tab.habits": "Habits",
|
|
30
|
+
"behaviour.tab.rhythm": "Rhythm",
|
|
31
|
+
"behaviour.tab.gotchas": "Gotchas",
|
|
32
|
+
"behaviour.tab.quality": "Review quality",
|
|
33
|
+
"behaviour.tab.log": "Answer log",
|
|
34
|
+
"behaviour.nextRun": "Next run",
|
|
35
|
+
"behaviour.nextRunNote": "what your habits do on the next run of each lane",
|
|
36
|
+
"behaviour.legendTitle": "How a habit moves",
|
|
37
|
+
"behaviour.state.observed": "not enough answers yet, or the rule does not pass",
|
|
38
|
+
"behaviour.state.proposed": "the rule passed. The decision is yours",
|
|
39
|
+
"behaviour.state.applied": "in use, with an undo on the card",
|
|
40
|
+
"behaviour.state.declined": "you said not now. It can come back later",
|
|
41
|
+
"behaviour.state.neverAsk": "you said never. It is still recorded",
|
|
42
|
+
"behaviour.state.stale": "your answers changed, so the habit is paused",
|
|
43
|
+
"behaviour.state.shadowed": "your config file sets this key, so the file wins",
|
|
44
|
+
"behaviour.state.never": "ORC shows this and never proposes it",
|
|
45
|
+
"behaviour.class.apply": "answers a config key at the learned rank. Your own config always wins",
|
|
46
|
+
"behaviour.class.suggest": "puts your usual option first. The question is still asked",
|
|
47
|
+
"behaviour.class.never": "shown only. A person makes this choice every time",
|
|
48
|
+
"behaviour.by.user": "you chose it",
|
|
49
|
+
"behaviour.by.ledger": "you said it earlier, in the ledger",
|
|
50
|
+
"behaviour.by.learned": "a habit you accepted chose the recommendation",
|
|
51
|
+
"behaviour.by.config": "a config key answered it",
|
|
52
|
+
"behaviour.by.default": "the shipped default answered it",
|
|
53
|
+
"behaviour.field.rule": "rule",
|
|
54
|
+
"behaviour.field.context": "context",
|
|
55
|
+
"behaviour.anyContext": "any context",
|
|
56
|
+
"behaviour.streakLabel": "last {n} answers: {top} top choice, {pre} pre-selected",
|
|
57
|
+
"behaviour.ringLabel": "{pct}% chose the top option",
|
|
58
|
+
"behaviour.ringTop": "top",
|
|
59
|
+
"behaviour.act.accept": "Make it my usual",
|
|
60
|
+
"behaviour.act.acceptTitle": "Accept habit {id}?",
|
|
61
|
+
"behaviour.act.acceptWhat": "ORC uses this from the next run. Your config file still wins. You can undo it with Forget on the same card.",
|
|
62
|
+
"behaviour.act.decline": "Not now",
|
|
63
|
+
"behaviour.act.declineTitle": "Not now?",
|
|
64
|
+
"behaviour.act.declineWhat": "The proposal can come back after 10 more answers and 14 days.",
|
|
65
|
+
"behaviour.act.never": "Never ask",
|
|
66
|
+
"behaviour.act.neverTitle": "Never ask again?",
|
|
67
|
+
"behaviour.act.neverWhat": "ORC keeps recording your answers but does not propose this again. Ask me again brings it back.",
|
|
68
|
+
"behaviour.act.forget": "Forget",
|
|
69
|
+
"behaviour.act.forgetTitle": "Forget habit {id}?",
|
|
70
|
+
"behaviour.act.forgetWhat": "The habit stops at once. Your config file or the shipped default answers again. Past answers stop counting.",
|
|
71
|
+
"behaviour.act.reset": "Ask me again",
|
|
72
|
+
"behaviour.act.resetTitle": "Ask me again?",
|
|
73
|
+
"behaviour.act.resetWhat": "This clears your no. The answers are kept, and the proposal can appear again.",
|
|
74
|
+
"behaviour.act.manual": "This has no button on purpose. A person types this command:",
|
|
75
|
+
"behaviour.confirmNote": "This runs one local command. It is free and you can undo it:",
|
|
76
|
+
"behaviour.runIt": "Run it",
|
|
77
|
+
"behaviour.done": "{id}: ran {command}.",
|
|
78
|
+
"behaviour.undoWhere": "The undo is on the same card.",
|
|
79
|
+
"behaviour.history": "History",
|
|
80
|
+
"behaviour.historyNote": "Every change, newest first, with the command that undoes it.",
|
|
81
|
+
"behaviour.rhythm.when": "When you run ORC",
|
|
82
|
+
"behaviour.rhythm.whenNote": "runs by weekday and hour, local time",
|
|
83
|
+
"behaviour.rhythm.heatLabel": "{n} runs by weekday and hour",
|
|
84
|
+
"behaviour.rhythm.cell": "{day} {hour}:00 — {n} runs",
|
|
85
|
+
"behaviour.rhythm.lanes": "Which lane you use",
|
|
86
|
+
"behaviour.rhythm.runs": "1 run",
|
|
87
|
+
"behaviour.rhythm.runsPlural": "{n} runs",
|
|
88
|
+
"behaviour.rhythm.qpr": "Questions per run",
|
|
89
|
+
"behaviour.rhythm.qprLabel": "questions per run, {from} to {to} over {n} weeks",
|
|
90
|
+
"behaviour.rhythm.qprNote": "Each habit you accept and each ledger answer removes a question. The goal is fewer questions, never fewer checks.",
|
|
91
|
+
"behaviour.rhythm.how": "How each answer was given",
|
|
92
|
+
"behaviour.rhythm.howLabel": "answers per week for {n} weeks, by how each was given",
|
|
93
|
+
"behaviour.day.mon": "Mon",
|
|
94
|
+
"behaviour.day.tue": "Tue",
|
|
95
|
+
"behaviour.day.wed": "Wed",
|
|
96
|
+
"behaviour.day.thu": "Thu",
|
|
97
|
+
"behaviour.day.fri": "Fri",
|
|
98
|
+
"behaviour.day.sat": "Sat",
|
|
99
|
+
"behaviour.day.sun": "Sun",
|
|
100
|
+
"behaviour.target": "target {v}",
|
|
101
|
+
"behaviour.g.title": "Gotchas",
|
|
102
|
+
"behaviour.g.none": "No gotchas recorded yet",
|
|
103
|
+
"behaviour.g.noneHint": "A repair loop that goes red to green writes the first one.",
|
|
104
|
+
"behaviour.g.sources": "Where the gotchas come from",
|
|
105
|
+
"behaviour.g.alwaysOn": "review learning is always on",
|
|
106
|
+
"behaviour.g.lastSync": "last sync {at}",
|
|
107
|
+
"behaviour.g.noSync": "no sync has run yet",
|
|
108
|
+
"behaviour.g.statusNote": "A candidate is seen but not proven. It needs 3 cases in 2 or more PRs, or your yes. Quiet means no case in 90 days. Orphaned means its scope matches no file now. Only a person deletes a gotcha.",
|
|
109
|
+
"behaviour.g.list": "Gotchas",
|
|
110
|
+
"behaviour.g.listNote": "the CLI sends them in its own order",
|
|
111
|
+
"behaviour.g.spark": "{n} hits in the last {w} weeks",
|
|
112
|
+
"behaviour.g.preview": "What the reviewer will see",
|
|
113
|
+
"behaviour.g.previewFree": "a free read",
|
|
114
|
+
"behaviour.g.previewHint": "Type the changed paths, separated by commas. This shows the exact card the reviewer gets.",
|
|
115
|
+
"behaviour.g.previewLabel": "changed paths",
|
|
116
|
+
"behaviour.g.previewEmpty": "Type a path to see the card.",
|
|
117
|
+
"behaviour.g.noCard": "No gotcha matches these paths ({n} known). The reviewer gets no gotcha card.",
|
|
118
|
+
"behaviour.q.cats": "Accepted findings by kind",
|
|
119
|
+
"behaviour.q.reviews": "1 review",
|
|
120
|
+
"behaviour.q.reviewsPlural": "{n} reviews",
|
|
121
|
+
"behaviour.q.projectReviews": "Project reviews: {n} (counted apart from ORC reviews)",
|
|
122
|
+
"behaviour.q.none": "No reviews in this window yet.",
|
|
123
|
+
"behaviour.q.trend": "Acceptance, last 12 reviews",
|
|
124
|
+
"behaviour.q.trendLabel": "acceptance over the last {n} reviews",
|
|
125
|
+
"behaviour.q.p3": "Advice-only findings per review (P3)",
|
|
126
|
+
"behaviour.q.p3Label": "advice-only findings over the last {n} reviews",
|
|
127
|
+
"behaviour.q.p3Note": "A kind below the target gets fewer advice-only lines. It never gets fewer P0 or P1 checks.",
|
|
128
|
+
"behaviour.q.sups": "Proposed suppressions",
|
|
129
|
+
"behaviour.q.waiting": "1 waiting",
|
|
130
|
+
"behaviour.q.waitingPlural": "{n} waiting",
|
|
131
|
+
"behaviour.q.noSups": "No suppression waits for your decision.",
|
|
132
|
+
"behaviour.q.disputed": "disputed 1 time",
|
|
133
|
+
"behaviour.q.disputedPlural": "disputed {n} times",
|
|
134
|
+
"behaviour.q.accept": "Accept",
|
|
135
|
+
"behaviour.q.acceptTitle": "Accept suppression {id}?",
|
|
136
|
+
"behaviour.q.acceptWhat": "The reviewer does not raise this advice here again. P0 and P1 findings are never suppressed.",
|
|
137
|
+
"behaviour.q.fixes": "Fixes after review",
|
|
138
|
+
"behaviour.q.fixCount": "1 fix",
|
|
139
|
+
"behaviour.q.fixCountPlural": "{n} fixes",
|
|
140
|
+
"behaviour.q.fixesNone": "No fix was recorded in this window. Record one with /orc-fix.",
|
|
141
|
+
"behaviour.q.fixesNote": "A fix is never counted as a review. Its author is who found the problem.",
|
|
142
|
+
"behaviour.q.cause.sonar": "Sonar",
|
|
143
|
+
"behaviour.q.cause.orc": "ORC defect",
|
|
144
|
+
"behaviour.q.cause.ai": "AI-code bug",
|
|
145
|
+
"behaviour.q.cause.other": "Other",
|
|
146
|
+
"behaviour.q.misses": "Missed by review",
|
|
147
|
+
"behaviour.q.missesNone": "No fix touched lines that an earlier review read.",
|
|
148
|
+
"behaviour.q.missedBy": "missed by {run}",
|
|
149
|
+
"behaviour.log.title": "Recent answers",
|
|
150
|
+
"behaviour.log.from": "from the ASK lines in your traces",
|
|
151
|
+
"behaviour.log.note": "learned means a habit you accepted chose the recommendation. The question was still shown.",
|
|
152
|
+
"behaviour.localOnly": "local only",
|
|
153
|
+
"behaviour.turnOff": "To stop learning, run:",
|
|
154
|
+
"behaviour.offCosts": "Off costs zero tokens. To start learning, run:",
|
|
155
|
+
"behaviour.railDot": "a habit waits for your decision"
|
|
156
|
+
}
|