@azure-id/orc 1.5.0 → 1.7.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 +185 -0
- package/README-id.md +206 -125
- package/README.md +270 -57
- package/bin/cli.js +1676 -2
- package/bin/mockrun-catalog.js +272 -267
- package/bin/verify-contracts.js +4485 -4449
- package/bin/verify-package.js +9 -0
- package/bin/webui/api.js +26 -0
- package/bin/webui/app.html +10 -0
- package/bin/webui/css/panels/knowledge.css +30 -0
- package/bin/webui/css/panels/rules.css +145 -0
- package/bin/webui/fixtures/index.js +27 -0
- package/bin/webui/fixtures/rules.js +1002 -0
- package/bin/webui/fixtures/wiki-one.js +198 -0
- package/bin/webui/i18n/en/knowledge.json +127 -117
- package/bin/webui/i18n/en/nav.json +1 -0
- package/bin/webui/i18n/en/overview.json +1 -0
- package/bin/webui/i18n/en/rules.json +55 -0
- package/bin/webui/i18n/id/knowledge.json +127 -117
- package/bin/webui/i18n/id/nav.json +1 -0
- package/bin/webui/i18n/id/overview.json +1 -0
- package/bin/webui/i18n/id/rules.json +55 -0
- package/bin/webui/js/01-i18n.js +1 -0
- package/bin/webui/js/panels/knowledge.js +117 -1
- package/bin/webui/js/panels/overview.js +8 -0
- package/bin/webui/js/panels/rules.js +351 -0
- package/mock-run/INDEX.md +107 -106
- package/mock-run/orc-rules.md +254 -0
- package/package.json +1 -1
- package/templates/commands/orc-rules.md +66 -0
- package/templates/commands/orc-wiki.md +23 -1
- package/templates/hooks/README.md +110 -1
- package/templates/hooks/orc-read-gate.js +279 -0
- package/templates/skills/_shared/README.md +61 -54
- package/templates/skills/_shared/phases/README.md +1 -0
- package/templates/skills/_shared/phases/preflight.md +20 -0
- package/templates/skills/_shared/phases/rules.md +154 -0
- package/templates/skills/_shared/return-validation.md +28 -0
- package/templates/skills/_shared/rules/CREDITS.md +141 -0
- package/templates/skills/_shared/rules/INDEX.md +107 -0
- package/templates/skills/_shared/rules/code.md +229 -0
- package/templates/skills/_shared/rules/delivery.md +114 -0
- package/templates/skills/_shared/rules/ui.md +139 -0
- package/templates/skills/_shared/rules/writing.md +223 -0
- package/templates/skills/context-combiner/SKILL.md +9 -1
- package/templates/skills/orc/SKILL.md +7 -0
- package/templates/skills/orc-aftermath/SKILL.md +7 -0
- package/templates/skills/orc-analyze/SKILL.md +7 -0
- package/templates/skills/orc-analyze-mini/SKILL.md +9 -1
- package/templates/skills/orc-boundary/SKILL.md +7 -0
- package/templates/skills/orc-brainstorm/SKILL.md +7 -0
- package/templates/skills/orc-budget/SKILL.md +7 -0
- package/templates/skills/orc-challenge/SKILL.md +7 -0
- package/templates/skills/orc-claude/SKILL.md +7 -0
- package/templates/skills/orc-diy/SKILL.md +7 -0
- package/templates/skills/orc-explain/SKILL.md +7 -0
- package/templates/skills/orc-export/SKILL.md +7 -0
- package/templates/skills/orc-fast/SKILL.md +7 -0
- package/templates/skills/orc-grill/SKILL.md +7 -0
- package/templates/skills/orc-handoff/SKILL.md +9 -1
- package/templates/skills/orc-learn/SKILL.md +7 -0
- package/templates/skills/orc-mini/SKILL.md +7 -0
- package/templates/skills/orc-pact/SKILL.md +7 -0
- package/templates/skills/orc-poly/SKILL.md +7 -0
- package/templates/skills/orc-pr-driver/SKILL.md +9 -1
- package/templates/skills/orc-pr-setup/SKILL.md +9 -1
- package/templates/skills/orc-quick/SKILL.md +7 -0
- package/templates/skills/orc-retro/SKILL.md +7 -0
- package/templates/skills/orc-route/SKILL.md +7 -0
- package/templates/skills/orc-test/SKILL.md +7 -0
- package/templates/skills/orc-verify/SKILL.md +7 -0
- package/templates/skills/orc-wiki/SKILL.md +15 -0
- package/templates/skills/orc-wiki/references/partial-refresh.md +68 -0
- package/templates/skills/orc-wiki/references/phases/phase-0.md +15 -1
|
@@ -0,0 +1,1002 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* fixtures/rules.js — the anti-slop rule surface.
|
|
4
|
+
*
|
|
5
|
+
* CAPTURED FROM THE REAL CLI (`orc rules --json` and `orc rules lint --json`)
|
|
6
|
+
* against a throwaway project, with the paths rewritten afterwards. That is
|
|
7
|
+
* deliberate: a fixture that has drifted from the CLI is worse than no fixture,
|
|
8
|
+
* and the only honest way to carry 65 rules with their real bodies and their
|
|
9
|
+
* real credit table is to take them from the files that ship.
|
|
10
|
+
*
|
|
11
|
+
* The STATE it carries is the one you cannot reach on a clean install: a ledger
|
|
12
|
+
* with all three priorities filled, ONE override that switches a real rule off,
|
|
13
|
+
* and a lint run with findings in both prose and code plus a suppressed check.
|
|
14
|
+
* Every card on the panel renders something, including the ugly ones.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
module.exports.rules = {
|
|
18
|
+
"ok": true,
|
|
19
|
+
"line": "ORC 65 (W 23 · C 22 · D 10 · U 10) · yours 5 lines (P0 2 · P1 2 · P2 1) · 1 override",
|
|
20
|
+
"orc": {
|
|
21
|
+
"dir": "/home/you/acme-api/.claude/skills/_shared/rules",
|
|
22
|
+
"source": "installed",
|
|
23
|
+
"read_only": true,
|
|
24
|
+
"count": 65,
|
|
25
|
+
"packs": [
|
|
26
|
+
{
|
|
27
|
+
"id": "writing",
|
|
28
|
+
"file": "/home/you/acme-api/.claude/skills/_shared/rules/writing.md",
|
|
29
|
+
"prefix": "OSW",
|
|
30
|
+
"layer": "writing",
|
|
31
|
+
"title": "Writing",
|
|
32
|
+
"readable": true,
|
|
33
|
+
"count": 23,
|
|
34
|
+
"tiers": {
|
|
35
|
+
"HARD": 14,
|
|
36
|
+
"PURPOSE": 2,
|
|
37
|
+
"LOCK": 7
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "code",
|
|
42
|
+
"file": "/home/you/acme-api/.claude/skills/_shared/rules/code.md",
|
|
43
|
+
"prefix": "OSC",
|
|
44
|
+
"layer": "code",
|
|
45
|
+
"title": "Code",
|
|
46
|
+
"readable": true,
|
|
47
|
+
"count": 22,
|
|
48
|
+
"tiers": {
|
|
49
|
+
"HARD": 17,
|
|
50
|
+
"PURPOSE": 4,
|
|
51
|
+
"LOCK": 1
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "delivery",
|
|
56
|
+
"file": "/home/you/acme-api/.claude/skills/_shared/rules/delivery.md",
|
|
57
|
+
"prefix": "OSD",
|
|
58
|
+
"layer": "core",
|
|
59
|
+
"title": "Delivery",
|
|
60
|
+
"readable": true,
|
|
61
|
+
"count": 10,
|
|
62
|
+
"tiers": {
|
|
63
|
+
"HARD": 7,
|
|
64
|
+
"PURPOSE": 0,
|
|
65
|
+
"LOCK": 3
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "ui",
|
|
70
|
+
"file": "/home/you/acme-api/.claude/skills/_shared/rules/ui.md",
|
|
71
|
+
"prefix": "OSU",
|
|
72
|
+
"layer": "ui",
|
|
73
|
+
"title": "UI",
|
|
74
|
+
"readable": true,
|
|
75
|
+
"count": 10,
|
|
76
|
+
"tiers": {
|
|
77
|
+
"HARD": 7,
|
|
78
|
+
"PURPOSE": 1,
|
|
79
|
+
"LOCK": 2
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"rules": [
|
|
84
|
+
{
|
|
85
|
+
"id": "OSW-01",
|
|
86
|
+
"tier": "HARD",
|
|
87
|
+
"title": "Lead with the point",
|
|
88
|
+
"pack": "writing",
|
|
89
|
+
"prefix": "OSW",
|
|
90
|
+
"body": "No throat-clearing opener. Cut \"Here's the thing\", \"Here's what I mean\", \"Let me\nbe clear\", \"I'll be honest\", \"The uncomfortable truth is\". State the point.\n\nKeep a personal aside, a story or an admission when it creates context or\ntension. The ban is on the empty run-up, not on character."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "OSW-02",
|
|
94
|
+
"tier": "HARD",
|
|
95
|
+
"title": "No binary contrast",
|
|
96
|
+
"pack": "writing",
|
|
97
|
+
"prefix": "OSW",
|
|
98
|
+
"body": "Cut \"It's not X, it's Y\", \"The question isn't X, it's Y\", \"It's not just X but\nY\", and negative listing (\"Not a X. Not a Y. A Z.\"). State Y directly.\n\n\"The question isn't the model. It's the eval.\" becomes \"The eval matters more\nthan the model.\""
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": "OSW-03",
|
|
102
|
+
"tier": "HARD",
|
|
103
|
+
"title": "No faux-insight setup",
|
|
104
|
+
"pack": "writing",
|
|
105
|
+
"prefix": "OSW",
|
|
106
|
+
"body": "Cut \"What nobody tells you\", \"the part everyone misses\", \"what most people get\nwrong\", \"this is the part most people skip\". The setup flatters the writer and\ncarries no information. Make the claim stand on its own."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "OSW-04",
|
|
110
|
+
"tier": "LOCK",
|
|
111
|
+
"title": "No colon reveal",
|
|
112
|
+
"pack": "writing",
|
|
113
|
+
"prefix": "OSW",
|
|
114
|
+
"body": "A noun phrase, a colon, then a dramatic lowercase reveal is a generated shape:\n\"The detail that makes it work: a separate agent grades it.\" Rewrite as a plain\nsentence. Colons are for lists, labels and quotes."
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "OSW-05",
|
|
118
|
+
"tier": "HARD",
|
|
119
|
+
"title": "No fake-profound kicker, no summary recap",
|
|
120
|
+
"pack": "writing",
|
|
121
|
+
"prefix": "OSW",
|
|
122
|
+
"body": "Cut the final \"deep\" line that turns the point into an aphorism or a mic drop.\nDo not rewrite it into a better metaphor. Delete it.\n\nCut \"In conclusion\", \"Ultimately\", \"Overall\" and the closing paragraph that\nrestates the piece. End on the last concrete point, the takeaway, or the next\naction."
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "OSW-06",
|
|
126
|
+
"tier": "HARD",
|
|
127
|
+
"title": "No importance puffery",
|
|
128
|
+
"pack": "writing",
|
|
129
|
+
"prefix": "OSW",
|
|
130
|
+
"body": "Cut \"marks a pivotal moment\", \"underscores its significance\", \"plays a vital\nrole\", \"stands as a testament\", \"solidifies its position\". State the fact and\nlet the reader judge whether it matters.\n\n\"The launch marks a pivotal moment for the company\" becomes \"The launch is the\ncompany's first paid product.\""
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "OSW-07",
|
|
134
|
+
"tier": "HARD",
|
|
135
|
+
"title": "No `-ing` pseudo-analysis",
|
|
136
|
+
"pack": "writing",
|
|
137
|
+
"prefix": "OSW",
|
|
138
|
+
"body": "Cut trailing clauses that pretend to explain meaning: \"highlighting\",\n\"underscoring\", \"reflecting\", \"showcasing\", \"demonstrating\". Replace with the\nactual consequence.\n\n\"The launch adds file search, highlighting the team's commitment to workflows\"\nbecomes \"The launch adds file search, so users find old drafts without leaving\nthe editor.\""
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "OSW-08",
|
|
142
|
+
"tier": "HARD",
|
|
143
|
+
"title": "No weasel attribution",
|
|
144
|
+
"pack": "writing",
|
|
145
|
+
"prefix": "OSW",
|
|
146
|
+
"body": "Cut \"experts agree\", \"studies show\", \"industry reports suggest\", \"many argue\",\n\"widely regarded as\". Name the source, or cut the claim. If there is no source,\nask. Never invent one."
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"id": "OSW-09",
|
|
150
|
+
"tier": "LOCK",
|
|
151
|
+
"title": "No synonym cycling",
|
|
152
|
+
"pack": "writing",
|
|
153
|
+
"prefix": "OSW",
|
|
154
|
+
"body": "If the clear word is right, repeat it. Do not rotate terms for style. \"The agent\nreviews the draft. The assistant scores the piece. The tool suggests fixes\"\nbecomes \"The agent reviews the draft, scores it, and suggests fixes.\"\n\nThis matters more in technical writing than anywhere else: a second name for one\nthing reads as a second thing."
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"id": "OSW-10",
|
|
158
|
+
"tier": "HARD",
|
|
159
|
+
"title": "Banned lexicon",
|
|
160
|
+
"pack": "writing",
|
|
161
|
+
"prefix": "OSW",
|
|
162
|
+
"body": "Never use, in any output: delve · leverage · utilize · facilitate · empower ·\nstreamline · robust · cutting-edge · paradigm shift · game changer · tapestry ·\nrealm · beacon · multifaceted · meticulous · intricate · paramount ·\ntransformative · elevate · embark · supercharge · harness · ever-evolving ·\nseamless · unleash · pivotal.\n\nUse the plain word. \"Utilize\" is \"use\". \"Leverage\" is \"use\". \"Facilitate\" is\n\"help\" or the verb for what actually happens.\n\nChecked by `orc rules lint`."
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "OSW-11",
|
|
166
|
+
"tier": "HARD",
|
|
167
|
+
"title": "Banned phrases",
|
|
168
|
+
"pack": "writing",
|
|
169
|
+
"prefix": "OSW",
|
|
170
|
+
"body": "Never use: \"it's worth noting\" · \"it's important to note\" · \"at the end of the\nday\" · \"when it comes to\" · \"at its core\" · \"in today's world\" · \"in the age\nof\" · \"in the world of\" · \"the reality is\" · \"the truth is\" · \"in terms of\" ·\n\"with regard to\" · \"going forward\" · \"let's dive in\" · \"in this article\".\n\nEvery one of them delays the point by a clause. Delete the clause and keep the\npoint.\n\nChecked by `orc rules lint`."
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"id": "OSW-12",
|
|
174
|
+
"tier": "PURPOSE",
|
|
175
|
+
"title": "Hedge adverbs earn their place",
|
|
176
|
+
"pack": "writing",
|
|
177
|
+
"prefix": "OSW",
|
|
178
|
+
"body": "Cut when they add nothing: just · literally · honestly · simply · actually ·\ntruly · fundamentally · importantly · crucially · inherently · inevitably.\n\nKeep one when it carries real uncertainty, a real contrast, or the writer's own\nrhythm. That is the written reason."
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"id": "OSW-13",
|
|
182
|
+
"tier": "PURPOSE",
|
|
183
|
+
"title": "Em dash dose cap",
|
|
184
|
+
"pack": "writing",
|
|
185
|
+
"prefix": "OSW",
|
|
186
|
+
"body": "This is a **dose rule, not a ban.** The em dash is a real punctuation mark and\nORC's own documentation uses it.\n\n- Short output (a chat answer, a commit body, a CTA, a label): none.\n- A long document: at most two per thousand words, and only where the dash\n clearly beats a comma, a period or parentheses.\n- Never as a rhythm crutch, and never in clusters.\n\n`orc rules lint` reports **density**, not presence."
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"id": "OSW-14",
|
|
190
|
+
"tier": "LOCK",
|
|
191
|
+
"title": "No rule-of-three padding",
|
|
192
|
+
"pack": "writing",
|
|
193
|
+
"prefix": "OSW",
|
|
194
|
+
"body": "Three items only when there are three items. Do not invent a third to complete\nthe cadence, and do not drop a fourth to preserve it."
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"id": "OSW-15",
|
|
198
|
+
"tier": "HARD",
|
|
199
|
+
"title": "No staccato drama",
|
|
200
|
+
"pack": "writing",
|
|
201
|
+
"prefix": "OSW",
|
|
202
|
+
"body": "Cut \"X. And Y. And Z.\", \"That's it. That's the whole thing.\", and stacked punchy\nfragments. Use complete sentences. Vary sentence shape only when it helps the\npoint."
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"id": "OSW-16",
|
|
206
|
+
"tier": "HARD",
|
|
207
|
+
"title": "No rhetorical setup",
|
|
208
|
+
"pack": "writing",
|
|
209
|
+
"prefix": "OSW",
|
|
210
|
+
"body": "Cut \"What if I told you…\", \"Think about it:\", \"Plot twist:\", and self-answered\n\"Question? Answer.\" pairs. Make the point."
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"id": "OSW-17",
|
|
214
|
+
"tier": "HARD",
|
|
215
|
+
"title": "No interpretive metadiscourse",
|
|
216
|
+
"pack": "writing",
|
|
217
|
+
"prefix": "OSW",
|
|
218
|
+
"body": "Cut lines that step outside the subject to tell the reader what to notice: \"That\nlast part matters more than it sounds\", \"The key point is\", \"As you can see\",\n\"This distinction matters\", and a redundant \"In other words\".\n\nIf the point is clear, delete the aside. If it is not, add the fact that would\nmake it clear."
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": "OSW-18",
|
|
222
|
+
"tier": "LOCK",
|
|
223
|
+
"title": "No formatting slop",
|
|
224
|
+
"pack": "writing",
|
|
225
|
+
"prefix": "OSW",
|
|
226
|
+
"body": "- No emoji in a heading (checked by `orc rules lint`).\n- No bold sprinkled mid-sentence for emphasis.\n- No heading over a two-sentence section.\n- No bullet list where two sentences of prose read better.\n- No table with one column of real content.\n\nFormat follows the content. It does not decorate it."
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"id": "OSW-19",
|
|
230
|
+
"tier": "LOCK",
|
|
231
|
+
"title": "Active voice, real actors",
|
|
232
|
+
"pack": "writing",
|
|
233
|
+
"prefix": "OSW",
|
|
234
|
+
"body": "\"The team shipped it Tuesday\" beats \"the decision emerged\". Never let an\ninanimate thing do a human verb: an architecture does not believe, a module does\nnot want, a decision does not emerge.\n\nPassive voice is allowed when the actor is genuinely unknown or genuinely\nirrelevant, and only then."
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"id": "OSW-20",
|
|
238
|
+
"tier": "LOCK",
|
|
239
|
+
"title": "The portability test",
|
|
240
|
+
"pack": "writing",
|
|
241
|
+
"prefix": "OSW",
|
|
242
|
+
"body": "If a sentence could move unchanged to another project, another company or\nanother product, it is filler. Replace it with a fact, a mechanism, a\nconsequence, or a judgement specific to this subject. Otherwise cut it."
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"id": "OSW-21",
|
|
246
|
+
"tier": "LOCK",
|
|
247
|
+
"title": "Concrete beats abstract",
|
|
248
|
+
"pack": "writing",
|
|
249
|
+
"prefix": "OSW",
|
|
250
|
+
"body": "Names, numbers, dates, file paths, commands, error codes and examples beat\nabstractions. \"The integration improved efficiency\" becomes \"The integration cut\ndeploy time from 40 minutes to 4.\"\n\nProtect the specific fact. Never smooth a useful detail into generic importance."
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"id": "OSW-22",
|
|
254
|
+
"tier": "HARD",
|
|
255
|
+
"title": "A human's paragraph is not yours to restyle",
|
|
256
|
+
"pack": "writing",
|
|
257
|
+
"prefix": "OSW",
|
|
258
|
+
"body": "Never rewrite user-authored prose to match this pack. Preserve the writer's\nvocabulary, bluntness, humour, digressions and level of polish.\n\nThis rule beats every other rule in this file. A pack that flattens the human\nvoice it was written to protect has failed."
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"id": "OSW-23",
|
|
262
|
+
"tier": "HARD",
|
|
263
|
+
"title": "Never invent a specific",
|
|
264
|
+
"pack": "writing",
|
|
265
|
+
"prefix": "OSW",
|
|
266
|
+
"body": "No invented number, date, name, version, benchmark or range. No \"anywhere from X\nto Y\" that nothing measured. No filled-in gap presented as a fact.\n\nIf the number is needed and unknown, say it is unknown, or ask."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"id": "OSC-01",
|
|
270
|
+
"tier": "HARD",
|
|
271
|
+
"title": "A comment never restates the code",
|
|
272
|
+
"pack": "code",
|
|
273
|
+
"prefix": "OSC",
|
|
274
|
+
"body": "Delete a comment that repeats what the next line, the declaration or the\nsignature already shows: `// Initialize the variable` above `let count = 0`,\n`// User class` above `class User {}`, `const userAge = 25; // User age is 25`.\n\nIt doubles the reading load and adds nothing. Remove the comment. Leave the code."
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"id": "OSC-02",
|
|
278
|
+
"tier": "HARD",
|
|
279
|
+
"title": "No decorative separator",
|
|
280
|
+
"pack": "code",
|
|
281
|
+
"prefix": "OSC",
|
|
282
|
+
"body": "No banner built from repeated characters, no ALL-CAPS section label, no\nbox-drawn header: `// ==========`, `// -------- WORKFLOW --------`,\n`/* ---- ROUTES ---- */`.\n\nThe decoration is the message, and the message is \"generated\". Use one plain\nline, or nothing.\n\nChecked by `orc rules lint`."
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"id": "OSC-03",
|
|
286
|
+
"tier": "HARD",
|
|
287
|
+
"title": "No workflow narration",
|
|
288
|
+
"pack": "code",
|
|
289
|
+
"prefix": "OSC",
|
|
290
|
+
"body": "No `// Step 1: Validate input`, `// Step 2: Process`, `// First…`, `// Next…`,\n`// Finally…`. The control flow is already visible.\n\nIf the flow is genuinely hard to follow, that is a structure problem, not a\nmissing comment.\n\nChecked by `orc rules lint`."
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"id": "OSC-04",
|
|
294
|
+
"tier": "HARD",
|
|
295
|
+
"title": "No empty label",
|
|
296
|
+
"pack": "code",
|
|
297
|
+
"prefix": "OSC",
|
|
298
|
+
"body": "No `// Main logic`, `// Core logic`, `// Business logic`, `// Helper function`,\n`// Entry point`, `// Error handling`, `// Note: this is important`,\n`// Important: please read`.\n\nThe label names a category, not a fact. \"Note: retries happen only on 5xx\" earns\nits place. \"Note: this is important\" does not.\n\nChecked by `orc rules lint`."
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"id": "OSC-05",
|
|
302
|
+
"tier": "HARD",
|
|
303
|
+
"title": "A TODO names a task",
|
|
304
|
+
"pack": "code",
|
|
305
|
+
"prefix": "OSC",
|
|
306
|
+
"body": "No `// TODO: improve this`, `// Future improvements`, `// Additional\noptimization can be added here`, `// Add more validation`.\n\nA vague TODO names a feeling, not a task. Keep a TODO only when it says what to\ndo and carries enough context to act on. Otherwise delete it.\n\nChecked by `orc rules lint`."
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"id": "OSC-06",
|
|
310
|
+
"tier": "HARD",
|
|
311
|
+
"title": "No decorative emoji in code",
|
|
312
|
+
"pack": "code",
|
|
313
|
+
"prefix": "OSC",
|
|
314
|
+
"body": "No emoji as decoration in a comment, a log line or an identifier: `// ✅\nValidation`, `// 🚀 Performance`, `// 🔒 Security`. Emoji is visual noise in\nsource, and that exact set is the generated vocabulary.\n\nCarve-out: a string the product actually renders to a user, and a test asserting\non it.\n\nChecked by `orc rules lint`."
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"id": "OSC-07",
|
|
318
|
+
"tier": "HARD",
|
|
319
|
+
"title": "No end markers",
|
|
320
|
+
"pack": "code",
|
|
321
|
+
"prefix": "OSC",
|
|
322
|
+
"body": "No `} // end if`, `# End of function`, `// End processOrder`. The closing brace\nalready ends the block.\n\nChecked by `orc rules lint`."
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"id": "OSC-08",
|
|
326
|
+
"tier": "LOCK",
|
|
327
|
+
"title": "One line per comment",
|
|
328
|
+
"pack": "code",
|
|
329
|
+
"prefix": "OSC",
|
|
330
|
+
"body": "One line. Two only when the second carries a new fact. Never three.\n\nA person leaves a note; a generator writes a case. Cut the reasoning chain, the\nissue number and the version history. Keep the constraint: the platform trap,\nthe silent failure, the protocol rule, the performance cost.\n\n**Value is not length.** A comment that legitimately earns its place still does\nnot earn a paragraph."
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"id": "OSC-09",
|
|
334
|
+
"tier": "HARD",
|
|
335
|
+
"title": "Comments explain why, never what",
|
|
336
|
+
"pack": "code",
|
|
337
|
+
"prefix": "OSC",
|
|
338
|
+
"body": "Never strip a comment that carries: business logic and intent · an architectural\ndecision · a security consideration · a performance trade-off · concurrency\nbehaviour · a protocol detail · an API contract · a workaround · an edge case or\nassumption · a licence or legal notice.\n\n```js\n// Stripe may retry webhook deliveries for up to three days.\n// Ignore duplicate events using the event ID.\n```\n\nThat comment stays. A comment earns its place when it explains something the\ncode does not already show."
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "OSC-10",
|
|
342
|
+
"tier": "HARD",
|
|
343
|
+
"title": "No speculative abstraction",
|
|
344
|
+
"pack": "code",
|
|
345
|
+
"prefix": "OSC",
|
|
346
|
+
"body": "Minimum code that solves the stated problem. No helper for a one-time operation.\nNo abstraction for a single call site. No configurability nobody asked for. No\ndesign for a hypothetical future requirement.\n\nThree similar lines of code beat a premature abstraction."
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"id": "OSC-11",
|
|
350
|
+
"tier": "HARD",
|
|
351
|
+
"title": "No defence against impossible states",
|
|
352
|
+
"pack": "code",
|
|
353
|
+
"prefix": "OSC",
|
|
354
|
+
"body": "No error handling, fallback or validation for a scenario that cannot happen.\nTrust internal code and framework guarantees.\n\nValidate at system boundaries only: user input, external APIs, parsed files, and\nanything crossing a process boundary."
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"id": "OSC-12",
|
|
358
|
+
"tier": "HARD",
|
|
359
|
+
"title": "No backwards-compatibility shim",
|
|
360
|
+
"pack": "code",
|
|
361
|
+
"prefix": "OSC",
|
|
362
|
+
"body": "When the code can just change, change it. No feature flag, no compatibility\nlayer, no `_unused` rename, no re-export of a moved type, no `// removed`\ntombstone.\n\nIf it is unused, delete it completely."
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"id": "OSC-13",
|
|
366
|
+
"tier": "HARD",
|
|
367
|
+
"title": "Surgical",
|
|
368
|
+
"pack": "code",
|
|
369
|
+
"prefix": "OSC",
|
|
370
|
+
"body": "Every changed line traces directly to the request. Do not improve adjacent code,\ncomments or formatting. Do not refactor what is not broken. Do not add\ndocstrings or type annotations to code you did not change.\n\nCites house card rule 1. Where the house card and this rule differ, the house\ncard wins."
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"id": "OSC-14",
|
|
374
|
+
"tier": "HARD",
|
|
375
|
+
"title": "Pre-existing dead code: mention, do not delete",
|
|
376
|
+
"pack": "code",
|
|
377
|
+
"prefix": "OSC",
|
|
378
|
+
"body": "Remove the imports, variables and functions **your** change left unused. Report\nany other dead code you notice; do not remove it unless asked."
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"id": "OSC-15",
|
|
382
|
+
"tier": "PURPOSE",
|
|
383
|
+
"title": "Method length",
|
|
384
|
+
"pack": "code",
|
|
385
|
+
"prefix": "OSC",
|
|
386
|
+
"body": "A function longer than the file's own norm is split, or the reason is written in\none line.\n\nStronger models write longer methods, not shorter ones: they consolidate complex\nlogic into a single procedural block because that is locally the most probable\ncontinuation. This rule is the counterweight."
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"id": "OSC-16",
|
|
390
|
+
"tier": "PURPOSE",
|
|
391
|
+
"title": "No Modular Mirage",
|
|
392
|
+
"pack": "code",
|
|
393
|
+
"prefix": "OSC",
|
|
394
|
+
"body": "New files that spread one behaviour across the tree produce structural\nmodularity with no semantic cohesion. If a change adds files, the reason each\nboundary exists is written in one line.\n\nSeparating files is not the same as separating concerns."
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"id": "OSC-17",
|
|
398
|
+
"tier": "PURPOSE",
|
|
399
|
+
"title": "No God class, no branch sink",
|
|
400
|
+
"pack": "code",
|
|
401
|
+
"prefix": "OSC",
|
|
402
|
+
"body": "No \"manager\" or \"service\" class that centralises every branch. No class whose\nresponse set spans most of the module. Where one is genuinely right, write the\nreason."
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"id": "OSC-18",
|
|
406
|
+
"tier": "HARD",
|
|
407
|
+
"title": "Look before you write a helper",
|
|
408
|
+
"pack": "code",
|
|
409
|
+
"prefix": "OSC",
|
|
410
|
+
"body": "Before adding a helper, a util, a formatter or a validator, search for the one\nthat already exists. Redundant reimplementation is the most expensive slop in\nthis pack: it compiles, it passes, and it doubles the maintenance surface\nsilently."
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"id": "OSC-19",
|
|
414
|
+
"tier": "HARD",
|
|
415
|
+
"title": "Match the existing style",
|
|
416
|
+
"pack": "code",
|
|
417
|
+
"prefix": "OSC",
|
|
418
|
+
"body": "Match the surrounding code's naming, comment density, error handling and file\nlayout, even where you would do it differently. The cached project pattern\n(`orc pattern`) is the reference when one exists."
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"id": "OSC-20",
|
|
422
|
+
"tier": "PURPOSE",
|
|
423
|
+
"title": "LLM-calling code is pinned and bounded",
|
|
424
|
+
"pack": "code",
|
|
425
|
+
"prefix": "OSC",
|
|
426
|
+
"body": "When the task writes code that calls a model, each of these is done or the\nreason is written:\n\n- Pin the model **version**, never a bare provider alias.\n- Set `temperature` explicitly. Provider defaults differ and change.\n- Bound max tokens, timeouts and retries. Unbounded is not \"no limit\", it is an\n unknown limit.\n- Send a system message.\n- Enforce a structured output schema where the caller expects fields."
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"id": "OSC-21",
|
|
430
|
+
"tier": "HARD",
|
|
431
|
+
"title": "No unrequested artifact files",
|
|
432
|
+
"pack": "code",
|
|
433
|
+
"prefix": "OSC",
|
|
434
|
+
"body": "Do not create a file nobody asked for: `SUMMARY.md`, `IMPLEMENTATION_NOTES.md`,\n`CHANGES.md`, `NOTES.md`, `*_final`, `*_v2`, `*_new`, `*.bak`, `*.old`.\n\nReport in the return. Do not leave a file behind as the report.\n\nChecked by `orc rules lint` on new files."
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
"id": "OSC-22",
|
|
438
|
+
"tier": "HARD",
|
|
439
|
+
"title": "Introduce no OWASP Top 10 weakness",
|
|
440
|
+
"pack": "code",
|
|
441
|
+
"prefix": "OSC",
|
|
442
|
+
"body": "Injection, broken access control, insecure deserialisation, secrets in source,\nmissing authorisation on a new endpoint, unvalidated redirect. If you notice\ninsecure code you wrote, fix it in the same slice and say so in the return."
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"id": "OSD-01",
|
|
446
|
+
"tier": "HARD",
|
|
447
|
+
"title": "Separate what changed from what is verified",
|
|
448
|
+
"pack": "delivery",
|
|
449
|
+
"prefix": "OSD",
|
|
450
|
+
"body": "Two different facts, always reported as two facts.\n\n```\nEdited verifyToken at auth.ts:42. Tests not run yet.\n```\n\nNot \"fixed the token bug\". Editing is an observation. Fixing is a claim, and a\nclaim needs a run behind it."
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
"id": "OSD-02",
|
|
454
|
+
"tier": "HARD",
|
|
455
|
+
"title": "Never report an unrun tool",
|
|
456
|
+
"pack": "delivery",
|
|
457
|
+
"prefix": "OSD",
|
|
458
|
+
"body": "Never say a command ran, a test passed, a build succeeded, a file was read or a\npage was fetched when it did not happen in this session. Not as a summary, not\nas a plan restated in the past tense, not as an inference from the diff.\n\nThis is the single most damaging rule in the pack to break, because everything\ndownstream trusts it."
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
"id": "OSD-03",
|
|
462
|
+
"tier": "HARD",
|
|
463
|
+
"title": "No invented confidence",
|
|
464
|
+
"pack": "delivery",
|
|
465
|
+
"prefix": "OSD",
|
|
466
|
+
"body": "Cut \"this should work now\", \"definitely fixed\", \"should be perfect\", \"that ought\nto do it\". Confidence is reported from evidence or it is not reported.\n\nSay what you observed and what remains unknown."
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"id": "OSD-04",
|
|
470
|
+
"tier": "HARD",
|
|
471
|
+
"title": "Cut empty hedges, keep load-bearing caveats",
|
|
472
|
+
"pack": "delivery",
|
|
473
|
+
"prefix": "OSD",
|
|
474
|
+
"body": "The two look alike and are opposites.\n\n- **Empty hedge**, cut it: \"this might possibly help\", \"hopefully that works\".\n- **Load-bearing caveat**, keep it: \"this only covers the JSON path; the\n multipart branch is untested\", \"this assumes the column is already indexed\".\n\nThe test is whether a reader could act on it. Scope, risk and uncertainty are\nload-bearing. A \"be concise\" instruction cuts both; this rule cuts one."
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
"id": "OSD-05",
|
|
478
|
+
"tier": "HARD",
|
|
479
|
+
"title": "No apology theatre",
|
|
480
|
+
"pack": "delivery",
|
|
481
|
+
"prefix": "OSD",
|
|
482
|
+
"body": "State the cause and the fix. No \"I apologise for the confusion\", no \"you're\nabsolutely right, my mistake\", no paragraph of contrition before the correction.\n\nOne correction, plainly, then continue."
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
"id": "OSD-06",
|
|
486
|
+
"tier": "LOCK",
|
|
487
|
+
"title": "An estimate names its driving variable",
|
|
488
|
+
"pack": "delivery",
|
|
489
|
+
"prefix": "OSD",
|
|
490
|
+
"body": "Never anchor on human-effort time (\"this would take a developer two days\").\nName what actually creates the uncertainty — file count, test-suite size, build\nrepetitions, number of call sites — then pin it with a measurement where one\nexists."
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"id": "OSD-07",
|
|
494
|
+
"tier": "LOCK",
|
|
495
|
+
"title": "No trailing recap",
|
|
496
|
+
"pack": "delivery",
|
|
497
|
+
"prefix": "OSD",
|
|
498
|
+
"body": "No closing paragraph restating what was just done. The user reads the diff and\nthe return. A recap is a second copy of information they already have.\n\nReport what is **unfinished**, **unverified** or **decided**. Not what is visible."
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"id": "OSD-08",
|
|
502
|
+
"tier": "HARD",
|
|
503
|
+
"title": "An honest partial beats a false done",
|
|
504
|
+
"pack": "delivery",
|
|
505
|
+
"prefix": "OSD",
|
|
506
|
+
"body": "Report what is unmet. Never round up, never mark a criterion met because\neverything around it is. A task that is 80% done is reported as 80% done with\nthe missing 20% named.\n\nCites house card rule 6."
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"id": "OSD-09",
|
|
510
|
+
"tier": "LOCK",
|
|
511
|
+
"title": "One issue at a time",
|
|
512
|
+
"pack": "delivery",
|
|
513
|
+
"prefix": "OSD",
|
|
514
|
+
"body": "When raising a problem that needs the user, raise one. A list of five concerns\nin one turn gets one answer covering none of them.\n\nException: a batch the user explicitly asked to be batched, and a round of\nquestions in an interview phase, where the format is the point."
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"id": "OSD-10",
|
|
518
|
+
"tier": "HARD",
|
|
519
|
+
"title": "No verification theatre",
|
|
520
|
+
"pack": "delivery",
|
|
521
|
+
"prefix": "OSD",
|
|
522
|
+
"body": "A PASS with no record of what was actually exercised is not a PASS.\n\nReport the check element by element: the command that ran and its exit code, the\ntest names, the click-through if it was a UI, the file and line for each\ncriterion. If the deliverable could not be run, say so and say that the check\nwas code inspection instead. Never imply a run that did not happen."
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
"id": "OSU-01",
|
|
526
|
+
"tier": "HARD",
|
|
527
|
+
"title": "No dead controls",
|
|
528
|
+
"pack": "ui",
|
|
529
|
+
"prefix": "OSU",
|
|
530
|
+
"body": "Every interactive element does something real, or it does not exist:\n\n- a link or button that reaches a destination that exists\n- a modal that opens and closes, and closes on `Escape`\n- a toggle that changes state\n- an external action (`mailto:`, a real URL)\n- a form that submits and shows feedback\n\nA button that does nothing is a defect, not decoration. A nav item pointing at a\nsection that does not exist is the same defect. If it cannot have a destination\nyet, remove it, or label it \"Coming soon\" **and** leave a `TODO` that names the\ntask (`OSC-05`)."
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"id": "OSU-02",
|
|
534
|
+
"tier": "HARD",
|
|
535
|
+
"title": "Three states minimum",
|
|
536
|
+
"pack": "ui",
|
|
537
|
+
"prefix": "OSU",
|
|
538
|
+
"body": "Any view that displays data has an **empty** state, a **loading** state and an\n**error** state. A UI built only for the ideal condition is not finished.\n\nThese are not extras. They are part of the view."
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"id": "OSU-03",
|
|
542
|
+
"tier": "HARD",
|
|
543
|
+
"title": "Accessible by default",
|
|
544
|
+
"pack": "ui",
|
|
545
|
+
"prefix": "OSU",
|
|
546
|
+
"body": "- WCAG AA contrast: 4.5:1 for body text, 3:1 for large text (18px+). Test across\n the whole area the text crosses, not one point.\n- Every interactive element reachable with `Tab` and `Shift+Tab`, in visual\n order, and operable with `Enter` or `Space`.\n- Every focused element has a visible focus indicator.\n- Never `outline: none` or `outline: 0` without a better replacement.\n\nA UI that needs a mouse is unfinished.\n\nPartly checked by `orc rules lint` (`outline: none` with no replacement)."
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"id": "OSU-04",
|
|
550
|
+
"tier": "HARD",
|
|
551
|
+
"title": "Real content or an honest placeholder",
|
|
552
|
+
"pack": "ui",
|
|
553
|
+
"prefix": "OSU",
|
|
554
|
+
"body": "No fabricated testimonial, statistic, customer logo, team member, review, or\nsecurity or compliance claim. No number without a real source.\n\nA placeholder is written as what it is: `[REAL DATA]`, `[LOGO]`, \"Coming soon\".\nNever disguised as final.\n\n**An empty section beats a fabricated one.** If there are no testimonials, there\nis no testimonials section."
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
"id": "OSU-05",
|
|
558
|
+
"tier": "LOCK",
|
|
559
|
+
"title": "No generic CTA",
|
|
560
|
+
"pack": "ui",
|
|
561
|
+
"prefix": "OSU",
|
|
562
|
+
"body": "\"Get Started\", \"Learn More\", \"Try Now\", \"Explore\", \"Discover\" name no action.\nName the action: \"Start the free trial\", \"Watch the 2-minute demo\", \"Create an\naccount\"."
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"id": "OSU-06",
|
|
566
|
+
"tier": "HARD",
|
|
567
|
+
"title": "No buzzword UI copy",
|
|
568
|
+
"pack": "ui",
|
|
569
|
+
"prefix": "OSU",
|
|
570
|
+
"body": "Never in shipped interface text: \"AI Powered\" · \"Next Generation\" ·\n\"Revolutionary\" · \"Seamless\" · \"Cutting Edge\" · \"Intelligent\" · \"Ultimate\" ·\n\"Powerful\" · \"Effortless\" · \"Supercharged\".\n\nSay what it does. Show evidence, not adjectives.\n\nChecked by `orc rules lint`."
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
"id": "OSU-07",
|
|
574
|
+
"tier": "PURPOSE",
|
|
575
|
+
"title": "Decoration needs a written reason",
|
|
576
|
+
"pack": "ui",
|
|
577
|
+
"prefix": "OSU",
|
|
578
|
+
"body": "Each of these is **allowed** and fails only as an unexplained default. Write the\none-line reason it serves hierarchy, identity or readability:\n\n- gradient as a primary colour (blue→purple, blue→cyan, purple→pink especially)\n- glassmorphism · **dose cap: at most two elements**, never navbar + cards +\n modal + sidebar together\n- glow · **dose cap: at most two elements**\n- capsule badge with no real status behind it\n- a button arrow as every button's identity\n- grid, dot, blueprint or graph-paper background\n- sparkle, star, magic, lightning, diamond, orb or robot as a feature icon\n- an animation stack (fade-up + float + scale + bounce) on everything\n- a generic illustration set with no connection to the product\n\nA gradient that separates one level of hierarchy from another is craft. The same\ngradient covering the page is slop. The technique is not the problem."
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"id": "OSU-08",
|
|
582
|
+
"tier": "LOCK",
|
|
583
|
+
"title": "Do not clone a named product",
|
|
584
|
+
"pack": "ui",
|
|
585
|
+
"prefix": "OSU",
|
|
586
|
+
"body": "Do not build a visual that copies another product's look unless the user asked\nfor it by name. References are inspiration, not a template.\n\nModels default to cloning the products that dominate their training data. Notice\nwhen that is what is happening."
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"id": "OSU-09",
|
|
590
|
+
"tier": "HARD",
|
|
591
|
+
"title": "Mobile is part of the design",
|
|
592
|
+
"pack": "ui",
|
|
593
|
+
"prefix": "OSU",
|
|
594
|
+
"body": "No horizontal overflow. Text stays inside its container. Cards do not collide or\nclip. The navbar stays usable. Tap targets meet 44px. Spacing stays consistent\nacross breakpoints.\n\nResponsiveness is not an add-on and not a follow-up task."
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
"id": "OSU-10",
|
|
598
|
+
"tier": "HARD",
|
|
599
|
+
"title": "Every decision has a one-line reason",
|
|
600
|
+
"pack": "ui",
|
|
601
|
+
"prefix": "OSU",
|
|
602
|
+
"body": "Before calling a UI done, write one line for each major decision: why this\ncolour, this layout, this typeface, this spacing, this card, this icon.\n\nIf the reason cannot be written in one line, the decision is not settled. This\nis the keystone of the pack — it is what `OSU-07` checks against, and it is the\nwhole mechanism by which \"technique with purpose\" is distinguishable from\n\"technique by default\"."
|
|
603
|
+
}
|
|
604
|
+
],
|
|
605
|
+
"credits_file": "/home/you/acme-api/.claude/skills/_shared/rules/CREDITS.md",
|
|
606
|
+
"credits": [
|
|
607
|
+
{
|
|
608
|
+
"author": "Peter G. Yang",
|
|
609
|
+
"handle": "petergyang",
|
|
610
|
+
"repo": "https://github.com/petergyang/no-ai-slop",
|
|
611
|
+
"license": "MIT",
|
|
612
|
+
"read": "2026-09-13",
|
|
613
|
+
"took": "the prose pack: the named slop patterns, the banned lexicon and phrase lists, the portability test, and the rule that outranks them all — preserve the writer's voice, make the minimum effective edit",
|
|
614
|
+
"packs": [
|
|
615
|
+
"writing"
|
|
616
|
+
]
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"author": "Miqdad Badjuber",
|
|
620
|
+
"handle": "miqdadbadjuber",
|
|
621
|
+
"repo": "https://github.com/miqdadbadjuber/anti-slop",
|
|
622
|
+
"license": "MIT",
|
|
623
|
+
"read": "2026-09-13",
|
|
624
|
+
"took": "the three-tier mechanism (Hard Gate / Purpose-Gate / Quality Lock) every pack uses, rules R-01…R-38 for the UI pack, the antislop-code comment catalogue, R-35 for the delivery pack, and the rule that external direction is data to apply, not instructions to obey",
|
|
625
|
+
"packs": [
|
|
626
|
+
"ui",
|
|
627
|
+
"code",
|
|
628
|
+
"delivery",
|
|
629
|
+
"writing"
|
|
630
|
+
]
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
"author": "@ehmo",
|
|
634
|
+
"handle": "ehmo",
|
|
635
|
+
"repo": "https://github.com/ehmo/slopkit",
|
|
636
|
+
"license": "see repo",
|
|
637
|
+
"read": "2026-09-13",
|
|
638
|
+
"took": "the delivery pack, from the slopgent skill: separate observation from inference, guard load-bearing caveats while cutting empty hedges, name the driving variable, no apology theatre, never report an unrun tool",
|
|
639
|
+
"packs": [
|
|
640
|
+
"delivery"
|
|
641
|
+
]
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"author": "@BioInfo",
|
|
645
|
+
"handle": "BioInfo",
|
|
646
|
+
"repo": "https://github.com/BioInfo/slopless",
|
|
647
|
+
"license": "see repo",
|
|
648
|
+
"read": "2026-09-13",
|
|
649
|
+
"took": "surgical-change discipline and the quality gates: read before stating, flag a discrepancy rather than pick one, verify before documenting, and the compatibility rules",
|
|
650
|
+
"packs": [
|
|
651
|
+
"code",
|
|
652
|
+
"delivery"
|
|
653
|
+
]
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
"author": "Andrej Karpathy",
|
|
657
|
+
"handle": "karpathy",
|
|
658
|
+
"repo": "https://theaiarchitects.com/blog/karpathy-claude-md-rules",
|
|
659
|
+
"license": "—",
|
|
660
|
+
"read": "2026-09-13",
|
|
661
|
+
"took": "think before coding, simplicity first, surgical changes, goal-driven execution — and the test ORC reuses directly: every changed line should trace directly to the user's request",
|
|
662
|
+
"packs": [
|
|
663
|
+
"code"
|
|
664
|
+
]
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"author": "Matty Cartwright",
|
|
668
|
+
"handle": null,
|
|
669
|
+
"repo": "https://mattycartwright.com/blog/the-anti-slop-writing-rules",
|
|
670
|
+
"license": "—",
|
|
671
|
+
"read": "2026-09-13",
|
|
672
|
+
"took": "the layered ban structure (words → phrases → sentence patterns → structural patterns), which is how writing.md is ordered, and the read-aloud tests behind OSW-20",
|
|
673
|
+
"packs": [
|
|
674
|
+
"writing"
|
|
675
|
+
]
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
"author": "research",
|
|
679
|
+
"handle": null,
|
|
680
|
+
"repo": "https://arxiv.org/html/2512.18020v1",
|
|
681
|
+
"license": "—",
|
|
682
|
+
"read": "2026-09-13",
|
|
683
|
+
"took": "the five LLM-call smells — unbounded max metrics, no model version pinning, no system message, no structured output, temperature not set — which are OSC-20",
|
|
684
|
+
"packs": [
|
|
685
|
+
"code"
|
|
686
|
+
]
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
"author": "research",
|
|
690
|
+
"handle": null,
|
|
691
|
+
"repo": "https://arxiv.org/html/2605.02741v1",
|
|
692
|
+
"license": "—",
|
|
693
|
+
"read": "2026-09-13",
|
|
694
|
+
"took": "the Reasoning-Complexity Paradox (OSC-15) and the Modular Mirage (OSC-16), plus the God-class finding (OSC-17)",
|
|
695
|
+
"packs": [
|
|
696
|
+
"code"
|
|
697
|
+
]
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
"author": "research",
|
|
701
|
+
"handle": null,
|
|
702
|
+
"repo": "https://arxiv.org/pdf/2510.03029",
|
|
703
|
+
"license": "—",
|
|
704
|
+
"read": "2026-09-13",
|
|
705
|
+
"took": "over-commenting, defensive checks for impossible conditions, and redundant reimplementation — behind OSC-01, OSC-11 and OSC-18",
|
|
706
|
+
"packs": [
|
|
707
|
+
"code"
|
|
708
|
+
]
|
|
709
|
+
}
|
|
710
|
+
]
|
|
711
|
+
},
|
|
712
|
+
"user": {
|
|
713
|
+
"file": "/home/you/acme-api/.claude/orc/rules.md",
|
|
714
|
+
"exists": true,
|
|
715
|
+
"empty": false,
|
|
716
|
+
"blocks": {
|
|
717
|
+
"P0": "Never name a customer in a commit message or a PR body. Use the account id.\nEvery public function in src/api/ carries a one-line comment naming its caller.",
|
|
718
|
+
"P1": "Prefer Result<T, E> over throwing inside src/core/.\nOSW-13: em dashes are our house voice. Use them where they read best.",
|
|
719
|
+
"P2": "Say \"customer\", never \"user\", in anything a customer reads."
|
|
720
|
+
},
|
|
721
|
+
"text": "# ORC · project rules\n#\n# This project's own standing instructions — about the words ORC writes and\n# the shape of the code it writes. They are read BEFORE ORC's own anti-slop\n# rules, and THEY WIN wherever the two disagree.\n#\n# Put each one under the heading you want it read at — P0 first, then P1,\n# then P2 — in as many lines as you like. There is no one-line rule and no\n# rule count: the whole block is handed to every agent VERBATIM.\n#\n# To switch an ORC rule off, name its id in your own rule:\n# OSW-13: em dashes are our house voice. Use them freely.\n#\n# Anything above the first `## P0` heading is a note to yourself and is never\n# dispatched. Edit this file directly, or in `orc ui` ▸ Rules.\n\n## P0\n\nNever name a customer in a commit message or a PR body. Use the account id.\nEvery public function in src/api/ carries a one-line comment naming its caller.\n\n## P1\n\nPrefer Result<T, E> over throwing inside src/core/.\nOSW-13: em dashes are our house voice. Use them where they read best.\n\n## P2\n\nSay \"customer\", never \"user\", in anything a customer reads.\n",
|
|
722
|
+
"template": "# ORC · project rules\n#\n# This project's own standing instructions — about the words ORC writes and\n# the shape of the code it writes. They are read BEFORE ORC's own anti-slop\n# rules, and THEY WIN wherever the two disagree.\n#\n# Put each one under the heading you want it read at — P0 first, then P1,\n# then P2 — in as many lines as you like. There is no one-line rule and no\n# rule count: the whole block is handed to every agent VERBATIM.\n#\n# To switch an ORC rule off, name its id in your own rule:\n# OSW-13: em dashes are our house voice. Use them freely.\n#\n# Anything above the first `## P0` heading is a note to yourself and is never\n# dispatched. Edit this file directly, or in `orc ui` ▸ Rules.\n\n## P0\n\n## P1\n\n## P2\n",
|
|
723
|
+
"counts": {
|
|
724
|
+
"P0": 2,
|
|
725
|
+
"P1": 2,
|
|
726
|
+
"P2": 1
|
|
727
|
+
}
|
|
728
|
+
},
|
|
729
|
+
"priorities": [
|
|
730
|
+
"P0",
|
|
731
|
+
"P1",
|
|
732
|
+
"P2"
|
|
733
|
+
],
|
|
734
|
+
"tiers": [
|
|
735
|
+
"HARD",
|
|
736
|
+
"PURPOSE",
|
|
737
|
+
"LOCK"
|
|
738
|
+
],
|
|
739
|
+
"precedence": [
|
|
740
|
+
{
|
|
741
|
+
"rank": 1,
|
|
742
|
+
"layer": "house rules",
|
|
743
|
+
"scope": "CODE and agent BEHAVIOUR only",
|
|
744
|
+
"where": "_shared/phases/house-rules.md + the project's CLAUDE.md P0",
|
|
745
|
+
"beats": "everything below it, always"
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"rank": 2,
|
|
749
|
+
"layer": "your rules",
|
|
750
|
+
"scope": "everything",
|
|
751
|
+
"where": "<claude>/orc/rules.md",
|
|
752
|
+
"beats": "the ORC rules OUTRIGHT on any conflict"
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
"rank": 3,
|
|
756
|
+
"layer": "ORC rules",
|
|
757
|
+
"scope": "everything",
|
|
758
|
+
"where": "<claude>/skills/_shared/rules/",
|
|
759
|
+
"beats": "nothing — it is the floor, and yours replaces it"
|
|
760
|
+
}
|
|
761
|
+
],
|
|
762
|
+
"overrides": [
|
|
763
|
+
{
|
|
764
|
+
"id": "OSW-13",
|
|
765
|
+
"priority": "P1",
|
|
766
|
+
"line": "OSW-13: em dashes are our house voice. Use them where they read best.",
|
|
767
|
+
"known": true,
|
|
768
|
+
"tier": "PURPOSE",
|
|
769
|
+
"title": "Em dash dose cap"
|
|
770
|
+
}
|
|
771
|
+
],
|
|
772
|
+
"overrides_note": "counted from ORC rule ids you NAMED in your own rules. A conflict you did not name is found by the agent at dispatch and returned as rules_conflicts[] — the CLI cannot parse intent, so it does not pretend to.",
|
|
773
|
+
"lanes": {
|
|
774
|
+
"orc": [
|
|
775
|
+
"writing",
|
|
776
|
+
"code",
|
|
777
|
+
"delivery"
|
|
778
|
+
],
|
|
779
|
+
"orc-mini": [
|
|
780
|
+
"writing",
|
|
781
|
+
"code",
|
|
782
|
+
"delivery"
|
|
783
|
+
],
|
|
784
|
+
"orc-fast": [
|
|
785
|
+
"writing",
|
|
786
|
+
"code",
|
|
787
|
+
"delivery"
|
|
788
|
+
],
|
|
789
|
+
"orc-diy": [
|
|
790
|
+
"writing",
|
|
791
|
+
"code",
|
|
792
|
+
"delivery"
|
|
793
|
+
],
|
|
794
|
+
"orc-quick": [
|
|
795
|
+
"writing",
|
|
796
|
+
"code",
|
|
797
|
+
"delivery"
|
|
798
|
+
],
|
|
799
|
+
"orc-wiki": [
|
|
800
|
+
"writing",
|
|
801
|
+
"delivery"
|
|
802
|
+
],
|
|
803
|
+
"orc-learn": [
|
|
804
|
+
"writing",
|
|
805
|
+
"delivery"
|
|
806
|
+
],
|
|
807
|
+
"orc-claude": [
|
|
808
|
+
"writing",
|
|
809
|
+
"delivery"
|
|
810
|
+
],
|
|
811
|
+
"orc-analyze": [
|
|
812
|
+
"writing",
|
|
813
|
+
"delivery"
|
|
814
|
+
],
|
|
815
|
+
"orc-analyze-mini": [
|
|
816
|
+
"writing",
|
|
817
|
+
"delivery"
|
|
818
|
+
],
|
|
819
|
+
"orc-brainstorm": [
|
|
820
|
+
"writing",
|
|
821
|
+
"delivery"
|
|
822
|
+
],
|
|
823
|
+
"orc-grill": [
|
|
824
|
+
"writing",
|
|
825
|
+
"delivery"
|
|
826
|
+
],
|
|
827
|
+
"orc-pact": [
|
|
828
|
+
"writing",
|
|
829
|
+
"delivery"
|
|
830
|
+
],
|
|
831
|
+
"orc-boundary": [
|
|
832
|
+
"writing",
|
|
833
|
+
"delivery"
|
|
834
|
+
],
|
|
835
|
+
"orc-handoff": [
|
|
836
|
+
"writing",
|
|
837
|
+
"delivery"
|
|
838
|
+
],
|
|
839
|
+
"orc-export": [
|
|
840
|
+
"writing",
|
|
841
|
+
"delivery"
|
|
842
|
+
],
|
|
843
|
+
"orc-challenge": [
|
|
844
|
+
"writing",
|
|
845
|
+
"delivery"
|
|
846
|
+
],
|
|
847
|
+
"orc-poly": [
|
|
848
|
+
"writing",
|
|
849
|
+
"delivery"
|
|
850
|
+
],
|
|
851
|
+
"orc-aftermath": [
|
|
852
|
+
"writing",
|
|
853
|
+
"delivery"
|
|
854
|
+
],
|
|
855
|
+
"orc-budget": [
|
|
856
|
+
"writing",
|
|
857
|
+
"delivery"
|
|
858
|
+
],
|
|
859
|
+
"orc-retro": [
|
|
860
|
+
"writing",
|
|
861
|
+
"delivery"
|
|
862
|
+
],
|
|
863
|
+
"orc-verify": [
|
|
864
|
+
"writing",
|
|
865
|
+
"delivery"
|
|
866
|
+
],
|
|
867
|
+
"orc-pr-setup": [
|
|
868
|
+
"writing",
|
|
869
|
+
"delivery"
|
|
870
|
+
],
|
|
871
|
+
"orc-pr-driver": [
|
|
872
|
+
"writing",
|
|
873
|
+
"delivery"
|
|
874
|
+
],
|
|
875
|
+
"orc-test": [
|
|
876
|
+
"writing",
|
|
877
|
+
"delivery"
|
|
878
|
+
],
|
|
879
|
+
"orc-route": [
|
|
880
|
+
"writing",
|
|
881
|
+
"delivery"
|
|
882
|
+
],
|
|
883
|
+
"orc-explain": [
|
|
884
|
+
"writing",
|
|
885
|
+
"delivery"
|
|
886
|
+
],
|
|
887
|
+
"context-combiner": [
|
|
888
|
+
"writing",
|
|
889
|
+
"delivery"
|
|
890
|
+
]
|
|
891
|
+
},
|
|
892
|
+
"excluded": {
|
|
893
|
+
"orc-doc": "has its own ledger: `orc doc rules`"
|
|
894
|
+
},
|
|
895
|
+
"boundary": "Rules govern WHAT is written and HOW it reads, and WHAT SHAPE of code is acceptable. They can never change how a lane RUNS: the scoring, the wave order, the gates, the dispatch contract, the ship rules, or any lane's structural and safety rules. A rule that asks for one of those comes back as unsupported_request — never a guessed compromise."
|
|
896
|
+
};
|
|
897
|
+
|
|
898
|
+
module.exports.rulesLint = {
|
|
899
|
+
"ok": true,
|
|
900
|
+
"source": "paths",
|
|
901
|
+
"files": 2,
|
|
902
|
+
"findings": [
|
|
903
|
+
{
|
|
904
|
+
"file": "docs.md",
|
|
905
|
+
"line": 3,
|
|
906
|
+
"rule": "OSW-10",
|
|
907
|
+
"tier": "HARD",
|
|
908
|
+
"pack": "writing",
|
|
909
|
+
"title": "Banned lexicon",
|
|
910
|
+
"evidence": "pivotal",
|
|
911
|
+
"fix": "use the plain word"
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
"file": "docs.md",
|
|
915
|
+
"line": 3,
|
|
916
|
+
"rule": "OSW-11",
|
|
917
|
+
"tier": "HARD",
|
|
918
|
+
"pack": "writing",
|
|
919
|
+
"title": "Banned phrases",
|
|
920
|
+
"evidence": "it is worth noting",
|
|
921
|
+
"fix": "delete the clause and keep the point"
|
|
922
|
+
},
|
|
923
|
+
{
|
|
924
|
+
"file": "src/checkout.js",
|
|
925
|
+
"line": 1,
|
|
926
|
+
"rule": "OSC-02",
|
|
927
|
+
"tier": "HARD",
|
|
928
|
+
"pack": "code",
|
|
929
|
+
"title": "No decorative separator",
|
|
930
|
+
"evidence": "==========================",
|
|
931
|
+
"fix": "one plain line, or nothing"
|
|
932
|
+
},
|
|
933
|
+
{
|
|
934
|
+
"file": "src/checkout.js",
|
|
935
|
+
"line": 2,
|
|
936
|
+
"rule": "OSC-02",
|
|
937
|
+
"tier": "HARD",
|
|
938
|
+
"pack": "code",
|
|
939
|
+
"title": "No decorative separator",
|
|
940
|
+
"evidence": "MAIN LOGIC",
|
|
941
|
+
"fix": "sentence case, and only if the label carries a fact"
|
|
942
|
+
},
|
|
943
|
+
{
|
|
944
|
+
"file": "src/checkout.js",
|
|
945
|
+
"line": 2,
|
|
946
|
+
"rule": "OSC-04",
|
|
947
|
+
"tier": "HARD",
|
|
948
|
+
"pack": "code",
|
|
949
|
+
"title": "No empty label",
|
|
950
|
+
"evidence": "MAIN LOGIC",
|
|
951
|
+
"fix": "the label names a category, not a fact — delete it"
|
|
952
|
+
},
|
|
953
|
+
{
|
|
954
|
+
"file": "src/checkout.js",
|
|
955
|
+
"line": 3,
|
|
956
|
+
"rule": "OSC-03",
|
|
957
|
+
"tier": "HARD",
|
|
958
|
+
"pack": "code",
|
|
959
|
+
"title": "No workflow narration",
|
|
960
|
+
"evidence": "Step 1: Validate input",
|
|
961
|
+
"fix": "the control flow is already visible — delete it"
|
|
962
|
+
},
|
|
963
|
+
{
|
|
964
|
+
"file": "src/checkout.js",
|
|
965
|
+
"line": 5,
|
|
966
|
+
"rule": "OSC-05",
|
|
967
|
+
"tier": "HARD",
|
|
968
|
+
"pack": "code",
|
|
969
|
+
"title": "A TODO names a task",
|
|
970
|
+
"evidence": "TODO: improve this",
|
|
971
|
+
"fix": "name the task and enough context to act on it, or delete it"
|
|
972
|
+
}
|
|
973
|
+
],
|
|
974
|
+
"count": 7,
|
|
975
|
+
"checked": [
|
|
976
|
+
"OSW-10",
|
|
977
|
+
"OSW-11",
|
|
978
|
+
"OSW-18",
|
|
979
|
+
"OSC-02",
|
|
980
|
+
"OSC-03",
|
|
981
|
+
"OSC-04",
|
|
982
|
+
"OSC-05",
|
|
983
|
+
"OSC-06",
|
|
984
|
+
"OSC-07",
|
|
985
|
+
"OSC-21",
|
|
986
|
+
"OSU-03",
|
|
987
|
+
"OSU-06"
|
|
988
|
+
],
|
|
989
|
+
"checked_count": 12,
|
|
990
|
+
"not_checked_count": 53,
|
|
991
|
+
"total_rules": 65,
|
|
992
|
+
"coverage": "checked 12 rules of 65 — not checked here: 53 rules. They need a reader, not a matcher.",
|
|
993
|
+
"suppressed": [
|
|
994
|
+
"OSW-13"
|
|
995
|
+
],
|
|
996
|
+
"suppressed_note": "your own rules name these ids, so the check is off here. Precedence runs; it is not only written down.",
|
|
997
|
+
"exempt": {
|
|
998
|
+
"packs": [],
|
|
999
|
+
"files": []
|
|
1000
|
+
},
|
|
1001
|
+
"exempt_note": "a rules pack has to print a banned word to define it, so the packs are skipped whole. `orc-rules-ignore-file` in a head, or `orc-rules-ignore` on a line, is your own opt-out. Both are counted here rather than being silent."
|
|
1002
|
+
};
|