@mrciphersmith/keryx 0.3.119 → 0.3.121

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 (42) hide show
  1. package/dist/cli.js +9730 -5314
  2. package/dist/core.js +1162 -812
  3. package/package.json +1 -1
  4. package/src/gdskills/bundled/install-manifest.json +2 -1
  5. package/src/gdskills/bundled/rules/core/session-plan-bridge.mdc +1 -1
  6. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +4 -4
  7. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +47 -59
  8. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.detail.md +70 -0
  9. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +42 -79
  10. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/orchestrator-prompt.md +1 -1
  11. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +12 -18
  12. package/src/gdskills/bundled/skills/orchestration/task-implementer/input-contract.schema.json +25 -2
  13. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +19 -0
  14. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +6 -11
  15. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +6 -11
  16. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +6 -11
  17. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +5 -10
  18. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +5 -10
  19. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +8 -17
  20. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +8 -15
  21. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +6 -11
  22. package/src/gdskills/bundled/skills/review/review-jev-comments/SKILL.md +4 -9
  23. package/src/gdskills/bundled/skills/review/review-jev-contract/SKILL.md +4 -9
  24. package/src/gdskills/bundled/skills/review/review-jev-docs/SKILL.md +4 -9
  25. package/src/gdskills/bundled/skills/review/review-jev-risk/SKILL.md +4 -9
  26. package/src/gdskills/bundled/skills/review/review-jev-rules/SKILL.md +4 -9
  27. package/src/gdskills/bundled/skills/review/review-jev-scenarios/SKILL.md +4 -9
  28. package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +8 -9
  29. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +7 -12
  30. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.detail.md +39 -2
  31. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +49 -92
  32. package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-finding.schema.json +13 -0
  33. package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +38 -0
  34. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +6 -11
  35. package/src/gdskills/bundled/skills/review/review-pr-contract/SKILL.md +2 -2
  36. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +8 -10
  37. package/src/gdskills/bundled/skills/review/review-premise/SKILL.md +180 -0
  38. package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +4 -4
  39. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +6 -11
  40. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +6 -11
  41. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +2 -2
  42. package/src/gdskills/contracts/review-finding.schema.json +88 -0
@@ -24,6 +24,27 @@
24
24
  "pattern": "^[^#]+#[^#]+$"
25
25
  },
26
26
  "reviewer": { "type": "string" },
27
+ "reported_by": {
28
+ "title": "Every reviewer that reported this finding, when ingest merged duplicates into it",
29
+ "description": "Written only by the ingest duplicate merge (src/review/dedupe.ts): two or more reviewers reported the same defect — same file, located line within 3 or the same quote, same mechanism — and the round keeps ONE finding instead of N with drifting severity. `reviewer` stays the reviewer whose report became the canonical record; this lists all of them, that one first. Absent means one reviewer reported it.",
30
+ "type": "array",
31
+ "minItems": 2,
32
+ "items": { "type": "string", "minLength": 1 }
33
+ },
34
+ "merged_from": {
35
+ "title": "The findings the duplicate merge folded into this one",
36
+ "description": "Their `global_id` (or `id` when none was minted), so a verifier claim, a commit message or a later round that names an absorbed finding can still be traced to the record that now carries it. Present exactly when `reported_by` is.",
37
+ "type": "array",
38
+ "minItems": 1,
39
+ "items": { "type": "string", "minLength": 1 }
40
+ },
41
+ "merged_problems": {
42
+ "title": "The problem statements of the findings the duplicate merge folded into this one",
43
+ "description": "Written only by the ingest duplicate merge, and only those that differ from this finding's own `problem`: a merge keeps one record per defect but never drops what another reviewer said the defect was.",
44
+ "type": "array",
45
+ "minItems": 1,
46
+ "items": { "type": "string", "minLength": 1 }
47
+ },
27
48
  "disposition": {
28
49
  "title": "What became of this finding, and the evidence for saying so",
29
50
  "description": "Declared HERE and deliberately NOT in the bundled reviewer-finding.schema.json: a reviewer states what is wrong, it never states what became of the finding. The measured reason this exists: precision = acted-on / (acted-on + dismissed-incorrect) computed over the recorded corpus returned 53/53 = 100%, not because the reviewers were right but because nothing on disk could express a wrong finding. `classification` looked like a validity verdict and was assigned from the ingest MODE; decisions.md said the same sentence for every finding. Only `acted-on` and `dismissed-incorrect` say anything about reviewer accuracy, which is why the three non-accuracy dismissals are separate states rather than one `dismissed` bucket — collapsing them is what makes a dismissal rate meaningless.",
@@ -94,6 +115,69 @@
94
115
  "description": "Reasoning alone produces no new evidence, so it can never reach `confirmed` (AC7). It cannot reach `refuted` either, and that extension is deliberate: `refuted` is the only verdict with a destructive consequence, so granting it to the weakest method would reinstate review-strict with the sign flipped. Anything checkable is `site-check` or `execution`; `reasoning` is what is left when nothing was run."
95
116
  }
96
117
  },
118
+ "premise": {
119
+ "title": "What the premise judge found when it asked whether this finding's request is right",
120
+ "description": "Flow 459. Declared HERE and deliberately NOT in the bundled reviewer-finding.schema.json, on the same basis as `verification`: the reviewer that raised a finding is the one actor that may not judge its premise. The verifier asks whether the facts hold; the premise judge asks whether the request is right (an explicit override, an exemption, a sibling doing the same and accepted platform practice are all evidence that a flagged shape is a deliberate choice). `challenged` and `owner-decision` HOLD the finding: it is not an open blocker or major and is not passed to a fixer until the operator answers. The judge is delete-only: it never adds a finding, never raises a severity and never edits the finding's text; `downgraded` carries a strictly lower `severity` (`major` or `minor`: a downgrade stops at the fix-loop threshold), which is then also the finding's own. One source of truth each: the finding's own `severity` wins over a `premise.severity` that disagrees (ingest aligns them), and the operator's answer is the `premise-question` decision in the package's operator-decisions.json; `premise.operator` is only its audit trail on the record, and ingest strips it from any finding it receives. The schema states the per-verdict fields below; that a downgrade is STRICTLY lower than the original is checked in code (src/review/premise.ts). Absent means nobody judged.",
121
+ "type": "object",
122
+ "additionalProperties": false,
123
+ "required": ["verdict", "judge"],
124
+ "properties": {
125
+ "verdict": { "type": "string", "enum": ["upheld", "downgraded", "challenged", "owner-decision"] },
126
+ "judge": { "type": "string", "minLength": 1 },
127
+ "model": { "type": "string", "minLength": 1 },
128
+ "severity": { "type": "string", "enum": ["major", "minor"], "description": "`downgraded` only: the lower severity, also the finding's own. Never `info`: a downgrade stops at `minor`, the fix-loop threshold." },
129
+ "original_severity": { "type": "string", "enum": ["blocker", "major"], "description": "`downgraded` only: what the reviewer reported." },
130
+ "intent_signals": {
131
+ "type": "array",
132
+ "items": {
133
+ "type": "object",
134
+ "additionalProperties": false,
135
+ "required": ["ref", "says"],
136
+ "properties": { "ref": { "type": "string", "minLength": 1 }, "says": { "type": "string", "minLength": 1 } }
137
+ }
138
+ },
139
+ "practice_sources": {
140
+ "type": "array",
141
+ "items": {
142
+ "type": "object",
143
+ "additionalProperties": false,
144
+ "required": ["name", "says"],
145
+ "properties": { "name": { "type": "string", "minLength": 1 }, "says": { "type": "string", "minLength": 1 } }
146
+ }
147
+ },
148
+ "reasoning": { "type": "string" },
149
+ "question": { "type": "string", "minLength": 1, "description": "`challenged` and `owner-decision`: what the operator is asked." },
150
+ "options": { "type": "array", "minItems": 2, "items": { "type": "string", "minLength": 1 } },
151
+ "operator": {
152
+ "type": "object",
153
+ "additionalProperties": false,
154
+ "required": ["answer", "reason", "at", "actor"],
155
+ "description": "The operator's answer once applied to the record (`keryx review decide-premise`, the `review_decide_premise` card). An audit trail: the answer counts only from the package's operator-decisions.json, and ingest strips this field from input findings.",
156
+ "properties": {
157
+ "answer": { "type": "string", "enum": ["uphold", "dismiss"] },
158
+ "reason": { "type": "string", "minLength": 1 },
159
+ "quote": { "type": "string", "minLength": 1, "description": "The operator's own words: what they typed at the terminal, or the card text they said yes to." },
160
+ "at": { "type": "string", "minLength": 1 },
161
+ "actor": { "type": "string", "minLength": 1 },
162
+ "confirmedVia": { "type": "string", "enum": ["tui-card", "remote-card", "terminal"] }
163
+ }
164
+ }
165
+ },
166
+ "allOf": [
167
+ {
168
+ "if": { "required": ["verdict"], "properties": { "verdict": { "const": "downgraded" } } },
169
+ "then": { "required": ["severity", "original_severity"] }
170
+ },
171
+ {
172
+ "if": { "required": ["verdict"], "properties": { "verdict": { "enum": ["challenged", "owner-decision"] } } },
173
+ "then": { "required": ["question"] }
174
+ },
175
+ {
176
+ "if": { "required": ["verdict"], "properties": { "verdict": { "const": "owner-decision" } } },
177
+ "then": { "required": ["options"] }
178
+ }
179
+ ]
180
+ },
97
181
  "severity": { "type": "string", "enum": ["blocker", "major", "minor", "info"] },
98
182
  "repo": {
99
183
  "type": ["string", "null"],
@@ -134,6 +218,10 @@
134
218
  }
135
219
  ]
136
220
  },
221
+ "path_missing": {
222
+ "type": "boolean",
223
+ "description": "Written, as true, only by `review ingest` when `file` does not exist at the round's reviewed head (a cat-file existence check of `<head>:<file>`). The finding is kept, never dropped, and is listed in scope.md: a finding that cites a path nobody can open is the reviewer's claim, not a located site."
224
+ },
137
225
  "symbol": { "type": ["string", "null"] },
138
226
  "problem": { "type": "string" },
139
227
  "impact": { "type": "string" },