@bompus/house-rules 0.0.0-stage → 0.13.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.
Files changed (236) hide show
  1. package/CODE_OF_CONDUCT.md +83 -0
  2. package/CONTRIBUTING.md +54 -0
  3. package/LICENSE +21 -0
  4. package/README.md +378 -2
  5. package/THIRD_PARTY_NOTICES.md +188 -0
  6. package/compose.mjs +125 -0
  7. package/composition.mjs +361 -0
  8. package/config-view.mjs +209 -0
  9. package/config.mjs +381 -0
  10. package/docs/assets/banner-dark.png +0 -0
  11. package/docs/assets/banner-light.png +0 -0
  12. package/docs/assets/overview.png +0 -0
  13. package/docs/configuration.md +269 -0
  14. package/docs/skill-names.md +50 -0
  15. package/examples/person/house-rules.json +15 -0
  16. package/examples/person/rules/10-tooling.md +8 -0
  17. package/examples/person/rules/20-reporting.md +9 -0
  18. package/examples/project/AGENTS.md +18 -0
  19. package/package.json +42 -4
  20. package/rule-references.mjs +91 -0
  21. package/rules/core.md +340 -0
  22. package/rules/modifiers/backlog-outline.md +25 -0
  23. package/rules/modifiers/backlog-visual.md +16 -0
  24. package/rules/modifiers/coded-offers.md +70 -0
  25. package/rules/modifiers/cross-session-relay.md +23 -0
  26. package/rules/modifiers/effort-estimates.md +41 -0
  27. package/rules/modifiers/land-when-done.md +12 -0
  28. package/rules/modifiers/low-quota-handoff.md +20 -0
  29. package/rules/modifiers/model-default-questions.md +33 -0
  30. package/rules/modifiers/multi-agent.md +38 -0
  31. package/rules/modifiers/no-attribution.md +16 -0
  32. package/rules/modifiers/periodic-updates.md +25 -0
  33. package/rules/modifiers/plan-files.md +82 -0
  34. package/rules/modifiers/question-cards.md +48 -0
  35. package/rules/modifiers/release-batching.md +15 -0
  36. package/rules/modifiers/scratch-on-disk.md +15 -0
  37. package/rules/modifiers/shared-host-load.md +19 -0
  38. package/rules/modifiers/solo-operator.md +13 -0
  39. package/rules/modifiers/squash-landing.md +22 -0
  40. package/rules/modifiers/upstream-contributions.md +45 -0
  41. package/rules/modifiers/web-image-formats.md +35 -0
  42. package/rules/references/backlog-view.md +154 -0
  43. package/rules/references/github-actions.md +45 -0
  44. package/rules/references/landing.md +39 -0
  45. package/rules/references/multi-agent.md +51 -0
  46. package/rules/references/release-batching.md +66 -0
  47. package/rules/references/squash-landing.md +50 -0
  48. package/rules/references/thread-visuals.md +45 -0
  49. package/setup.mjs +445 -0
  50. package/skills/hr-agent-guidance-audit/LICENSE +21 -0
  51. package/skills/hr-agent-guidance-audit/SKILL.md +91 -0
  52. package/skills/hr-agent-guidance-audit/agents/openai.yaml +2 -0
  53. package/skills/hr-agent-guidance-audit/references/prune-workflow.md +72 -0
  54. package/skills/hr-agent-guidance-audit/references/records-and-lessons.md +60 -0
  55. package/skills/hr-agent-guidance-audit/references/retirement-verdicts.md +49 -0
  56. package/skills/hr-agent-guidance-refresh/LICENSE +21 -0
  57. package/skills/hr-agent-guidance-refresh/SKILL.md +36 -0
  58. package/skills/hr-agent-guidance-refresh/agents/openai.yaml +2 -0
  59. package/skills/hr-agent-guidance-refresh/references/verification.md +47 -0
  60. package/skills/hr-api-exposure-check/SKILL.md +159 -0
  61. package/skills/hr-api-exposure-check/agents/openai.yaml +3 -0
  62. package/skills/hr-audit-choices/SKILL.md +67 -0
  63. package/skills/hr-audit-choices/agents/openai.yaml +2 -0
  64. package/skills/hr-benchmarking/NOTICE.md +36 -0
  65. package/skills/hr-benchmarking/SKILL.md +279 -0
  66. package/skills/hr-benchmarking/agents/openai.yaml +2 -0
  67. package/skills/hr-benchmarking/references/javascript.md +130 -0
  68. package/skills/hr-benchmarking/references/tools.md +165 -0
  69. package/skills/hr-benchmarking/scripts/process-attribution.ps1 +20 -0
  70. package/skills/hr-benchmarking/scripts/process-attribution.py +107 -0
  71. package/skills/hr-better-accessibility/LICENSE +22 -0
  72. package/skills/hr-better-accessibility/NOTICE.md +46 -0
  73. package/skills/hr-better-accessibility/SKILL.md +119 -0
  74. package/skills/hr-better-accessibility/agents/openai.yaml +3 -0
  75. package/skills/hr-better-accessibility/focus-and-keyboard.md +130 -0
  76. package/skills/hr-better-accessibility/forms.md +82 -0
  77. package/skills/hr-better-accessibility/hit-areas.md +98 -0
  78. package/skills/hr-better-accessibility/motion-and-zoom.md +81 -0
  79. package/skills/hr-better-accessibility/screen-readers.md +102 -0
  80. package/skills/hr-better-accessibility/semantics-and-aria.md +84 -0
  81. package/skills/hr-better-colors/LICENSE +21 -0
  82. package/skills/hr-better-colors/NOTICE.md +37 -0
  83. package/skills/hr-better-colors/SKILL.md +114 -0
  84. package/skills/hr-better-colors/agents/openai.yaml +3 -0
  85. package/skills/hr-better-colors/color-formats.md +90 -0
  86. package/skills/hr-better-colors/color-usage.md +140 -0
  87. package/skills/hr-better-colors/contrast.md +80 -0
  88. package/skills/hr-better-colors/palette-generation.md +104 -0
  89. package/skills/hr-better-colors/palette-structure.md +76 -0
  90. package/skills/hr-better-colors/token-naming.md +97 -0
  91. package/skills/hr-better-layout/LICENSE +22 -0
  92. package/skills/hr-better-layout/NOTICE.md +48 -0
  93. package/skills/hr-better-layout/SKILL.md +92 -0
  94. package/skills/hr-better-layout/agents/openai.yaml +3 -0
  95. package/skills/hr-better-layout/grouping-and-alignment.md +144 -0
  96. package/skills/hr-better-layout/spacing-and-adaptivity.md +215 -0
  97. package/skills/hr-better-typography/LICENSE +22 -0
  98. package/skills/hr-better-typography/NOTICE.md +46 -0
  99. package/skills/hr-better-typography/SKILL.md +172 -0
  100. package/skills/hr-better-typography/agents/openai.yaml +3 -0
  101. package/skills/hr-better-typography/choosing-fonts.md +69 -0
  102. package/skills/hr-better-typography/css-cheat-sheet.md +65 -0
  103. package/skills/hr-better-typography/details-and-accessibility.md +119 -0
  104. package/skills/hr-better-typography/spacing-and-sizing.md +131 -0
  105. package/skills/hr-better-typography/variable-fonts-and-opentype.md +105 -0
  106. package/skills/hr-better-typography/wrapping-and-punctuation.md +57 -0
  107. package/skills/hr-better-writing/LICENSE +22 -0
  108. package/skills/hr-better-writing/NOTICE.md +46 -0
  109. package/skills/hr-better-writing/SKILL.md +122 -0
  110. package/skills/hr-better-writing/agents/openai.yaml +3 -0
  111. package/skills/hr-code-review/LICENSE +21 -0
  112. package/skills/hr-code-review/NOTICE.md +26 -0
  113. package/skills/hr-code-review/SKILL.md +163 -0
  114. package/skills/hr-code-review/agents/openai.yaml +3 -0
  115. package/skills/hr-code-review/references/acp-client.md +43 -0
  116. package/skills/hr-code-review/references/evidence.md +57 -0
  117. package/skills/hr-code-review/references/impact.md +103 -0
  118. package/skills/hr-code-review/references/panel-adjudication.md +58 -0
  119. package/skills/hr-code-review/references/panel-plan.md +61 -0
  120. package/skills/hr-code-review/references/panel-recommendations.json +105 -0
  121. package/skills/hr-code-review/references/panel-recommendations.md +46 -0
  122. package/skills/hr-code-review/references/panel-setup.md +54 -0
  123. package/skills/hr-code-review/references/reviewer-role.md +31 -0
  124. package/skills/hr-code-review/scripts/acp-panel-client.mjs +299 -0
  125. package/skills/hr-code-review/scripts/check-receipts.mjs +263 -0
  126. package/skills/hr-code-review/scripts/panel-plan.mjs +69 -0
  127. package/skills/hr-code-review/scripts/panel-preferences.mjs +220 -0
  128. package/skills/hr-design-exploration/SKILL.md +105 -0
  129. package/skills/hr-design-exploration/agents/openai.yaml +4 -0
  130. package/skills/hr-diagnosing-bugs/NOTICE.md +45 -0
  131. package/skills/hr-diagnosing-bugs/SKILL.md +108 -0
  132. package/skills/hr-diagnosing-bugs/agents/openai.yaml +3 -0
  133. package/skills/hr-diagnosing-bugs/references/reporting.md +97 -0
  134. package/skills/hr-diagnosing-bugs/scripts/check-pr-offer.mjs +47 -0
  135. package/skills/hr-explain-code/NOTICE.md +37 -0
  136. package/skills/hr-explain-code/SKILL.md +110 -0
  137. package/skills/hr-explain-code/agents/openai.yaml +5 -0
  138. package/skills/hr-explain-code/references/helper-brief.md +39 -0
  139. package/skills/hr-extract-shared-steps/SKILL.md +134 -0
  140. package/skills/hr-extract-shared-steps/agents/openai.yaml +3 -0
  141. package/skills/hr-forgotten-work-audit/SKILL.md +130 -0
  142. package/skills/hr-forgotten-work-audit/references/brief-template.md +56 -0
  143. package/skills/hr-forgotten-work-audit/references/result-format.md +46 -0
  144. package/skills/hr-handoff/LICENSE +21 -0
  145. package/skills/hr-handoff/NOTICE.md +29 -0
  146. package/skills/hr-handoff/SKILL.md +114 -0
  147. package/skills/hr-handoff/agents/openai.yaml +5 -0
  148. package/skills/hr-handoff/assets/ledger.example.json +10 -0
  149. package/skills/hr-handoff/assets/receipt.example.json +76 -0
  150. package/skills/hr-handoff/assets/source.example.json +20 -0
  151. package/skills/hr-handoff/references/reconciliation.md +124 -0
  152. package/skills/hr-handoff/references/successor-thread.md +76 -0
  153. package/skills/hr-handoff/scripts/check-reconciliation.mjs +324 -0
  154. package/skills/hr-house-rules-setup/SKILL.md +114 -0
  155. package/skills/hr-house-rules-setup/agents/openai.yaml +5 -0
  156. package/skills/hr-issue-tracker-setup/SKILL.md +49 -0
  157. package/skills/hr-issue-tracker-setup/agents/openai.yaml +5 -0
  158. package/skills/hr-lean-plan/SKILL.md +146 -0
  159. package/skills/hr-lean-plan/agents/openai.yaml +5 -0
  160. package/skills/hr-maintainability-review/SKILL.md +186 -0
  161. package/skills/hr-maintainability-review/agents/openai.yaml +5 -0
  162. package/skills/hr-manual-qa/NOTICE.md +36 -0
  163. package/skills/hr-manual-qa/SKILL.md +37 -0
  164. package/skills/hr-manual-qa/agents/openai.yaml +3 -0
  165. package/skills/hr-navigation-retro/LICENSE +21 -0
  166. package/skills/hr-navigation-retro/NOTICE.md +5 -0
  167. package/skills/hr-navigation-retro/SKILL.md +86 -0
  168. package/skills/hr-navigation-retro/agents/openai.yaml +4 -0
  169. package/skills/hr-navigation-retro/references/inputs.md +67 -0
  170. package/skills/hr-navigation-retro/scripts/retro.py +552 -0
  171. package/skills/hr-navigation-retro/scripts/transcripts.py +205 -0
  172. package/skills/hr-ordering-tests/SKILL.md +51 -0
  173. package/skills/hr-ordering-tests/agents/openai.yaml +2 -0
  174. package/skills/hr-plain-prose/SKILL.md +264 -0
  175. package/skills/hr-plain-prose/agents/openai.yaml +3 -0
  176. package/skills/hr-plain-prose/scripts/check.mjs +331 -0
  177. package/skills/hr-pr-followup/LICENSE +21 -0
  178. package/skills/hr-pr-followup/NOTICE.md +9 -0
  179. package/skills/hr-pr-followup/SKILL.md +74 -0
  180. package/skills/hr-pr-followup/agents/openai.yaml +2 -0
  181. package/skills/hr-pr-followup/references/review-helpers.md +111 -0
  182. package/skills/hr-pr-followup/scripts/check-landing.py +204 -0
  183. package/skills/hr-pr-followup/scripts/check-pr-review.ts +510 -0
  184. package/skills/hr-pr-followup/scripts/merge-pr.sh +100 -0
  185. package/skills/hr-pr-followup/scripts/resolve-pr-thread.ts +219 -0
  186. package/skills/hr-pr-followup/scripts/verify-landed.sh +184 -0
  187. package/skills/hr-progress-report/SKILL.md +49 -0
  188. package/skills/hr-progress-report/agents/openai.yaml +5 -0
  189. package/skills/hr-read-reddit/SKILL.md +44 -0
  190. package/skills/hr-read-reddit/agents/openai.yaml +2 -0
  191. package/skills/hr-read-reddit/scripts/reddit.ts +252 -0
  192. package/skills/hr-read-x-links/SKILL.md +42 -0
  193. package/skills/hr-read-x-links/agents/openai.yaml +2 -0
  194. package/skills/hr-read-x-links/scripts/x-post.ts +264 -0
  195. package/skills/hr-research-shared-links/SKILL.md +103 -0
  196. package/skills/hr-split-to-prs/LICENSE +21 -0
  197. package/skills/hr-split-to-prs/NOTICE.md +9 -0
  198. package/skills/hr-split-to-prs/SKILL.md +61 -0
  199. package/skills/hr-split-to-prs/agents/openai.yaml +2 -0
  200. package/skills/hr-sqlite/SKILL.md +174 -0
  201. package/skills/hr-sqlite/agents/openai.yaml +2 -0
  202. package/skills/hr-sqlite/references/evidence.md +94 -0
  203. package/skills/hr-sqlite/references/tool-decisions.md +39 -0
  204. package/skills/hr-sqlite/scripts/inspect-sqlite.py +245 -0
  205. package/skills/hr-stock-ui-audit/SKILL.md +132 -0
  206. package/skills/hr-stock-ui-audit/agents/openai.yaml +3 -0
  207. package/skills/hr-stock-ui-audit/scripts/scan.mjs +619 -0
  208. package/skills/hr-tdd/LICENSE +21 -0
  209. package/skills/hr-tdd/NOTICE.md +10 -0
  210. package/skills/hr-tdd/SKILL.md +40 -0
  211. package/skills/hr-tdd/agents/openai.yaml +3 -0
  212. package/skills/hr-tdd/mocking.md +39 -0
  213. package/skills/hr-tdd/tests.md +77 -0
  214. package/skills/hr-test-audit/LICENSE +21 -0
  215. package/skills/hr-test-audit/NOTICE.md +67 -0
  216. package/skills/hr-test-audit/SKILL.md +146 -0
  217. package/skills/hr-test-audit/agents/openai.yaml +3 -0
  218. package/skills/hr-test-audit/scripts/floor-guard.ts +137 -0
  219. package/skills/hr-usage-report/SKILL.md +90 -0
  220. package/skills/hr-usage-report/agents/openai.yaml +2 -0
  221. package/skills/hr-usage-report/assets/example-report.json +125 -0
  222. package/skills/hr-usage-report/assets/report-template.html +377 -0
  223. package/skills/hr-usage-report/scripts/render-report.ts +86 -0
  224. package/skills/hr-usage-report/scripts/usage-by-model.ts +499 -0
  225. package/skills/hr-what-next/SKILL.md +151 -0
  226. package/skills/hr-what-next/agents/openai.yaml +4 -0
  227. package/skills/hr-what-next/references/reporting.md +59 -0
  228. package/skills/hr-what-next/scripts/check-open-work.mjs +711 -0
  229. package/skills/hr-writing-for-agents/NOTICE.md +46 -0
  230. package/skills/hr-writing-for-agents/SKILL-MECHANICS.md +83 -0
  231. package/skills/hr-writing-for-agents/SKILL.md +108 -0
  232. package/skills/hr-writing-for-agents/agents/openai.yaml +3 -0
  233. package/skills/hr-writing-pr/NOTICE.md +48 -0
  234. package/skills/hr-writing-pr/SKILL.md +119 -0
  235. package/skills/hr-writing-pr/agents/openai.yaml +2 -0
  236. package/skills/hr-writing-pr/scripts/benefit-chart.py +200 -0
@@ -0,0 +1,57 @@
1
+ # Assess review evidence
2
+
3
+ Apply this method to the pinned review scope, locally or in a read-only review.
4
+ The repository owns required checks, gates and waivers; this method adds no
5
+ permission to run commands, edit files or expand the review scope.
6
+
7
+ ## Read the scope and its evidence
8
+
9
+ Start from the requested intent, diff, changed paths and verification evidence.
10
+ Use an existing review packet when supplied; do not require a particular
11
+ artifact path or release workflow. Read applicable repository guidance not
12
+ already in context. Report missing scope or required evidence.
13
+
14
+ Inspect changed regions first. When a supplied diff or shell is unavailable,
15
+ locate those regions with available read-only search and file tools. Trace
16
+ source, tests and consumers where needed to assess a concrete risk. Respect
17
+ scope limits; name dependencies needing assessment outside them rather than
18
+ asserting they are safe.
19
+
20
+ Check behavior against requirements, invariants and testing standards. Treat a
21
+ completion claim as a hypothesis to refute from the diff and evidence. For a
22
+ bug fix, look for evidence that its regression test failed on the pre-fix code
23
+ for the intended reason and passed after the fix. Missing evidence is a
24
+ verification limit; whether it blocks follows the project's gate rules.
25
+
26
+ ## Account for weakened tests
27
+
28
+ Before judging the change, list each existing test the diff deletes, skips,
29
+ marks as expected to fail or weakens. Include narrowed assertions, widened
30
+ tolerances and expected values rewritten to match new output. Require a stated
31
+ reason tied to the changed requirement or supported test-audit evidence.
32
+ An unexplained change is missing verification; classify it under the project's
33
+ verification requirements rather than accepting the new output as its reason.
34
+
35
+ When test auditing is in scope, use the installed `hr-test-audit` bundle's
36
+ method and floor guard if available and command execution is authorized.
37
+ The guard detects some weakening patterns; a clean result does not replace
38
+ reading changed assertions. Report unavailable coverage without installing or
39
+ running tools outside the selected scope.
40
+
41
+ ## Trace emitted results
42
+
43
+ For input-to-output code such as resolvers, parsers or extractors, trace every
44
+ path in scope to its emitted result before reporting performance or structure
45
+ findings. Start from the nearest test fixture and construct the smallest input
46
+ change that would emit a wrong result or drop a correct one. Report a confirmed
47
+ counterexample with the fixture, changed input, expected and emitted results,
48
+ and `path:line` for the steps. When no counterexample is found, record the paths
49
+ and cases assessed; do not invent a failing result to fill the report.
50
+
51
+ ## Ground the result
52
+
53
+ Do not repeat verified lint, type or format checks or invent release gates.
54
+ Confirm each finding with its file and line, violated requirement and evidence.
55
+ Distinguish confirmed defects from unresolved questions and omit speculative
56
+ findings. Report missing evidence and unassessed requirements separately.
57
+ A review pass does not establish that unrun checks passed.
@@ -0,0 +1,103 @@
1
+ # Change impact
2
+
3
+ Loaded by `hr-code-review` for its Impact section.
4
+
5
+ The diff shows what changed. This skill asks what else depends on the old
6
+ behavior, and whether the change is safe for a reason someone has seen work.
7
+ Follow project guidance for commands, test runners and domain safeguards.
8
+
9
+ ## Scope the change
10
+
11
+ Read the whole diff and the code around each hunk. Write one or two sentences
12
+ on what the change does, including behavior a reader of the diff could miss:
13
+ a new default, a reordered side effect, a changed error type, a value that is
14
+ now computed lazily or cached. If you cannot explain the change yet, read the
15
+ code first (see `hr-explain-code`) before judging its impact.
16
+
17
+ When the reason for old behavior affects the risk, inspect relevant history.
18
+ Use a scoped `git log -p` or `git log -S<symbol>` where it can answer that
19
+ question; a literal symbol search may miss renames or indirect behavior.
20
+
21
+ ## Look past the call sites
22
+
23
+ List direct callers quickly; a compiler or a symbol search usually covers them,
24
+ and they are rarely where the surprise is. Spend the effort on coupling that a
25
+ symbol search does not see:
26
+
27
+ - **Stored and serialized shapes.** Field names, enum values, JSON keys,
28
+ cache keys, database columns, file formats and anything written today and
29
+ read back after a deploy or by an older version.
30
+ - **Other readers.** Another process, service, job, script or client that
31
+ consumes the output, the queue message, the log line or the API response.
32
+ Search for the literal strings, not only the symbol.
33
+ - **Supported surfaces.** Other screens, entry points, clients, providers and
34
+ connection modes that reach the behavior. Check reverse operations and
35
+ state transitions too, such as enabling/disabling or connecting/disconnecting,
36
+ when the feature supports them. Use the project's actual supported cases;
37
+ do not invent surfaces or expand project-mandated verification to cover
38
+ unsupported cases. Keep the focused probe below when existing tests do not
39
+ exercise a load-bearing assumption.
40
+ - **Timing.** Startup order, background workers, scheduled jobs, retries,
41
+ timeouts and shutdown. A change that is correct on the request path can
42
+ break a job that runs once a night.
43
+ - **Configuration.** Environment variables, feature flags, defaults that
44
+ differ between environments, and code paths only one flag value reaches.
45
+ - **Dependencies as pinned.** How the library behaves at the version in the
46
+ lockfile, including local patches the project applies, not the version in
47
+ current upstream docs. Check the effective installed source, patch files or
48
+ changelog when the change relies on a specific behavior.
49
+
50
+ Each search is a finding. "No other reader of `order_status` found in this
51
+ repository or its deploy config" is worth reporting; say where you looked.
52
+ Never name a caller, consumer or API you have not seen at a real location.
53
+
54
+ ## Find the load-bearing assumption
55
+
56
+ A change that looks risky usually rests on one or two facts: no
57
+ consumer reads the old field, the flag is off in production, the migration
58
+ runs before the new code. Name those assumptions explicitly. Then put most of
59
+ the remaining effort into confirming or breaking them, rather than adding more
60
+ hypothetical risks to a list.
61
+
62
+ A risk that depends on an assumption you have already confirmed does not need
63
+ its own entry. A risk nobody can check deserves a sentence on why it cannot be
64
+ checked and who could.
65
+
66
+ ## Back each claim
67
+
68
+ A claim can rest on your word alone, on a source location that shows it, on
69
+ a failure path you walked step by step, or on real code that ran and gave the
70
+ result. These are not equal, and the reader cannot tell them apart unless you
71
+ say. Next to each important claim, state in a few words what backs it: "the
72
+ only reader is `billing/export.py:88`", "traced: a missing key falls through
73
+ to the default", "ran `test_legacy_payload`, passes".
74
+
75
+ When feasible within the selected scope, reproduce the behavior in the
76
+ running application for the strongest backing. Get the load-bearing assumption
77
+ at least to something that ran. A careful trace is enough for lesser claims.
78
+ A claim with nothing behind it is a gap; report it as one instead of dressing it up.
79
+
80
+ Prefer evidence that already exists: run the tests that cover the changed code
81
+ and read what they actually assert. When none exercise the assumption, write
82
+ the smallest probe that does, such as a script that round-trips an old
83
+ serialized record through the new code. Keep probes outside committed source,
84
+ or delete them before reporting, and say in the report that you did.
85
+
86
+ ## Report
87
+
88
+ Use these parts, in order:
89
+
90
+ 1. **What it does**: the change in plain terms, with the non-obvious behavior.
91
+ 2. **What it relies on**: each load-bearing assumption, its support, and
92
+ whether it held.
93
+ 3. **Risks**: for each real one, the location, how likely it is, what it costs
94
+ if it happens, and how to check it.
95
+ 4. **Ruled out**: concerns you examined and dismissed, with where you looked.
96
+ This keeps a reviewer from redoing the same search.
97
+ 5. **Before merging**: the specific check to run, with the command when there
98
+ is one, or "none needed" with the reason.
99
+
100
+ Keep the list of risks short. Three real ones with locations beat fifteen
101
+ possibilities. Before sharing publicly, follow the project's data-classification
102
+ policy. Remove credentials, personal data, private project names and URLs,
103
+ and local paths.
@@ -0,0 +1,58 @@
1
+ # Adjudicate a panel
2
+
3
+ Use this after a panel of models has answered the same brief and you must turn
4
+ their replies into one result. It covers reading the replies, checking what they
5
+ cite and reporting the choices. Resolving the seats comes first and is in
6
+ [the panel plan contract](panel-plan.md).
7
+
8
+ ## Read the replies
9
+
10
+ 1. Extract each seat's text from its log. List what the seats agree on and where
11
+ they contradict each other.
12
+ 2. For every claim that carries weight, note whether each seat cites a receipt
13
+ that passes the check below. Two seats that cite the same line, or neither
14
+ citing anything, are unverified agreement, not corroboration.
15
+ 3. Run the citation gate on the logs:
16
+
17
+ ```sh
18
+ node <skill-directory>/scripts/check-receipts.mjs --repo <repo> <panel-log>...
19
+ ```
20
+
21
+ A citation written as `` `name` (path:line) `` passes only when the identifier
22
+ appears on the cited lines. A bare `path:line` passes when the file has that
23
+ line. A file named by basename or subpath must resolve to exactly one file in
24
+ the repository. Exit 1 means adjudicate those claims by hand; it does not mean
25
+ the panel failed. Exit 2 means no citations were found, a log could not be read or the
26
+ arguments were wrong; treat it as an unverified gate. Only exit 0 passes. A citation
27
+ to a file outside the repository fails.
28
+
29
+ 4. A person checks the remaining claims against the source. Record the base you
30
+ chose, what you took from other seats, what you rejected and which seats
31
+ dropped out. Keep the logs in the task's scratch directory, not in the repository.
32
+
33
+ ## Compare competing implementations
34
+
35
+ When the brief asks seats to produce competing implementations and a cheap
36
+ objective check (tests, a diff) exists, state the rubric before the run. The
37
+ result may name a base and graft the others' best parts by hand, so the whole
38
+ stays coherent. Name the premise the choice depends on and challenge it with one
39
+ concrete case, including any hand edits made after the verdict. A graft that fails
40
+ the case is recorded as unresolved, not named a winner.
41
+
42
+ ## Break a tie
43
+
44
+ Give one seat both verdicts and your adjudication, and ask for residuals only,
45
+ under the same read-only contract. Residuals are what the reference method misses,
46
+ whether each surviving item is earned, and anything wrongly declined.
47
+
48
+ ## Open the report with a receipt
49
+
50
+ Begin every panel report with this header so the choices can be audited without
51
+ re-reading the thread:
52
+
53
+ - **Seats:** each model, its family and its role (consensus, contrarian, tie-break).
54
+ - **Settings per seat:** the effort or variant actually used and the one-line rule
55
+ that selected it (task mapping, seat rule or the user's explicit choice).
56
+ - **Deviations:** any seat that did not run as briefed (fallback route, escalation,
57
+ dropout) and what replaced it.
58
+ - **Adjudication basis:** the gate result, what was checked by hand and what remains inference.
@@ -0,0 +1,61 @@
1
+ # Panel plan
2
+
3
+ Use the bundled `../scripts/panel-plan.mjs` to see which seats stored panel
4
+ preferences resolve to before any model runs. It reads files and prints a plan;
5
+ it never launches a seat, discovers a provider, checks quota or changes a file.
6
+
7
+ ```sh
8
+ node <skill-directory>/scripts/panel-plan.mjs --bindings bindings.json \
9
+ --author-family <family-of-the-running-session> [--config <house-rules.json>] \
10
+ [--task task.json] [--project project.json --approve-project <sha256-of-project.json>] \
11
+ [--approve-metered <alias>] [--json]
12
+ ```
13
+
14
+ Exit 0 means a plan, 1 means named blockers, 2 means unreadable or invalid input.
15
+ `--config` defaults to the house-rules configuration; its `panel` section is the
16
+ user layer. Every input is a regular file, not a symlink.
17
+
18
+ ## Bindings
19
+
20
+ A user-owned file maps each alias to its exact launch and provenance. Only the
21
+ user's own file belongs here; credentials stay in the provider's authentication.
22
+
23
+ ```json
24
+ {
25
+ "version": 1,
26
+ "aliases": {
27
+ "review-primary": {
28
+ "families": ["anthropic"],
29
+ "metered": false,
30
+ "launch": { "runner": "claude", "model": "<id>", "effort": "<level>" }
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ `launch` is opaque to the resolver: the caller interprets and validates it. An
37
+ omitted `families` means the family is unknown. An unknown family cannot satisfy
38
+ `distinctFamilies` or `excludeAuthorFamily`, and an unknown author family
39
+ cannot be excluded.
40
+
41
+ ## Resolution
42
+
43
+ 1. Layers apply in order user, project, task. A later layer replaces a role's
44
+ whole candidate list; its new roles append. Project preferences count only
45
+ with `--approve-project` equal to the file's SHA-256 revision; otherwise the
46
+ plan is blocked, not silently reduced to the user layer.
47
+ 2. Policy only tightens: the lowest `roundLimit`, `fallback: none`,
48
+ `meteredRoutes: included-only`, and either layer's `distinctFamilies` or
49
+ `excludeAuthorFamily`. A reduced panel needs the user layer to allow it and no
50
+ other layer to forbid it.
51
+ 3. A candidate is skipped, with a reason, when it has no binding, an unknown or
52
+ author family under strict policy, or a metered route (never allowed under
53
+ `included-only`; under `explicit-approval-required` only with
54
+ `--approve-metered <alias>`). With
55
+ `fallback: none` only the first candidate of each role is tried.
56
+ 4. A role with no eligible candidate blocks the plan, or is dropped when a
57
+ reduced panel is allowed. Distinct families are found by trying later
58
+ candidates; if no combination works the plan is blocked.
59
+
60
+ The plan lists each seat, every skipped candidate and the round limit. It
61
+ certifies configuration only, not availability, quota or effective effort.
@@ -0,0 +1,105 @@
1
+ {
2
+ "version": 1,
3
+ "reviewed": "2026-10-14",
4
+ "entries": [
5
+ {
6
+ "id": "opus-5-5-bug-hunt",
7
+ "profiles": ["balanced"],
8
+ "task": "Find planted bugs: 105 across two repositories, count fixed",
9
+ "model": "claude-opus-5-5",
10
+ "harness": "Claude Code",
11
+ "route": "Anthropic first-party API",
12
+ "efforts": [
13
+ {
14
+ "effort": "medium",
15
+ "fixed": 30.3,
16
+ "listCostUsd": 15.68,
17
+ "wallMinutes": 17.0
18
+ },
19
+ {
20
+ "effort": "high",
21
+ "fixed": 31.7,
22
+ "listCostUsd": 22.25,
23
+ "wallMinutes": 23.9
24
+ },
25
+ {
26
+ "effort": "xhigh",
27
+ "fixed": 36.0,
28
+ "listCostUsd": 34.98,
29
+ "wallMinutes": 42.5
30
+ }
31
+ ],
32
+ "sourceUrl": "https://bughunt.productcompass.pm/data/benchmark.json",
33
+ "checked": "2026-10-14",
34
+ "samples": "3 runs per effort, non-superseded rows; each run covers both repositories",
35
+ "metric": "planted bugs fixed, mean of 3, out of 105",
36
+ "timeDefinition": "wall clock summed over both repositories; the board says these runs shared the machine with other work",
37
+ "costDefinition": "list-rate API price estimated from usage counts, summed over both repositories; not an invoice or subscription billing",
38
+ "limitations": "Counts planted bugs, not review quality on real changes; repeated attempts are not independent replications; runs used a 1M context window, and the board says its older Opus 5 rows are not comparable to these; the board also lists low and max rungs that this entry leaves out",
39
+ "rationale": "Medium used about 30% less cost and 29% less time than high for 1.4 fewer bugs; xhigh found more bugs at much higher cost and time. Medium supports a balanced starting point, not equivalence",
40
+ "status": "current"
41
+ },
42
+ {
43
+ "id": "sonnet-5-5-bug-hunt",
44
+ "profiles": ["balanced"],
45
+ "task": "Find planted bugs: 105 across two repositories, count fixed",
46
+ "model": "claude-sonnet-5-5",
47
+ "harness": "Claude Code",
48
+ "route": "Anthropic first-party API",
49
+ "efforts": [
50
+ {
51
+ "effort": "high",
52
+ "fixed": 34.3,
53
+ "listCostUsd": 19.85,
54
+ "wallMinutes": 27.9
55
+ },
56
+ {
57
+ "effort": "xhigh",
58
+ "fixed": 36.0,
59
+ "listCostUsd": 42.86,
60
+ "wallMinutes": 72.7
61
+ }
62
+ ],
63
+ "sourceUrl": "https://bughunt.productcompass.pm/data/benchmark.json",
64
+ "checked": "2026-10-14",
65
+ "samples": "3 runs per effort, non-superseded rows; each run covers both repositories",
66
+ "metric": "planted bugs fixed, mean of 3, out of 105",
67
+ "timeDefinition": "wall clock summed over both repositories; the board says the machine was idle for these runs, so the times do not compare with the Opus entry's",
68
+ "costDefinition": "list-rate API price estimated from usage counts, summed over both repositories; the board notes its harness priced this model on another model's table, so the dollar figure is less certain than the usage counts",
69
+ "limitations": "Same board limits as the Opus entry; its older Sonnet 5 rows are not comparable to these; the board also lists low, medium and max rungs that this entry leaves out",
70
+ "rationale": "At high and xhigh it found 34.3 and 36.0 planted bugs against Opus's 31.7 and 36.0, at similar cost ($19.85 and $42.86 against $22.25 and $34.98); the times are not comparable. Suggest it only where the user allows that model and effort",
71
+ "status": "current"
72
+ },
73
+ {
74
+ "id": "muse-wonder-full-bug-hunt",
75
+ "profiles": ["balanced"],
76
+ "task": "Find planted bugs: 105 across two repositories, count fixed",
77
+ "model": "muse-wonder-full-1.0",
78
+ "harness": "Muse Code (Meta's agent CLI)",
79
+ "route": "Meta API through a Muse Code subscription plan; no per-use price",
80
+ "efforts": [
81
+ {
82
+ "effort": "xhigh",
83
+ "fixed": 41.5,
84
+ "listCostUsd": "unknown",
85
+ "wallMinutes": 90.5
86
+ },
87
+ {
88
+ "effort": "max",
89
+ "fixed": 42,
90
+ "listCostUsd": "unknown",
91
+ "wallMinutes": 145.3
92
+ }
93
+ ],
94
+ "sourceUrl": "https://bughunt.productcompass.pm/data/benchmark.json",
95
+ "checked": "2026-10-14",
96
+ "samples": "2 runs per effort (xhigh 44 and 39, max 44 and 40); each run covers both repositories",
97
+ "metric": "planted bugs fixed, mean of 2, out of 105",
98
+ "timeDefinition": "active wall clock summed over both repositories; the board says its machine was shared with other work, and the second run of each effort was resumed in segments across two Muse Code versions, so only its active time is counted",
99
+ "costDefinition": "unknown: Meta publishes no price for this model, so no dollar figure is recorded",
100
+ "limitations": "Two runs per effort, and the board measures a median 1.7-point run-to-run move on three-run configurations, so the 0.5-point gap between xhigh and max is not a difference; the board lists no high or lower rung; the board's own note says max led on one repository and xhigh on the other; reachable only through a Muse Code subscription plan, so it fits a user who already has one; its usage draws on that plan's rolling windows, which the board does not measure",
101
+ "rationale": "xhigh fixed 41.5 planted bugs against Opus 5.5 xhigh's 36.0 and Sonnet 5.5 xhigh's 36.0, in a time the board says is loosely comparable at best, and max added nothing clear for 55 more minutes. Suggest it as an additional seat from a different model family where the user has a Muse Code plan and allows the effort; start at xhigh, and use max only on request",
102
+ "status": "current"
103
+ }
104
+ ]
105
+ }
@@ -0,0 +1,46 @@
1
+ # Panel recommendations
2
+
3
+ Load this only during [panel setup](panel-setup.md) or when the user asks for
4
+ recommendations. [`panel-recommendations.json`](panel-recommendations.json) holds
5
+ the entries; this page says how to read them.
6
+
7
+ The entries are dated suggestions for choosing seats, not measured guarantees,
8
+ capability tiers or required seat counts. A model or effort here can be absent from
9
+ a user's catalog, over their limit or excluded by them; the user's limits win.
10
+
11
+ ## Profiles
12
+
13
+ | Profile | Intended use | Starting shape |
14
+ | ---------- | --------------------------------------------- | ----------------------------------------------------------- |
15
+ | `quick` | A bounded question with an objective verifier | Two eligible independent models, limited reply scope |
16
+ | `balanced` | A substantive review with explicit criteria | Two models, with an explicitly permitted residual tie-break |
17
+ | `deep` | A broad or difficult review the user selected | A named larger panel, with receipt checks and adjudication |
18
+
19
+ The `quick` and `deep` profiles have no entry yet; current entries are tagged
20
+ `balanced` only. The only recorded evidence here, the Bug Hunt board,
21
+ measures single model-and-effort runs on a find-every-planted-bug task. It does not
22
+ test a two-model panel with a limited reply scope, or a larger panel with receipt
23
+ checks and adjudication, so tagging an entry `quick` or `deep` would extrapolate.
24
+ For those profiles, suggest only the shape in the table and the user's own limits,
25
+ and say that no recorded evidence backs a seat choice.
26
+
27
+ ## Reading an entry
28
+
29
+ Each entry names the task the evidence measures, the exact model and effort, the
30
+ harness and route, the source URL, the date it was checked, the number of runs, the
31
+ quality metric and its definitions of time and cost, the limits of the evidence and
32
+ why it is suggested. A value that was not recorded is the string `unknown`.
33
+
34
+ - Compare entries only on the same board and conditions. A board's task time is not
35
+ a host's time to finish.
36
+ - Public list prices are not a user's subscription billing.
37
+ - A `status` other than `current` (`superseded`, `withdrawn`, `unverified`) stays
38
+ listed with its evidence and is not suggested.
39
+
40
+ ## Updating
41
+
42
+ Check an entry again when a model, route, price or benchmark correction changes the
43
+ choice, and when preparing a release. Only changed entries need new evidence. An
44
+ update shows the old and suggested choices, the evidence date, the expected
45
+ tradeoff and the uncertainty; the user confirms before any saved preference
46
+ changes, and installing a newer catalog leaves saved profiles and bindings alone.
@@ -0,0 +1,54 @@
1
+ # Panel setup
2
+
3
+ Use this procedure on first use of a panel, or when the user asks to set one up,
4
+ change it or see recommendations. It chooses and saves preferences only. It never
5
+ launches a seat, probes a provider, buys anything or changes a provider setting.
6
+ An explicit request that names every seat can run without setup; saving that
7
+ choice afterwards is a separate opt-in.
8
+
9
+ ## First-use conversation
10
+
11
+ 1. Read the project's review gates and any seats, models or limits the user
12
+ already named. Find saved preferences and bindings. Do not import unrelated
13
+ settings.
14
+ 2. Use the host's read-only catalog or discovery interface to list routes. Record
15
+ the host, adapter version, observation time, provider instance and exact model
16
+ and effort options. Without one, ask the user which routes they have and label
17
+ the answers user-reported. Do not scan installed agent state.
18
+ 3. Show tooling, catalog and account access as separate evidence. An installed CLI
19
+ proves tooling, a catalog entry proves an advertised choice, and unknown quota
20
+ stays unknown. Read account status only through supported nonsecret commands.
21
+ 4. Ask only what is still open, reusing answers already given:
22
+ - Which detected routes may the panel use? Keep included subscription routes,
23
+ approved metered routes and routes with unknown access apart.
24
+ - Is this a quick second opinion, a balanced review or a deep review?
25
+ - May seats be suggested, or must a named list be kept? Are there hard model or
26
+ effort limits, required seats or author-family exclusions?
27
+ - If a route is unavailable, are there approved alternatives, an approved
28
+ reduced panel, or no substitution?
29
+ - What spending and round limits apply? Say so when billing or enforcement is
30
+ unknown, before asking to use the route.
31
+ 5. Suggest a profile from [the recommendations](panel-recommendations.md), filtered
32
+ by the discovered routes and the user's limits. Show each seat's alias, model
33
+ family, effort, route, ordered alternatives and unsupported controls, with the
34
+ entry's checked date and limits. A suggestion is not a commitment.
35
+ 6. Write the portable preferences (the `panel` object described under "Optional
36
+ panel preferences" in house-rules' `docs/configuration.md`) and, separately,
37
+ the user's local bindings (see [the panel plan](panel-plan.md)).
38
+ Run `config preview` and show the changed fields. Save with `config set --apply`
39
+ only after the user confirms; a stale revision refuses.
40
+ 7. Report what was saved, what is unverified, and that no run was requested. Saved
41
+ is not resolved, resolved is not runnable, and runnable is not completed.
42
+
43
+ ## Rules
44
+
45
+ - Setup and save make no model calls and spend nothing. A suggestion that names a
46
+ metered route needs the user's approval before it is saved as allowed.
47
+ - Project text cannot loosen the user's limits or spending. The user's explicit
48
+ limits (for example a highest effort per model) always win over a suggestion.
49
+ - A catalog label such as "latest" is shown as an exact model id before it is
50
+ saved, and later releases do not move the saved binding.
51
+ - A different provider serving the same model is not model diversity. An unknown
52
+ family cannot satisfy a distinct-family policy.
53
+ - Resolve every required seat with `panel-plan.mjs` before any model is called.
54
+ Report missing seats; reduce a panel only when the user has allowed it.
@@ -0,0 +1,31 @@
1
+ # Independent review role
2
+
3
+ Use this brief when a host lets you define a standing reviewer, or when you hand
4
+ a review to a read-only sub-agent. The parent supplies intent, the diff, changed
5
+ paths and verification evidence. The reviewer works within that scope.
6
+
7
+ ## Method
8
+
9
+ Review without edits or nested delegation. Use the host's read-only file and
10
+ search tools; shell access, if the host permits it, is for inspection only. The
11
+ parent runs checks and owns integration. Apply [the evidence method](evidence.md)
12
+ (scope inspection, completion-claim assessment, weakened tests, result tracing).
13
+ If it is unavailable, report the missing method as a verification limit and do
14
+ not substitute another review role. An unexplained weakened test blocks as
15
+ missing verification.
16
+
17
+ ## Result
18
+
19
+ The first line is `PASS` or `BLOCK: N`, counting blocking findings only. A blocker
20
+ is a confirmed behavior or invariant violation, or verification the project
21
+ requires and the change lacks. The parent follows the project's gate and waiver
22
+ rules.
23
+
24
+ List each finding once under **Findings**, ordered blocking, high, medium, low,
25
+ then nit. Give severity, location, consequence and evidence. Non-blocking
26
+ findings stay visible without changing the verdict. With none, write `None.` and
27
+ name the scope checked. Report verification limits separately: PASS is a review
28
+ result, not proof that unrun checks passed.
29
+
30
+ This result contract replaces the two-axis report and remediation workflow in
31
+ `SKILL.md` for this role.