@azure-id/orc 1.6.0 → 1.7.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.
Files changed (84) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/README-id.md +206 -125
  3. package/README.md +202 -74
  4. package/bin/cli.js +1595 -2
  5. package/bin/mockrun-catalog.js +272 -267
  6. package/bin/verify-contracts.js +4553 -4509
  7. package/bin/verify-package.js +6 -0
  8. package/bin/webui/api.js +26 -0
  9. package/bin/webui/app.html +10 -0
  10. package/bin/webui/css/panels/knowledge.css +30 -0
  11. package/bin/webui/css/panels/rules.css +145 -0
  12. package/bin/webui/fixtures/index.js +27 -0
  13. package/bin/webui/fixtures/rules.js +1002 -0
  14. package/bin/webui/fixtures/wiki-one.js +198 -0
  15. package/bin/webui/i18n/en/knowledge.json +127 -117
  16. package/bin/webui/i18n/en/nav.json +1 -0
  17. package/bin/webui/i18n/en/rules.json +55 -0
  18. package/bin/webui/i18n/id/knowledge.json +127 -117
  19. package/bin/webui/i18n/id/nav.json +1 -0
  20. package/bin/webui/i18n/id/rules.json +55 -0
  21. package/bin/webui/js/01-i18n.js +1 -0
  22. package/bin/webui/js/panels/knowledge.js +117 -1
  23. package/bin/webui/js/panels/rules.js +351 -0
  24. package/mock-run/INDEX.md +107 -106
  25. package/mock-run/orc-rules.md +254 -0
  26. package/package.json +1 -1
  27. package/templates/agents/orc-executor-haiku-4-5.md +9 -1
  28. package/templates/agents/orc-executor-opus-4-7-high.md +9 -1
  29. package/templates/agents/orc-executor-opus-4-7-med.md +9 -1
  30. package/templates/agents/orc-executor-opus-4-8-high.md +9 -1
  31. package/templates/agents/orc-executor-opus-5-high.md +9 -1
  32. package/templates/agents/orc-executor-opus-5-low.md +9 -1
  33. package/templates/agents/orc-executor-opus-5-med.md +9 -1
  34. package/templates/agents/orc-executor-sonnet-4-6-high.md +9 -1
  35. package/templates/agents/orc-executor-sonnet-4-6-med.md +9 -1
  36. package/templates/agents/orc-executor-sonnet-5-high.md +9 -1
  37. package/templates/commands/orc-rules.md +66 -0
  38. package/templates/commands/orc-wiki.md +23 -1
  39. package/templates/skills/_shared/README.md +61 -54
  40. package/templates/skills/_shared/extra-dispatch.md +1 -1
  41. package/templates/skills/_shared/phases/README.md +1 -0
  42. package/templates/skills/_shared/phases/execution.md +3 -1
  43. package/templates/skills/_shared/phases/preflight.md +20 -0
  44. package/templates/skills/_shared/phases/rules.md +159 -0
  45. package/templates/skills/_shared/return-validation.md +28 -0
  46. package/templates/skills/_shared/rules/CREDITS.md +141 -0
  47. package/templates/skills/_shared/rules/INDEX.md +107 -0
  48. package/templates/skills/_shared/rules/code.md +229 -0
  49. package/templates/skills/_shared/rules/delivery.md +114 -0
  50. package/templates/skills/_shared/rules/ui.md +139 -0
  51. package/templates/skills/_shared/rules/writing.md +223 -0
  52. package/templates/skills/context-combiner/SKILL.md +9 -1
  53. package/templates/skills/orc/SKILL.md +8 -1
  54. package/templates/skills/orc/references/preflight-report.md +6 -0
  55. package/templates/skills/orc/subskills/orc-execution/SKILL.md +2 -1
  56. package/templates/skills/orc/subskills/orc-execution/core.md +9 -1
  57. package/templates/skills/orc-aftermath/SKILL.md +7 -0
  58. package/templates/skills/orc-analyze/SKILL.md +7 -0
  59. package/templates/skills/orc-analyze-mini/SKILL.md +9 -1
  60. package/templates/skills/orc-boundary/SKILL.md +7 -0
  61. package/templates/skills/orc-brainstorm/SKILL.md +7 -0
  62. package/templates/skills/orc-budget/SKILL.md +7 -0
  63. package/templates/skills/orc-challenge/SKILL.md +7 -0
  64. package/templates/skills/orc-claude/SKILL.md +7 -0
  65. package/templates/skills/orc-diy/SKILL.md +7 -0
  66. package/templates/skills/orc-explain/SKILL.md +7 -0
  67. package/templates/skills/orc-export/SKILL.md +7 -0
  68. package/templates/skills/orc-fast/SKILL.md +9 -2
  69. package/templates/skills/orc-grill/SKILL.md +7 -0
  70. package/templates/skills/orc-handoff/SKILL.md +9 -1
  71. package/templates/skills/orc-learn/SKILL.md +7 -0
  72. package/templates/skills/orc-mini/SKILL.md +10 -3
  73. package/templates/skills/orc-pact/SKILL.md +7 -0
  74. package/templates/skills/orc-poly/SKILL.md +7 -0
  75. package/templates/skills/orc-pr-driver/SKILL.md +9 -1
  76. package/templates/skills/orc-pr-setup/SKILL.md +9 -1
  77. package/templates/skills/orc-quick/SKILL.md +9 -1
  78. package/templates/skills/orc-retro/SKILL.md +7 -0
  79. package/templates/skills/orc-route/SKILL.md +7 -0
  80. package/templates/skills/orc-test/SKILL.md +7 -0
  81. package/templates/skills/orc-verify/SKILL.md +7 -0
  82. package/templates/skills/orc-wiki/SKILL.md +15 -0
  83. package/templates/skills/orc-wiki/references/partial-refresh.md +68 -0
  84. package/templates/skills/orc-wiki/references/phases/phase-0.md +15 -1
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ /**
3
+ * fixtures/wiki-one.js — the wiki's one-doc-at-a-time probes.
4
+ *
5
+ * CAPTURED FROM THE REAL CLI against a throwaway two-doc wiki with one
6
+ * undocumented area, then the paths rewritten. Three payloads, because the
7
+ * three verdicts are three different cards and only one of them is reachable
8
+ * on any given repo:
9
+ *
10
+ * wikiResolveNew nothing covers it — with a proposed scope
11
+ * wikiResolveMatch one doc clearly does — routes to an update
12
+ * wikiResolveAmbiguous two cover it about equally — a QUESTION, never a
13
+ * guess, and the card offers no command until a human
14
+ * picks one
15
+ *
16
+ * `wikiRefs` carries a RESERVED row and three behind surfaces, because a sweep
17
+ * where everything is clean renders six identical green lines and teaches
18
+ * nothing about the state it exists to show.
19
+ */
20
+
21
+ module.exports.wikiResolveNew = {
22
+ "ok": true,
23
+ "topic": "remittance",
24
+ "terms": [
25
+ "remittance"
26
+ ],
27
+ "verdict": "new",
28
+ "match": null,
29
+ "candidates": [],
30
+ "suggested_slug": "remittance",
31
+ "suggested_covers": [
32
+ {
33
+ "glob": "src/remittance/**",
34
+ "matches": 3
35
+ }
36
+ ],
37
+ "next": "/orc-wiki add \"remittance\"",
38
+ "note": "the suggested covers are a STARTING POINT derived from path names, never an answer — the user corrects them before anything is scanned."
39
+ };
40
+
41
+ module.exports.wikiResolveMatch = {
42
+ "ok": true,
43
+ "topic": "login session",
44
+ "terms": [
45
+ "login",
46
+ "session"
47
+ ],
48
+ "verdict": "match",
49
+ "match": {
50
+ "file": "wiki/orc-feature-auth-overview.md",
51
+ "area": "auth",
52
+ "title": "auth Overview",
53
+ "keywords": [
54
+ "login",
55
+ "session",
56
+ "token"
57
+ ],
58
+ "covers": [
59
+ "src/auth/**"
60
+ ],
61
+ "score": 8,
62
+ "why": [
63
+ "login in keywords",
64
+ "session in keywords"
65
+ ]
66
+ },
67
+ "candidates": [
68
+ {
69
+ "file": "wiki/orc-feature-auth-overview.md",
70
+ "area": "auth",
71
+ "title": "auth Overview",
72
+ "keywords": [
73
+ "login",
74
+ "session",
75
+ "token"
76
+ ],
77
+ "covers": [
78
+ "src/auth/**"
79
+ ],
80
+ "score": 8,
81
+ "why": [
82
+ "login in keywords",
83
+ "session in keywords"
84
+ ]
85
+ }
86
+ ],
87
+ "suggested_slug": "login-session",
88
+ "suggested_covers": [],
89
+ "next": "/orc-wiki update wiki/orc-feature-auth-overview.md",
90
+ "note": "the suggested covers are a STARTING POINT derived from path names, never an answer — the user corrects them before anything is scanned."
91
+ };
92
+
93
+ module.exports.wikiRefs = {
94
+ "ok": true,
95
+ "mode": "check",
96
+ "registration": "drifted",
97
+ "items": [
98
+ {
99
+ "id": "registration",
100
+ "state": "drifted",
101
+ "what": "registration is DRIFTED",
102
+ "fix": "orc wiki sync",
103
+ "cost": "free"
104
+ },
105
+ {
106
+ "id": "reserved",
107
+ "state": "outstanding",
108
+ "what": "1 reserved row with no scan behind it: wiki/orc-feature-remittance-overview.md",
109
+ "fix": "/orc-wiki update wiki/orc-feature-remittance-overview.md",
110
+ "cost": "money"
111
+ },
112
+ {
113
+ "id": "orientation",
114
+ "state": "missing",
115
+ "what": "wiki/orc-orientation.md does not exist — it is the page every consumer reads first",
116
+ "fix": "/orc-wiki refresh wiki/orc-orientation.md",
117
+ "cost": "free"
118
+ },
119
+ {
120
+ "id": "architecture",
121
+ "state": "absent",
122
+ "what": "no architecture overview — optional, and a small wiki may not need one",
123
+ "fix": null,
124
+ "cost": "free"
125
+ },
126
+ {
127
+ "id": "claude-md",
128
+ "state": "missing",
129
+ "what": "no CLAUDE.md — future sessions are never told the wiki exists",
130
+ "fix": "/orc-wiki (the pointer-injection step)",
131
+ "cost": "free"
132
+ },
133
+ {
134
+ "id": "crosslink",
135
+ "state": "clean",
136
+ "what": "every crosslink tag's anchor still exists",
137
+ "fix": null,
138
+ "cost": "free"
139
+ }
140
+ ],
141
+ "open": [
142
+ "registration",
143
+ "reserved",
144
+ "orientation",
145
+ "claude-md"
146
+ ],
147
+ "repaired": [],
148
+ "clean": false,
149
+ "note": "only registration is repaired here, because `orc wiki sync` is free and already the single writer of wiki-meta.json and INDEX.md. Everything else is REPORTED with its command — a sweep that silently regenerated prose would be spending money nobody asked it to spend."
150
+ };
151
+
152
+ module.exports.wikiResolveAmbiguous = {
153
+ "ok": true,
154
+ "topic": "invoice",
155
+ "terms": [
156
+ "invoice"
157
+ ],
158
+ "verdict": "ambiguous",
159
+ "match": null,
160
+ "candidates": [
161
+ {
162
+ "file": "wiki/orc-feature-billing-overview.md",
163
+ "area": "billing",
164
+ "title": "billing Overview",
165
+ "keywords": [
166
+ "invoice",
167
+ "charge"
168
+ ],
169
+ "covers": [
170
+ "src/billing/**"
171
+ ],
172
+ "score": 4,
173
+ "why": [
174
+ "invoice in keywords"
175
+ ]
176
+ },
177
+ {
178
+ "file": "wiki/orc-feature-payments-overview.md",
179
+ "area": "payments",
180
+ "title": "payments Overview",
181
+ "keywords": [
182
+ "invoice",
183
+ "refund"
184
+ ],
185
+ "covers": [
186
+ "src/billing/**"
187
+ ],
188
+ "score": 4,
189
+ "why": [
190
+ "invoice in keywords"
191
+ ]
192
+ }
193
+ ],
194
+ "suggested_slug": "login-session",
195
+ "suggested_covers": [],
196
+ "next": "ask which doc this belongs to — two or more cover it about equally",
197
+ "note": "the suggested covers are a STARTING POINT derived from path names, never an answer — the user corrects them before anything is scanned."
198
+ };
@@ -1,141 +1,151 @@
1
1
  {
2
- "knowledge.title": "Knowledge",
3
- "knowledge.sub": "What ORC already knows about this repo: the wiki, cached code-patterns, and repair memory.",
4
- "knowledge.wiki": "Wiki",
5
- "knowledge.wiki.none": "No wiki yet.",
6
- "knowledge.wiki.noneHint": "Run /orc-wiki in Claude Code to build one. This panel never scans — that costs a model.",
7
- "knowledge.wiki.unregistered": "The wiki is {state} — nothing can read it until it is registered.",
8
- "knowledge.wiki.syncHint": "`orc wiki sync` fixes this instantly: registration is derived from the docs, so it is free and never a re-scan.",
9
- "knowledge.wiki.freshNote": "Freshness is coverage-relative: a doc is stale only when commits since its OWN anchor touched files IT covers.",
10
- "knowledge.wiki.why": "why: {reason}",
11
- "knowledge.impact.title": "Refresh scope (orc wiki impact)",
12
- "knowledge.impact.counts": "{registered} registered · {touched} touched · {structural} structural · {pct}% affected (threshold {threshold}%)",
2
+ "knowledge.archive.empty": "Nothing has been archived yet.",
3
+ "knowledge.archive.load": "Show the archive",
4
+ "knowledge.archive.note": "Nothing is ever deleted here. Entries pushed out by the limit are moved, and they keep their id forever.",
5
+ "knowledge.archive.title": "Archive",
6
+ "knowledge.blind.none": "Nothing changed that no doc covers.",
7
+ "knowledge.blind.note": "These files changed and no doc claims them. That is a gap in what is written down, not rot in what already exists — so it never makes the wiki stale on its own.",
8
+ "knowledge.blind.title": "Changed, and no doc covers it",
9
+ "knowledge.coverage.col.dir": "Folder",
10
+ "knowledge.coverage.col.files": "Files",
11
+ "knowledge.coverage.col.last": "Last touched",
12
+ "knowledge.coverage.na": "Cannot be measured here.",
13
+ "knowledge.coverage.naHint": "It needs a registered wiki and a git repository.",
14
+ "knowledge.coverage.notATarget": "This is a report, not a target. There is no threshold, nothing anywhere reacts to it, and a repo that deliberately writes about four subsystems out of forty is not broken.",
15
+ "knowledge.coverage.sub": "{covered} of {tracked} tracked files are covered by at least one doc",
16
+ "knowledge.coverage.title": "How much of the code is written about",
17
+ "knowledge.coverage.uncovered": "Not covered",
18
+ "knowledge.coverage.uncoveredNote": "Grouped by folder and biggest first, because \"240 files, all in vendor\" and \"12 files, all in payments\" are opposite situations.",
19
+ "knowledge.debt.none": "No refresh owed.",
20
+ "knowledge.debt.nothingBroken": "Nothing is broken. These pages are behind, not wrong - and clearing the top of the list is far cheaper than a full re-scan.",
21
+ "knowledge.debt.oldest": "oldest 1 commit behind",
22
+ "knowledge.debt.oldestPlural": "oldest {n} commits behind",
23
+ "knowledge.debt.pending": "1 page pending",
24
+ "knowledge.debt.pendingPlural": "{n} pages pending",
25
+ "knowledge.docs.col.covers": "Covers",
26
+ "knowledge.docs.col.distance": "Behind",
27
+ "knowledge.docs.col.doc": "Doc",
28
+ "knowledge.docs.col.tags": "Tags",
29
+ "knowledge.docs.col.tier": "State",
30
+ "knowledge.docs.col.used": "Used",
31
+ "knowledge.docs.field.coveredFiles": "Files it names",
32
+ "knowledge.docs.field.covers": "Covers",
33
+ "knowledge.docs.field.lastUsed": "Last used",
34
+ "knowledge.docs.field.scanned": "Scanned at commit",
35
+ "knowledge.docs.field.title": "Title",
36
+ "knowledge.docs.field.type": "Type",
37
+ "knowledge.docs.none": "Nothing registered.",
38
+ "knowledge.docs.noneHint": "Docs on disk have to be registered before anything can read them, and registering is free and instant.",
39
+ "knowledge.docs.note": "Every registered doc, in the order the CLI returned them. Open a row to see what it covers and what it was scanned against. Each distance is measured against that doc's own files, so a doc about payments does not age because the README changed.",
40
+ "knowledge.docs.title": "What is in the wiki",
41
+ "knowledge.field.anchor": "anchor",
42
+ "knowledge.field.blind": "structural blind spots",
43
+ "knowledge.field.distance": "distance",
44
+ "knowledge.field.distanceValue": "{n} commits on the worst doc's covered files",
45
+ "knowledge.field.docs": "docs",
46
+ "knowledge.field.edges": "edges",
47
+ "knowledge.field.lastScan": "last scan",
48
+ "knowledge.field.tags": "crosslink tags",
49
+ "knowledge.field.unmeasurable": "unmeasurable",
50
+ "knowledge.field.worst": "Oldest doc (this is what sets the tier)",
51
+ "knowledge.gotchas.headroom": "{n} of {max} kept",
52
+ "knowledge.gotchas.none": "Nothing recorded yet.",
53
+ "knowledge.gotchas.noneHint": "A repair loop that goes red → green writes the first one.",
54
+ "knowledge.gotchas.note": "One entry per project-specific failure a repair already solved. Pruning ARCHIVES the low-value tail — it never deletes.",
55
+ "knowledge.gotchas.preview": "Show what would be archived",
56
+ "knowledge.gotchas.prune": "Prune to gotchas_max",
57
+ "knowledge.gotchas.pruneNone": "Nothing would be archived — you are under the limit.",
58
+ "knowledge.gotchas.pruneWould": "{n} entry(ies) would be moved to the archive:",
59
+ "knowledge.gotchas.title": "Repair memory (gotchas)",
13
60
  "knowledge.impact.blind": "Structural blind spot — changed files no doc covers:",
61
+ "knowledge.impact.col.detail": "Detail",
14
62
  "knowledge.impact.col.doc": "Doc",
15
63
  "knowledge.impact.col.state": "State",
16
- "knowledge.impact.col.detail": "Detail",
17
- "knowledge.patterns.title": "Code patterns",
18
- "knowledge.patterns.note": "Reconciled per-language conventions, injected literally into executor slices. Project conventions win; security and correctness invariants are always kept.",
64
+ "knowledge.impact.counts": "{registered} registered · {touched} touched · {structural} structural · {pct}% affected (threshold {threshold}%)",
65
+ "knowledge.impact.title": "Refresh scope (orc wiki impact)",
66
+ "knowledge.one.cannot": "Could not resolve that topic.",
67
+ "knowledge.one.files": "1 file",
68
+ "knowledge.one.filesPlural": "{n} files",
69
+ "knowledge.one.lead": "Update one doc, or add one topic, without re-planning a single other area. Both probes below are free and neither scans anything. The refresh or the add that follows is a lane, so it is a command to copy rather than a button.",
70
+ "knowledge.one.next": "Run this in Claude Code. It costs model tokens, so nothing here starts it for you.",
71
+ "knowledge.one.placeholder": "A topic, in your own words — \"the remittance feature\"",
72
+ "knowledge.one.proposed": "A starting point, from path names only. Correct it before anything is scanned.",
73
+ "knowledge.one.resolve": "Is it in the wiki?",
74
+ "knowledge.one.sweep": "Derived references, checked",
75
+ "knowledge.one.title": "One doc at a time",
76
+ "knowledge.orientation.missing": "No orientation doc. Every reader opens it first, so this one is worth having — and regenerating it is free.",
77
+ "knowledge.orientation.present": "Orientation doc present: {file}. Every reader opens it first.",
78
+ "knowledge.patterns.conflicts": "Where the project and the playbook disagree",
79
+ "knowledge.patterns.field.codified": "Written on",
80
+ "knowledge.patterns.field.counts": "Conventions · invariants",
81
+ "knowledge.patterns.field.playbook": "Playbook it was reconciled against",
82
+ "knowledge.patterns.field.size": "Lines · bytes",
83
+ "knowledge.patterns.field.source": "From commit",
84
+ "knowledge.patterns.inspect": "What is in it",
85
+ "knowledge.patterns.known": "Known language keys: {list}",
86
+ "knowledge.patterns.literalNote": "This exact text is put in front of every agent that writes code here. If you cannot read it, you cannot trust it.",
19
87
  "knowledge.patterns.none": "No cached patterns.",
20
88
  "knowledge.patterns.noneHint": "Run /orc-pattern in Claude Code to codify one. Codifying costs a model, so this panel never does it.",
21
- "knowledge.patterns.known": "Known language keys: {list}",
22
- "knowledge.gotchas.title": "Repair memory (gotchas)",
23
- "knowledge.gotchas.note": "One entry per project-specific failure a repair already solved. Pruning ARCHIVES the low-value tail — it never deletes.",
24
- "knowledge.gotchas.none": "Nothing recorded yet.",
25
- "knowledge.gotchas.noneHint": "A repair loop that goes red → green writes the first one.",
26
- "knowledge.gotchas.prune": "Prune to gotchas_max",
27
- "knowledge.field.docs": "docs",
28
- "knowledge.field.lastScan": "last scan",
29
- "knowledge.field.distance": "distance",
30
- "knowledge.field.distanceValue": "{n} commits on the worst doc's covered files",
31
- "knowledge.field.unmeasurable": "unmeasurable",
32
- "knowledge.field.anchor": "anchor",
33
- "knowledge.field.edges": "edges",
34
- "knowledge.field.tags": "crosslink tags",
35
- "knowledge.field.blind": "structural blind spots",
89
+ "knowledge.patterns.note": "Reconciled per-language conventions, injected literally into executor slices. Project conventions win; security and correctness invariants are always kept.",
90
+ "knowledge.patterns.paidWhy": "Learning a language's conventions reads a lot of your code, so it costs model tokens — a command to copy, not a button.",
91
+ "knowledge.patterns.title": "Code patterns",
92
+ "knowledge.patterns.unheadered": "This file has no readable header, so there is no date to show. A date is never guessed from when the file was last saved.",
93
+ "knowledge.peers.col.repo": "Repo",
94
+ "knowledge.peers.col.state": "State",
95
+ "knowledge.peers.col.tags": "Tags it offers",
96
+ "knowledge.peers.col.tier": "Freshness",
97
+ "knowledge.peers.none": "No repos are linked yet.",
98
+ "knowledge.peers.note": "Linked repos, read-only. Every word here is what the other repo reported — this side never recalculates it. Editing the links happens on Crosslink; there is one picture of the boundary, and it lives there.",
99
+ "knowledge.peers.open": "Open Crosslink",
100
+ "knowledge.peers.title": "What ORC knows from next door",
36
101
  "knowledge.plan": "Refresh plan",
37
- "knowledge.plan.na": "Nothing to plan",
38
- "knowledge.plan.naHint": "Build a wiki first, or register the pages already on disk - both are free.",
39
102
  "knowledge.plan.clean": "Every page still covers the current code. Nothing to refresh.",
40
- "knowledge.debt.pending": "1 page pending",
41
- "knowledge.debt.pendingPlural": "{n} pages pending",
42
- "knowledge.debt.oldest": "oldest 1 commit behind",
43
- "knowledge.debt.oldestPlural": "oldest {n} commits behind",
44
- "knowledge.debt.nothingBroken": "Nothing is broken. These pages are behind, not wrong - and clearing the top of the list is far cheaper than a full re-scan.",
45
- "knowledge.debt.none": "No refresh owed.",
46
- "knowledge.plan.freeFirst": "Free repairs first - never pay for something a free step fixes",
47
- "knowledge.plan.free": "free",
103
+ "knowledge.plan.col.delta": "changed",
48
104
  "knowledge.plan.col.doc": "page",
49
105
  "knowledge.plan.col.state": "state",
50
- "knowledge.plan.col.delta": "changed",
51
- "knowledge.plan.col.used": "used",
52
106
  "knowledge.plan.col.tier": "scan",
53
107
  "knowledge.plan.col.tokens": "est. tokens",
54
108
  "knowledge.plan.col.usd": "est. $",
109
+ "knowledge.plan.col.used": "used",
110
+ "knowledge.plan.free": "free",
111
+ "knowledge.plan.freeFirst": "Free repairs first - never pay for something a free step fixes",
55
112
  "knowledge.plan.gone": "A file this page documents is gone: {files}",
56
- "knowledge.plan.retireHint": "No run has used this page in the last {n}. Retiring it may be better value than refreshing it.",
113
+ "knowledge.plan.na": "Nothing to plan",
114
+ "knowledge.plan.naHint": "Build a wiki first, or register the pages already on disk - both are free.",
57
115
  "knowledge.plan.noEstimate": "No cost estimate yet - there is not enough history to measure one, and none will be invented.",
58
- "knowledge.plan.tierNote": "Scan mode {mode}: {deep} deep, {light} light. A cheaper scan is always shown, never a quiet substitution.",
59
116
  "knowledge.plan.refreshWhy": "A refresh re-reads your code with a model, so it costs money. That is why it is a command you run, not a button here.",
117
+ "knowledge.plan.retireHint": "No run has used this page in the last {n}. Retiring it may be better value than refreshing it.",
118
+ "knowledge.plan.tierNote": "Scan mode {mode}: {deep} deep, {light} light. A cheaper scan is always shown, never a quiet substitution.",
119
+ "knowledge.reveal": "Show the text",
120
+ "knowledge.strip.blind": "blind",
121
+ "knowledge.strip.covered": "covered",
122
+ "knowledge.strip.docs": "docs",
123
+ "knowledge.strip.gotchas": "repair notes",
124
+ "knowledge.strip.patterns": "patterns",
125
+ "knowledge.strip.pending": "pending",
126
+ "knowledge.strip.wiki": "wiki",
127
+ "knowledge.sub": "What ORC already knows about this repo: the wiki, cached code-patterns, and repair memory.",
60
128
  "knowledge.syncFree": "Register pages (free)",
61
129
  "knowledge.syncOk": "Pages registered",
130
+ "knowledge.tab.coverage": "Coverage",
131
+ "knowledge.tab.memory": "Memory",
132
+ "knowledge.tab.patterns": "Code patterns",
133
+ "knowledge.tab.peers": "Peers",
134
+ "knowledge.tab.wiki": "Wiki",
135
+ "knowledge.title": "Knowledge",
62
136
  "knowledge.usage": "Which pages get used",
63
- "knowledge.usage.rebuild": "Recount",
64
- "knowledge.usage.rebuilt": "Recounted from the traces",
65
- "knowledge.usage.registered": "{n} registered",
66
137
  "knowledge.usage.active": "{n} in active use",
67
138
  "knowledge.usage.never": "{n} unused in {runs} runs",
68
139
  "knowledge.usage.neverUsed": "never",
69
140
  "knowledge.usage.note": "Counted from what runs actually put into a slice. A page nobody reads still costs money on every full refresh, and context room whenever it is included.",
70
- "knowledge.tab.wiki": "Wiki",
71
- "knowledge.tab.coverage": "Coverage",
72
- "knowledge.tab.patterns": "Code patterns",
73
- "knowledge.tab.memory": "Memory",
74
- "knowledge.tab.peers": "Peers",
75
- "knowledge.strip.wiki": "wiki",
76
- "knowledge.strip.docs": "docs",
77
- "knowledge.strip.covered": "covered",
78
- "knowledge.strip.blind": "blind",
79
- "knowledge.strip.pending": "pending",
80
- "knowledge.strip.patterns": "patterns",
81
- "knowledge.strip.gotchas": "repair notes",
82
- "knowledge.field.worst": "Oldest doc (this is what sets the tier)",
83
- "knowledge.orientation.present": "Orientation doc present: {file}. Every reader opens it first.",
84
- "knowledge.orientation.missing": "No orientation doc. Every reader opens it first, so this one is worth having — and regenerating it is free.",
85
- "knowledge.docs.title": "What is in the wiki",
86
- "knowledge.docs.note": "Every registered doc, in the order the CLI returned them. Open a row to see what it covers and what it was scanned against. Each distance is measured against that doc's own files, so a doc about payments does not age because the README changed.",
87
- "knowledge.docs.none": "Nothing registered.",
88
- "knowledge.docs.noneHint": "Docs on disk have to be registered before anything can read them, and registering is free and instant.",
89
- "knowledge.docs.col.doc": "Doc",
90
- "knowledge.docs.col.tier": "State",
91
- "knowledge.docs.col.distance": "Behind",
92
- "knowledge.docs.col.covers": "Covers",
93
- "knowledge.docs.col.used": "Used",
94
- "knowledge.docs.col.tags": "Tags",
95
- "knowledge.docs.field.title": "Title",
96
- "knowledge.docs.field.type": "Type",
97
- "knowledge.docs.field.scanned": "Scanned at commit",
98
- "knowledge.docs.field.covers": "Covers",
99
- "knowledge.docs.field.coveredFiles": "Files it names",
100
- "knowledge.docs.field.lastUsed": "Last used",
101
- "knowledge.reveal": "Show the text",
102
- "knowledge.coverage.title": "How much of the code is written about",
103
- "knowledge.coverage.sub": "{covered} of {tracked} tracked files are covered by at least one doc",
104
- "knowledge.coverage.notATarget": "This is a report, not a target. There is no threshold, nothing anywhere reacts to it, and a repo that deliberately writes about four subsystems out of forty is not broken.",
105
- "knowledge.coverage.na": "Cannot be measured here.",
106
- "knowledge.coverage.naHint": "It needs a registered wiki and a git repository.",
107
- "knowledge.coverage.uncovered": "Not covered",
108
- "knowledge.coverage.uncoveredNote": "Grouped by folder and biggest first, because \"240 files, all in vendor\" and \"12 files, all in payments\" are opposite situations.",
109
- "knowledge.coverage.col.dir": "Folder",
110
- "knowledge.coverage.col.files": "Files",
111
- "knowledge.coverage.col.last": "Last touched",
112
- "knowledge.blind.title": "Changed, and no doc covers it",
113
- "knowledge.blind.none": "Nothing changed that no doc covers.",
114
- "knowledge.blind.note": "These files changed and no doc claims them. That is a gap in what is written down, not rot in what already exists — so it never makes the wiki stale on its own.",
115
- "knowledge.patterns.inspect": "What is in it",
116
- "knowledge.patterns.field.codified": "Written on",
117
- "knowledge.patterns.field.source": "From commit",
118
- "knowledge.patterns.field.playbook": "Playbook it was reconciled against",
119
- "knowledge.patterns.field.size": "Lines · bytes",
120
- "knowledge.patterns.field.counts": "Conventions · invariants",
121
- "knowledge.patterns.unheadered": "This file has no readable header, so there is no date to show. A date is never guessed from when the file was last saved.",
122
- "knowledge.patterns.conflicts": "Where the project and the playbook disagree",
123
- "knowledge.patterns.literalNote": "This exact text is put in front of every agent that writes code here. If you cannot read it, you cannot trust it.",
124
- "knowledge.patterns.paidWhy": "Learning a language's conventions reads a lot of your code, so it costs model tokens — a command to copy, not a button.",
125
- "knowledge.gotchas.headroom": "{n} of {max} kept",
126
- "knowledge.gotchas.preview": "Show what would be archived",
127
- "knowledge.gotchas.pruneWould": "{n} entry(ies) would be moved to the archive:",
128
- "knowledge.gotchas.pruneNone": "Nothing would be archived — you are under the limit.",
129
- "knowledge.archive.title": "Archive",
130
- "knowledge.archive.note": "Nothing is ever deleted here. Entries pushed out by the limit are moved, and they keep their id forever.",
131
- "knowledge.archive.load": "Show the archive",
132
- "knowledge.archive.empty": "Nothing has been archived yet.",
133
- "knowledge.peers.title": "What ORC knows from next door",
134
- "knowledge.peers.note": "Linked repos, read-only. Every word here is what the other repo reported — this side never recalculates it. Editing the links happens on Crosslink; there is one picture of the boundary, and it lives there.",
135
- "knowledge.peers.open": "Open Crosslink",
136
- "knowledge.peers.none": "No repos are linked yet.",
137
- "knowledge.peers.col.repo": "Repo",
138
- "knowledge.peers.col.state": "State",
139
- "knowledge.peers.col.tier": "Freshness",
140
- "knowledge.peers.col.tags": "Tags it offers"
141
+ "knowledge.usage.rebuild": "Recount",
142
+ "knowledge.usage.rebuilt": "Recounted from the traces",
143
+ "knowledge.usage.registered": "{n} registered",
144
+ "knowledge.wiki": "Wiki",
145
+ "knowledge.wiki.freshNote": "Freshness is coverage-relative: a doc is stale only when commits since its OWN anchor touched files IT covers.",
146
+ "knowledge.wiki.none": "No wiki yet.",
147
+ "knowledge.wiki.noneHint": "Run /orc-wiki in Claude Code to build one. This panel never scans — that costs a model.",
148
+ "knowledge.wiki.syncHint": "`orc wiki sync` fixes this instantly: registration is derived from the docs, so it is free and never a re-scan.",
149
+ "knowledge.wiki.unregistered": "The wiki is {state} — nothing can read it until it is registered.",
150
+ "knowledge.wiki.why": "why: {reason}"
141
151
  }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "nav.overview": "Overview",
3
3
  "nav.settings": "Settings",
4
+ "nav.rules": "Rules",
4
5
  "nav.lanes": "Lanes",
5
6
  "nav.runs": "Runs",
6
7
  "nav.knowledge": "Knowledge",
@@ -0,0 +1,55 @@
1
+ {
2
+ "rules.title": "Rules",
3
+ "rules.sub": "The anti-slop rules. ORC ships 65 of them, read-only. Yours win.",
4
+ "rules.unavailable": "Could not read the rules",
5
+ "rules.unavailableHint": "`orc rules --json` returned nothing this panel could parse. Run it in a terminal to see what it said.",
6
+
7
+ "rules.precedence.title": "Precedence",
8
+ "rules.precedence.lead": "Three layers, and the order never changes.",
9
+ "rules.precedence.beats": "beats {what}",
10
+ "rules.precedence.houseScope": "The house rules are CODE and behaviour only. They govern how a change is made — surgical, simple, honest. They say nothing about the words an agent writes, so they never overrule a writing rule.",
11
+
12
+ "rules.overrides.head": "1 ORC rule your rules replaced",
13
+ "rules.overrides.headPlural": "{n} ORC rules your rules replaced",
14
+ "rules.overrides.unknownId": "not a known ORC rule id",
15
+
16
+ "rules.user.title": "Your rules",
17
+ "rules.user.wins": "This project's own standing instructions. They are read BEFORE ORC's rules, and they win wherever the two disagree.",
18
+ "rules.user.howto": "Three headings — P0, P1, P2 — and as much text under each as you want. The whole block is handed to every agent verbatim, so write it the way you would say it. Anything above the first heading is a note to yourself and is never dispatched.",
19
+ "rules.user.turnOff": "To switch an ORC rule off, name its id in a rule of your own: \"OSW-13: em dashes are our house voice.\" The override is then counted, printed at preflight, and stated inside every slice.",
20
+ "rules.user.staged": "your rules, rewritten",
21
+ "rules.user.refresh": "Reload from disk",
22
+
23
+ "rules.packs.title": "ORC rules",
24
+ "rules.packs.readOnly": "read-only",
25
+ "rules.packs.lead": "{n} rules in four packs, shipped with ORC. Adapted, with credit, from other people's work — see below.",
26
+ "rules.packs.filter": "Filter by id, title or text",
27
+ "rules.packs.tier": "Tier",
28
+ "rules.packs.allTiers": "All tiers",
29
+ "rules.packs.rules": "1 rule",
30
+ "rules.packs.rulesPlural": "{n} rules",
31
+ "rules.packs.off": "off here",
32
+ "rules.packs.showing": "Showing {shown} of {total}.",
33
+ "rules.packs.noMatch": "No rule matches that filter.",
34
+ "rules.packs.changeHow": "These change with `orc update` and with nothing else. To change what ORC writes in this project, write your own rule above.",
35
+ "rules.packs.englishOnly": "The rule text stays English in every language. It is shipped content that rule ids point at, and a translated rule would be a different rule.",
36
+
37
+ "rules.credits.title": "Credits",
38
+ "rules.credits.lead": "These rules are other people's work. Each source is named with its licence and what ORC took from it.",
39
+ "rules.credits.readOn": "read {date}",
40
+ "rules.credits.none": "No credit data — run `orc update`.",
41
+
42
+ "rules.lint.title": "Lint",
43
+ "rules.lint.lead": "A free check, zero tokens. It reads only what a string match can prove, and it always says how many rules it could not check. It reports; it never fixes.",
44
+ "rules.lint.pathPlaceholder": "A file or folder, relative to the project",
45
+ "rules.lint.run": "Run the lint",
46
+ "rules.lint.files": "1 file",
47
+ "rules.lint.filesPlural": "{n} files",
48
+ "rules.lint.findings": "1 finding",
49
+ "rules.lint.findingsPlural": "{n} findings",
50
+ "rules.lint.clean": "Clean, on the rules a matcher can prove.",
51
+ "rules.lint.nothing": "Nothing lintable there.",
52
+ "rules.lint.suppressed": "Off here, because your own rules name these ids: {ids}",
53
+ "rules.lint.skipped": "1 file skipped",
54
+ "rules.lint.skippedPlural": "{n} files skipped"
55
+ }