@mrciphersmith/keryx 0.2.69 → 0.2.70

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.
@@ -22,7 +22,6 @@ triggers:
22
22
  - "review --all"
23
23
  - "review --clean-code"
24
24
  - "review --highload"
25
- - "review --greptile"
26
25
  - "review --project-conventions"
27
26
  - "review --frontend-conventions"
28
27
  - "review --testing-practices"
@@ -57,17 +56,73 @@ Review Orchestrator Progress:
57
56
  - [ ] Step 2: Detect review mode (diff mode vs. path mode)
58
57
  - [ ] Step 3: Collect bounded scope - git diff OR file list from path
59
58
  - [ ] Step 4: Parse flags / auto-detect domain from scope
60
- - [ ] Step 5: Ask user to confirm optional convention and legacy/profile reviewers
59
+ - [ ] Step 5: Ask user to confirm optional convention reviewers (legacy/profile reviewers are flag-only, never prompted)
61
60
  - [ ] Step 6: Plan sub-agent dispatch, token budgets, and model strategy
62
61
  - [ ] Step 7: Stage 1 gate - spec compliance check (if issue/task provided)
63
62
  - [ ] Step 8: Dispatch selected reviewers in PARALLEL with reviewer-input schema
64
63
  - [ ] Step 9: Collect reviewer-finding schema results and handle NEEDS_CONTEXT
65
64
  - [ ] Step 10: Run strict synthesis when blockers/majors exist or --strict is set
66
65
  - [ ] Step 11: Sort by severity, deduplicate, emit unified report
66
+ - [ ] Step 12: Emit the machine-readable `keryx:findings` block alongside the report
67
67
  ```
68
68
 
69
69
  ---
70
70
 
71
+ ## Step 12 — the `keryx:findings` block
72
+
73
+ The prose report is for a human. **`keryx review ingest` reads the fenced block,
74
+ not the prose**, and a round that emits only prose cannot be used to build the
75
+ next round's input — the reviewer's `confidence`, `evidence`, `impact` and
76
+ `suggested_fix` do not survive rendering, and no regex recovers what was never
77
+ written down.
78
+
79
+ So every report ends with one fenced block whose info string carries
80
+ `keryx:findings`:
81
+
82
+ ````text
83
+ ```json keryx:findings
84
+ [ { …one object per finding, conforming to review-finding.schema.json… } ]
85
+ ```
86
+ ````
87
+
88
+ Rules:
89
+
90
+ - **Exactly one block per report.** It is the array the reviewers returned,
91
+ carried through — not re-derived from the prose above it. A second block is a
92
+ hard error naming both offsets: reviewers are consolidated by merging their
93
+ findings into one array, never by concatenating one block each.
94
+ - The fence may be indented up to three spaces (CommonMark), which is what
95
+ happens when the block is nested under a list item. Beyond that it is not a
96
+ fence and ingest will not see it.
97
+ - Each object conforms to **`review-finding.schema.json`** — the same contract
98
+ `prior_findings[].finding` is validated against, which is why the block
99
+ round-trips. Unknown per-finding properties are **dropped, not rejected**:
100
+ ingest writes exactly the properties that contract names, so anything else you
101
+ put on a finding is silently discarded rather than flagged. Pipeline triage
102
+ fields (`classification`, `flow_relevance`) are not finding properties at all;
103
+ they are the orchestrator's judgement, not the reviewer's, and are recorded in
104
+ `decisions.md`.
105
+ - `reviewer` is the reviewer that actually produced the finding. Never the
106
+ orchestrator's own name — that is the field whose loss made round 2
107
+ unconstructible.
108
+ - **A block that is present but unusable fails loudly.** Ingest refuses a block
109
+ it cannot parse, and equally refuses one that parses to something other than
110
+ an array of findings (or a single `{ reviewer, findings }` result) — `null`
111
+ included. It never falls back to parsing the prose, because a silent fallback
112
+ would reintroduce exactly the lossy path this replaces while the report still
113
+ visibly carries the structured array.
114
+
115
+ A report without the block is still readable by a human and still ingestible by
116
+ the legacy Markdown path — but it is a **legacy** report. Four fields the prose
117
+ does not carry (`impact`, `suggested_fix`, `evidence`, `confidence`) are written
118
+ with an explicit `not recorded:` provenance where the report supplies nothing,
119
+ and `confidence` is stamped `low` because a regex over prose is a low-confidence
120
+ derivation whatever the reviewer believed. Such a round **can** still seed a fix
121
+ round — that is the point of keeping the parser — but it seeds one that knows
122
+ which of its inputs were recovered and which were never written down.
123
+
124
+ ---
125
+
71
126
  ## Input Contract
72
127
 
73
128
  | Field | Type | Required | Description |
@@ -238,7 +293,7 @@ If the platform supports assigning models to sub-agents and the user/automation
238
293
  |---|---|---|
239
294
  | simple | cheaper/faster coding model | `review-style`, `review-clean-code`, docs-only convention checks, legacy/profile checks |
240
295
  | normal | current/default model | `review-frontend`, `review-backend`, `review-testing-practices`, convention reviewers |
241
- | complex | strongest available coding/reasoning model | `review-logic`, `review-architecture`, `review-security-code`, `review-highload`, `review-greptile`, strict synthesis |
296
+ | complex | strongest available coding/reasoning model | `review-logic`, `review-architecture`, `review-security-code`, `review-highload`, strict synthesis |
242
297
 
243
298
  Rules:
244
299
  - Do not silently change model class when `model_strategy` is `current`.
@@ -351,7 +406,7 @@ If the repository has local convention docs such as `CLAUDE.md`, `AGENTS.md`,
351
406
 
352
407
  | File pattern | Reviewers appended |
353
408
  |---|---|
354
- | `src/**/*.ts`, `src/**/*.tsx`, `*.stories.tsx` | `review-frontend-conventions` |
409
+ | `src/**/*.tsx`, `*.stories.tsx`, or a `.ts`/`.js` change in a repo where `package.json` declares `react`/`react-dom`/`mobx`/`mobx-react`/`mobx-react-lite` as a dependency | `review-frontend-conventions` |
355
410
  | `**/*.test.*`, `**/*.spec.*`, `**/*.integration.test.*`, `**/*.msw.ts`, `src/test/**`, `test/**`, `e2e/**` | `review-testing-practices` |
356
411
  | `src/core/**`, `core/**`, `shared/**`, `foundation/**` | `review-core-boundaries` |
357
412
  | `src/core/flow/**`, `src/graph/**`, `src/shared/flow/**` | `review-flow-graph` |
@@ -399,25 +454,15 @@ Legacy/profile reviewers are specialized review profiles that predate the review
399
454
  | `--mobx-store` | `code-mobx-store-review` |
400
455
  | `*.store.ts`, `makeObservable`, `observable`, `computed`, `action.bound` | suggest `code-mobx-store-review` as optional profile reviewer |
401
456
 
402
- When any legacy/profile reviewer is available and the user did not explicitly pass its flag, ask after convention prompts:
403
-
404
- ```text
405
- This question controls only optional legacy/profile reviewers. Generic and convention reviewer choices listed above are unchanged.
406
-
407
- Include legacy/profile reviewers?
408
-
409
- A) Include all applicable profile reviewers
410
- B) Choose individually
411
- C) Skip legacy/profile reviewers (recommended unless you need these profiles)
412
-
413
- Available:
414
- - code-ai-review: strict AI review profile
415
- - code-b091-review: b091-style strict logic profile
416
- - code-style-review: legacy style/architecture profile
417
- - code-mobx-store-review: MobX store/state profile (only if MobX/store files are present)
418
- ```
419
-
420
- If the user chooses B, list only applicable reviewers and ask for exact names. If the review is part of `job-orchestrator`, use `reviewers` and `conditional_reviewers` automation settings when provided.
457
+ Legacy/profile reviewers are never auto-included and never prompted for do not ask the user
458
+ about them. They are exempt from the finding contract (for example `code-ai-review` emits
459
+ free-prose Russian with no per-finding severity field, so its output cannot be normalised into
460
+ the unified report), which is why inclusion must be a deliberate, explicit act rather than a
461
+ default the user has to opt out of on every review. Dispatch them ONLY when the user passes one
462
+ of the flags in the Trigger table above, or when `job-orchestrator` provides `reviewers` /
463
+ `conditional_reviewers` automation settings that name them. The `code-mobx-store-review`
464
+ auto-suggestion (MobX/store files present) is informational only list it in the Review Plan
465
+ Preview below, but do not dispatch it and do not ask about it without an explicit flag.
421
466
 
422
467
  Review Plan Preview must include an `Optional legacy/profile reviewers` group and a `Skipped reviewers` group with reasons such as:
423
468
 
@@ -447,13 +492,12 @@ Skipped reviewers:
447
492
  | `--style` | `review-style` |
448
493
  | `--clean-code` | `review-clean-code` |
449
494
  | `--highload` | `review-highload` |
450
- | `--greptile` | `review-greptile` (codebase-aware; requires PR number) |
451
495
  | `--project-conventions` | all generic convention reviewers: `review-frontend-conventions` + `review-testing-practices` + `review-core-boundaries` + `review-flow-graph` |
452
496
  | `--frontend-conventions` | `review-frontend-conventions` |
453
497
  | `--testing-practices` | `review-testing-practices` |
454
498
  | `--core-boundaries` | `review-core-boundaries` |
455
499
  | `--flow-graph` | `review-flow-graph` |
456
- | `--all` | all reviewers above (including `review-clean-code`, `review-highload`, applicable legacy/profile reviewers, project convention reviewers when local convention docs exist, and `review-greptile` when PR number is present) |
500
+ | `--all` | all reviewers above (including `review-clean-code`, `review-highload`, applicable legacy/profile reviewers, and project convention reviewers when local convention docs exist) |
457
501
  | `--strict` | runs AFTER all others; adds a strict commentary pass on consolidated findings |
458
502
  | (auto) | detected from diff file extensions — see Auto-detection table |
459
503
 
@@ -524,24 +568,6 @@ Each reviewer must return a `REVIEW_RESULT` object matching `skills/review-orche
524
568
 
525
569
  **Important for path mode:** instruct each reviewer to check the **entire file**, not just changes. The scope report should say "Path: `<TARGET_PATH>`" instead of a branch/merge-base.
526
570
 
527
- ### Greptile Reviewer
528
-
529
- `review-greptile` runs in parallel with the other reviewers **when a PR number is available** (diff mode with a PR). It is excluded in path mode (no PR) unless `--greptile` is explicitly specified.
530
-
531
- When dispatching `review-greptile`, pass additionally:
532
-
533
- ```
534
- PR_NUMBER: <pr number>
535
- REPO: <owner/repo>
536
- REMOTE: github | gitlab
537
- ```
538
-
539
- Greptile findings use `G-` prefixed IDs and are merged into the consolidated report under a dedicated section **"## Greptile (Codebase-Aware Findings)"** placed before the Blockers section. If Greptile identified cross-file impact not caught by other reviewers, those appear as additional blockers/majors.
540
-
541
- **Auto-include Greptile when:** `--all` flag is used AND a PR number is resolvable from the current branch (`gh pr view` succeeds).
542
-
543
- ---
544
-
545
571
  ## Scope Boundaries
546
572
 
547
573
  | Concern | This skill | Use instead |