@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.
- package/CODE_OF_CONDUCT.md +83 -0
- package/CONTRIBUTING.md +54 -0
- package/LICENSE +21 -0
- package/README.md +378 -2
- package/THIRD_PARTY_NOTICES.md +188 -0
- package/compose.mjs +125 -0
- package/composition.mjs +361 -0
- package/config-view.mjs +209 -0
- package/config.mjs +381 -0
- package/docs/assets/banner-dark.png +0 -0
- package/docs/assets/banner-light.png +0 -0
- package/docs/assets/overview.png +0 -0
- package/docs/configuration.md +269 -0
- package/docs/skill-names.md +50 -0
- package/examples/person/house-rules.json +15 -0
- package/examples/person/rules/10-tooling.md +8 -0
- package/examples/person/rules/20-reporting.md +9 -0
- package/examples/project/AGENTS.md +18 -0
- package/package.json +42 -4
- package/rule-references.mjs +91 -0
- package/rules/core.md +340 -0
- package/rules/modifiers/backlog-outline.md +25 -0
- package/rules/modifiers/backlog-visual.md +16 -0
- package/rules/modifiers/coded-offers.md +70 -0
- package/rules/modifiers/cross-session-relay.md +23 -0
- package/rules/modifiers/effort-estimates.md +41 -0
- package/rules/modifiers/land-when-done.md +12 -0
- package/rules/modifiers/low-quota-handoff.md +20 -0
- package/rules/modifiers/model-default-questions.md +33 -0
- package/rules/modifiers/multi-agent.md +38 -0
- package/rules/modifiers/no-attribution.md +16 -0
- package/rules/modifiers/periodic-updates.md +25 -0
- package/rules/modifiers/plan-files.md +82 -0
- package/rules/modifiers/question-cards.md +48 -0
- package/rules/modifiers/release-batching.md +15 -0
- package/rules/modifiers/scratch-on-disk.md +15 -0
- package/rules/modifiers/shared-host-load.md +19 -0
- package/rules/modifiers/solo-operator.md +13 -0
- package/rules/modifiers/squash-landing.md +22 -0
- package/rules/modifiers/upstream-contributions.md +45 -0
- package/rules/modifiers/web-image-formats.md +35 -0
- package/rules/references/backlog-view.md +154 -0
- package/rules/references/github-actions.md +45 -0
- package/rules/references/landing.md +39 -0
- package/rules/references/multi-agent.md +51 -0
- package/rules/references/release-batching.md +66 -0
- package/rules/references/squash-landing.md +50 -0
- package/rules/references/thread-visuals.md +45 -0
- package/setup.mjs +445 -0
- package/skills/hr-agent-guidance-audit/LICENSE +21 -0
- package/skills/hr-agent-guidance-audit/SKILL.md +91 -0
- package/skills/hr-agent-guidance-audit/agents/openai.yaml +2 -0
- package/skills/hr-agent-guidance-audit/references/prune-workflow.md +72 -0
- package/skills/hr-agent-guidance-audit/references/records-and-lessons.md +60 -0
- package/skills/hr-agent-guidance-audit/references/retirement-verdicts.md +49 -0
- package/skills/hr-agent-guidance-refresh/LICENSE +21 -0
- package/skills/hr-agent-guidance-refresh/SKILL.md +36 -0
- package/skills/hr-agent-guidance-refresh/agents/openai.yaml +2 -0
- package/skills/hr-agent-guidance-refresh/references/verification.md +47 -0
- package/skills/hr-api-exposure-check/SKILL.md +159 -0
- package/skills/hr-api-exposure-check/agents/openai.yaml +3 -0
- package/skills/hr-audit-choices/SKILL.md +67 -0
- package/skills/hr-audit-choices/agents/openai.yaml +2 -0
- package/skills/hr-benchmarking/NOTICE.md +36 -0
- package/skills/hr-benchmarking/SKILL.md +279 -0
- package/skills/hr-benchmarking/agents/openai.yaml +2 -0
- package/skills/hr-benchmarking/references/javascript.md +130 -0
- package/skills/hr-benchmarking/references/tools.md +165 -0
- package/skills/hr-benchmarking/scripts/process-attribution.ps1 +20 -0
- package/skills/hr-benchmarking/scripts/process-attribution.py +107 -0
- package/skills/hr-better-accessibility/LICENSE +22 -0
- package/skills/hr-better-accessibility/NOTICE.md +46 -0
- package/skills/hr-better-accessibility/SKILL.md +119 -0
- package/skills/hr-better-accessibility/agents/openai.yaml +3 -0
- package/skills/hr-better-accessibility/focus-and-keyboard.md +130 -0
- package/skills/hr-better-accessibility/forms.md +82 -0
- package/skills/hr-better-accessibility/hit-areas.md +98 -0
- package/skills/hr-better-accessibility/motion-and-zoom.md +81 -0
- package/skills/hr-better-accessibility/screen-readers.md +102 -0
- package/skills/hr-better-accessibility/semantics-and-aria.md +84 -0
- package/skills/hr-better-colors/LICENSE +21 -0
- package/skills/hr-better-colors/NOTICE.md +37 -0
- package/skills/hr-better-colors/SKILL.md +114 -0
- package/skills/hr-better-colors/agents/openai.yaml +3 -0
- package/skills/hr-better-colors/color-formats.md +90 -0
- package/skills/hr-better-colors/color-usage.md +140 -0
- package/skills/hr-better-colors/contrast.md +80 -0
- package/skills/hr-better-colors/palette-generation.md +104 -0
- package/skills/hr-better-colors/palette-structure.md +76 -0
- package/skills/hr-better-colors/token-naming.md +97 -0
- package/skills/hr-better-layout/LICENSE +22 -0
- package/skills/hr-better-layout/NOTICE.md +48 -0
- package/skills/hr-better-layout/SKILL.md +92 -0
- package/skills/hr-better-layout/agents/openai.yaml +3 -0
- package/skills/hr-better-layout/grouping-and-alignment.md +144 -0
- package/skills/hr-better-layout/spacing-and-adaptivity.md +215 -0
- package/skills/hr-better-typography/LICENSE +22 -0
- package/skills/hr-better-typography/NOTICE.md +46 -0
- package/skills/hr-better-typography/SKILL.md +172 -0
- package/skills/hr-better-typography/agents/openai.yaml +3 -0
- package/skills/hr-better-typography/choosing-fonts.md +69 -0
- package/skills/hr-better-typography/css-cheat-sheet.md +65 -0
- package/skills/hr-better-typography/details-and-accessibility.md +119 -0
- package/skills/hr-better-typography/spacing-and-sizing.md +131 -0
- package/skills/hr-better-typography/variable-fonts-and-opentype.md +105 -0
- package/skills/hr-better-typography/wrapping-and-punctuation.md +57 -0
- package/skills/hr-better-writing/LICENSE +22 -0
- package/skills/hr-better-writing/NOTICE.md +46 -0
- package/skills/hr-better-writing/SKILL.md +122 -0
- package/skills/hr-better-writing/agents/openai.yaml +3 -0
- package/skills/hr-code-review/LICENSE +21 -0
- package/skills/hr-code-review/NOTICE.md +26 -0
- package/skills/hr-code-review/SKILL.md +163 -0
- package/skills/hr-code-review/agents/openai.yaml +3 -0
- package/skills/hr-code-review/references/acp-client.md +43 -0
- package/skills/hr-code-review/references/evidence.md +57 -0
- package/skills/hr-code-review/references/impact.md +103 -0
- package/skills/hr-code-review/references/panel-adjudication.md +58 -0
- package/skills/hr-code-review/references/panel-plan.md +61 -0
- package/skills/hr-code-review/references/panel-recommendations.json +105 -0
- package/skills/hr-code-review/references/panel-recommendations.md +46 -0
- package/skills/hr-code-review/references/panel-setup.md +54 -0
- package/skills/hr-code-review/references/reviewer-role.md +31 -0
- package/skills/hr-code-review/scripts/acp-panel-client.mjs +299 -0
- package/skills/hr-code-review/scripts/check-receipts.mjs +263 -0
- package/skills/hr-code-review/scripts/panel-plan.mjs +69 -0
- package/skills/hr-code-review/scripts/panel-preferences.mjs +220 -0
- package/skills/hr-design-exploration/SKILL.md +105 -0
- package/skills/hr-design-exploration/agents/openai.yaml +4 -0
- package/skills/hr-diagnosing-bugs/NOTICE.md +45 -0
- package/skills/hr-diagnosing-bugs/SKILL.md +108 -0
- package/skills/hr-diagnosing-bugs/agents/openai.yaml +3 -0
- package/skills/hr-diagnosing-bugs/references/reporting.md +97 -0
- package/skills/hr-diagnosing-bugs/scripts/check-pr-offer.mjs +47 -0
- package/skills/hr-explain-code/NOTICE.md +37 -0
- package/skills/hr-explain-code/SKILL.md +110 -0
- package/skills/hr-explain-code/agents/openai.yaml +5 -0
- package/skills/hr-explain-code/references/helper-brief.md +39 -0
- package/skills/hr-extract-shared-steps/SKILL.md +134 -0
- package/skills/hr-extract-shared-steps/agents/openai.yaml +3 -0
- package/skills/hr-forgotten-work-audit/SKILL.md +130 -0
- package/skills/hr-forgotten-work-audit/references/brief-template.md +56 -0
- package/skills/hr-forgotten-work-audit/references/result-format.md +46 -0
- package/skills/hr-handoff/LICENSE +21 -0
- package/skills/hr-handoff/NOTICE.md +29 -0
- package/skills/hr-handoff/SKILL.md +114 -0
- package/skills/hr-handoff/agents/openai.yaml +5 -0
- package/skills/hr-handoff/assets/ledger.example.json +10 -0
- package/skills/hr-handoff/assets/receipt.example.json +76 -0
- package/skills/hr-handoff/assets/source.example.json +20 -0
- package/skills/hr-handoff/references/reconciliation.md +124 -0
- package/skills/hr-handoff/references/successor-thread.md +76 -0
- package/skills/hr-handoff/scripts/check-reconciliation.mjs +324 -0
- package/skills/hr-house-rules-setup/SKILL.md +114 -0
- package/skills/hr-house-rules-setup/agents/openai.yaml +5 -0
- package/skills/hr-issue-tracker-setup/SKILL.md +49 -0
- package/skills/hr-issue-tracker-setup/agents/openai.yaml +5 -0
- package/skills/hr-lean-plan/SKILL.md +146 -0
- package/skills/hr-lean-plan/agents/openai.yaml +5 -0
- package/skills/hr-maintainability-review/SKILL.md +186 -0
- package/skills/hr-maintainability-review/agents/openai.yaml +5 -0
- package/skills/hr-manual-qa/NOTICE.md +36 -0
- package/skills/hr-manual-qa/SKILL.md +37 -0
- package/skills/hr-manual-qa/agents/openai.yaml +3 -0
- package/skills/hr-navigation-retro/LICENSE +21 -0
- package/skills/hr-navigation-retro/NOTICE.md +5 -0
- package/skills/hr-navigation-retro/SKILL.md +86 -0
- package/skills/hr-navigation-retro/agents/openai.yaml +4 -0
- package/skills/hr-navigation-retro/references/inputs.md +67 -0
- package/skills/hr-navigation-retro/scripts/retro.py +552 -0
- package/skills/hr-navigation-retro/scripts/transcripts.py +205 -0
- package/skills/hr-ordering-tests/SKILL.md +51 -0
- package/skills/hr-ordering-tests/agents/openai.yaml +2 -0
- package/skills/hr-plain-prose/SKILL.md +264 -0
- package/skills/hr-plain-prose/agents/openai.yaml +3 -0
- package/skills/hr-plain-prose/scripts/check.mjs +331 -0
- package/skills/hr-pr-followup/LICENSE +21 -0
- package/skills/hr-pr-followup/NOTICE.md +9 -0
- package/skills/hr-pr-followup/SKILL.md +74 -0
- package/skills/hr-pr-followup/agents/openai.yaml +2 -0
- package/skills/hr-pr-followup/references/review-helpers.md +111 -0
- package/skills/hr-pr-followup/scripts/check-landing.py +204 -0
- package/skills/hr-pr-followup/scripts/check-pr-review.ts +510 -0
- package/skills/hr-pr-followup/scripts/merge-pr.sh +100 -0
- package/skills/hr-pr-followup/scripts/resolve-pr-thread.ts +219 -0
- package/skills/hr-pr-followup/scripts/verify-landed.sh +184 -0
- package/skills/hr-progress-report/SKILL.md +49 -0
- package/skills/hr-progress-report/agents/openai.yaml +5 -0
- package/skills/hr-read-reddit/SKILL.md +44 -0
- package/skills/hr-read-reddit/agents/openai.yaml +2 -0
- package/skills/hr-read-reddit/scripts/reddit.ts +252 -0
- package/skills/hr-read-x-links/SKILL.md +42 -0
- package/skills/hr-read-x-links/agents/openai.yaml +2 -0
- package/skills/hr-read-x-links/scripts/x-post.ts +264 -0
- package/skills/hr-research-shared-links/SKILL.md +103 -0
- package/skills/hr-split-to-prs/LICENSE +21 -0
- package/skills/hr-split-to-prs/NOTICE.md +9 -0
- package/skills/hr-split-to-prs/SKILL.md +61 -0
- package/skills/hr-split-to-prs/agents/openai.yaml +2 -0
- package/skills/hr-sqlite/SKILL.md +174 -0
- package/skills/hr-sqlite/agents/openai.yaml +2 -0
- package/skills/hr-sqlite/references/evidence.md +94 -0
- package/skills/hr-sqlite/references/tool-decisions.md +39 -0
- package/skills/hr-sqlite/scripts/inspect-sqlite.py +245 -0
- package/skills/hr-stock-ui-audit/SKILL.md +132 -0
- package/skills/hr-stock-ui-audit/agents/openai.yaml +3 -0
- package/skills/hr-stock-ui-audit/scripts/scan.mjs +619 -0
- package/skills/hr-tdd/LICENSE +21 -0
- package/skills/hr-tdd/NOTICE.md +10 -0
- package/skills/hr-tdd/SKILL.md +40 -0
- package/skills/hr-tdd/agents/openai.yaml +3 -0
- package/skills/hr-tdd/mocking.md +39 -0
- package/skills/hr-tdd/tests.md +77 -0
- package/skills/hr-test-audit/LICENSE +21 -0
- package/skills/hr-test-audit/NOTICE.md +67 -0
- package/skills/hr-test-audit/SKILL.md +146 -0
- package/skills/hr-test-audit/agents/openai.yaml +3 -0
- package/skills/hr-test-audit/scripts/floor-guard.ts +137 -0
- package/skills/hr-usage-report/SKILL.md +90 -0
- package/skills/hr-usage-report/agents/openai.yaml +2 -0
- package/skills/hr-usage-report/assets/example-report.json +125 -0
- package/skills/hr-usage-report/assets/report-template.html +377 -0
- package/skills/hr-usage-report/scripts/render-report.ts +86 -0
- package/skills/hr-usage-report/scripts/usage-by-model.ts +499 -0
- package/skills/hr-what-next/SKILL.md +151 -0
- package/skills/hr-what-next/agents/openai.yaml +4 -0
- package/skills/hr-what-next/references/reporting.md +59 -0
- package/skills/hr-what-next/scripts/check-open-work.mjs +711 -0
- package/skills/hr-writing-for-agents/NOTICE.md +46 -0
- package/skills/hr-writing-for-agents/SKILL-MECHANICS.md +83 -0
- package/skills/hr-writing-for-agents/SKILL.md +108 -0
- package/skills/hr-writing-for-agents/agents/openai.yaml +3 -0
- package/skills/hr-writing-pr/NOTICE.md +48 -0
- package/skills/hr-writing-pr/SKILL.md +119 -0
- package/skills/hr-writing-pr/agents/openai.yaml +2 -0
- 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.
|