@mrciphersmith/keryx 0.2.68 → 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.
- package/README.md +9 -0
- package/dist/cli.js +2027 -1404
- package/package.json +1 -1
- package/src/gdgraph/build-lang.test.ts +10 -3
- package/src/gdgraph/build.ts +54 -9
- package/src/gdgraph/import-kind.test.ts +205 -0
- package/src/gdgraph/query.ts +6 -1
- package/src/gdgraph/types.ts +34 -0
- package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +27 -1
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +88 -8
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +69 -43
|
@@ -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
|
|
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`,
|
|
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/**/*.
|
|
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
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
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
|
|
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 |
|