mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-07 09:23:50 +01:00
test: cross-skill consistency judge sends its JSON schema after calibration (W2 T8)
Comparison (1), 24 items: old-vs-old 0/24 flips, new-vs-old 0/24, agreement 23/24 for all three panels (a05 passes under every prompt, so no new false pass), no errored samples, p95 22.6 s new vs 19.8 s old; held-out 0/8 flips, 8/8 agreement. The first dispatch stopped at its per-config budget backstop with 24 held-out calls undispatched; resume completed exactly those. Prose unchanged; no prose step. 216 calls, $19.86.
This commit is contained in:
1 parent
74a8e8a89e
commit
9fcaaf0d71
4 files changed
+314
-2
No files matched your search
@@ -0,0 +1,95 @@
|
||||
{
|
||||
"config": "cross-skill",
|
||||
"model": "claude-fable-5-1",
|
||||
"request_hash": {
|
||||
"old": "c00326001bb0e5511ead24b7568cfeafc3a9ae4fe4a4f94a1ed5e556fae12497",
|
||||
"new": "4964d727a819b92c4d00345173eb258d64d7eda1936dc509eb7a2e4fbfedc78a"
|
||||
},
|
||||
"complete": true,
|
||||
"stopped": null,
|
||||
"calls": 216,
|
||||
"cost_usd": 19.8616,
|
||||
"errors": {
|
||||
"old": {
|
||||
"refusal": 0,
|
||||
"truncation": 0,
|
||||
"parse": 0,
|
||||
"schema": 0,
|
||||
"transport": 0,
|
||||
"samples": 144,
|
||||
"rate": 0
|
||||
},
|
||||
"new": {
|
||||
"refusal": 0,
|
||||
"truncation": 0,
|
||||
"parse": 0,
|
||||
"schema": 0,
|
||||
"transport": 0,
|
||||
"samples": 72,
|
||||
"rate": 0
|
||||
}
|
||||
},
|
||||
"latency_p95_ms": {
|
||||
"old": 19780,
|
||||
"new": 22645
|
||||
},
|
||||
"all": {
|
||||
"items": 24,
|
||||
"old_flips": {
|
||||
"flips": 0,
|
||||
"compared": 24
|
||||
},
|
||||
"new_flips": {
|
||||
"flips": 0,
|
||||
"compared": 24
|
||||
},
|
||||
"agreement": {
|
||||
"old-a": 23,
|
||||
"old-b": 23,
|
||||
"new": 23
|
||||
},
|
||||
"false_passes": {
|
||||
"old-a": [
|
||||
"a05"
|
||||
],
|
||||
"old-b": [
|
||||
"a05"
|
||||
],
|
||||
"new": [
|
||||
"a05"
|
||||
]
|
||||
},
|
||||
"new_false_passes": []
|
||||
},
|
||||
"heldout": {
|
||||
"items": 8,
|
||||
"old_flips": {
|
||||
"flips": 0,
|
||||
"compared": 8
|
||||
},
|
||||
"new_flips": {
|
||||
"flips": 0,
|
||||
"compared": 8
|
||||
},
|
||||
"agreement": {
|
||||
"old-a": 8,
|
||||
"old-b": 8,
|
||||
"new": 8
|
||||
},
|
||||
"false_passes": {
|
||||
"old-a": [],
|
||||
"old-b": [],
|
||||
"new": []
|
||||
},
|
||||
"new_false_passes": []
|
||||
},
|
||||
"landing": {
|
||||
"lands": true,
|
||||
"reasons": [],
|
||||
"strict_no_flip_increase": true
|
||||
},
|
||||
"prose_step_triggered": {
|
||||
"triggered": false,
|
||||
"reasons": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,216 @@
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files align with the intended architecture. greptile-triage.md is the single place that defines REMOTE_SLUG derivation (two identical occurrences) and both paths: ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md (per-project) and ~/.gstack/greptile-history.md (global). review/SKILL.md and ship/SKILL.md both delegate fetch/classify/reply mechanics to greptile-triage.md and consistently instruct saving to 'both per-project and global greptile-history' (ship additionally specifies entry types fix/fp/already-fixed, which match the types retro counts). retro/SKILL.md explicitly reads only the global ~/.gstack/greptile-history.md and states 'never a per-project copy', matching the cross-project aggregation intent. Ship's extra indirection through sections/greptile.md still routes to greptile-triage.md, so there is no divergence in path handling. No contradictory paths, derivations, or read/write roles were found."},"latency_ms":11272,"stop_reason":"end_turn","usage":{"input_tokens":2417,"output_tokens":811},"cost_usd":0.06472}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads from the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) in both the Step 1 fetch command and the metrics computation, but the intended architecture says /retro should read from the GLOBAL path (~/.gstack/greptile-history.md) only to aggregate across projects; retro even explicitly says 'for the current repo' and gates the greptile field on the per-project file existing.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses `browse/bin/remote-slug || ~/.claude/skills/gstack/browse/bin/remote-slug || basename $(git rev-parse --show-toplevel || pwd)`, while retro/SKILL.md uses only `basename $(git rev-parse --show-toplevel)`. If remote-slug produces a different slug than the directory basename, retro would read a per-project file that was never written to.","ship/SKILL.md delegates Greptile handling to `sections/greptile.md` while also referencing `greptile-triage.md` for reply templates; greptile-triage.md claims /ship Step 10 references it directly. The two-level indirection is not contradictory but the delegation path differs from /review, which reads greptile-triage.md directly (minor).","Global path is never used as a read source anywhere; it is written to but only the per-project file is consumed, making the dual-write architecture's retro-aggregation purpose unfulfilled."],"score":2,"reasoning":"The write side (review/ship via greptile-triage.md writing to both per-project and global paths) is consistent with the intended architecture. However, the read side directly contradicts it: /retro reads the per-project file rather than the global aggregate, and uses a different REMOTE_SLUG derivation than the writer, so it may not even read the correct per-project file. These are substantive architectural contradictions rather than cosmetic differences."},"latency_ms":13685,"stop_reason":"end_turn","usage":{"input_tokens":3227,"output_tokens":1062},"cost_usd":0.08537}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads BOTH the global `~/.gstack/greptile-history.md` AND every `~/.gstack/projects/*/greptile-history.md` and concatenates them, contradicting the intended architecture where /retro reads the GLOBAL path only. Since /review and /ship write every entry to both paths, concatenating would double-count every Greptile entry and skew the signal ratio.","retro/SKILL.md is internally inconsistent: the read instruction concatenates multiple files, but the later note says to include the `greptile` field only if `greptile-history.md` (the single path `GREPTILE_HISTORY` printed) exists — implying a single-path model.","ship/SKILL.md explicitly records entry types (fix, fp, already-fixed) that /retro depends on for counting, while the extracted review/SKILL.md lines say only 'Save to both per-project and global greptile-history' without specifying type — a minor gap unless the type is enforced inside greptile-triage.md."],"score":3,"reasoning":"The write side is consistent: /review and /ship both delegate to greptile-triage.md, which defines a single REMOTE_SLUG derivation (identical in both occurrences) and writes to both the per-project and global paths. The read side deviates: /retro reads per-project files in addition to the global file, violating the 'global only' intent and introducing a double-counting risk, with an internal contradiction in its own single-path note. Not contradictory to the point of breakage, but a clear architectural drift."},"latency_ms":14185,"stop_reason":"end_turn","usage":{"input_tokens":3698,"output_tokens":993},"cost_usd":0.08663}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads from the PER-PROJECT path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) instead of the GLOBAL path (~/.gstack/greptile-history.md) that the intended architecture specifies for cross-project retro aggregation; the global file is written by review/ship but never read by anything shown.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses `browse/bin/remote-slug` (with fallback to basename of repo root), while retro/SKILL.md uses only `basename \"$(git rev-parse --show-toplevel)\"`. When remote-slug succeeds and produces a slug differing from the directory basename, retro will look in a different per-project directory than the one review/ship wrote to, silently finding no history.","retro's note explicitly says 'Only include the greptile field if the per-project ... exists', reinforcing a per-project-only read model that contradicts the stated global-aggregation design (and the 'Y catches, Z FPs' metric will reflect only one repo).","ship/SKILL.md delegates to `~/.claude/skills/gstack/ship/sections/greptile.md` (not provided) rather than directly to review/greptile-triage.md; it only references greptile-triage.md for reply templates, so dual-path write behavior for /ship cannot be verified from the excerpts. Also, path styles differ (review uses relative `.claude/skills/review/greptile-triage.md`, ship uses absolute `~/.claude/skills/gstack/...`)."],"score":2,"reasoning":"review and greptile-triage.md agree on the dual-write model (per-project + global) and reply-template delegation, but retro contradicts the intended architecture on the key read path (per-project instead of global) and uses a different REMOTE_SLUG derivation, which together can cause retro to miss history entirely or aggregate the wrong scope. These are functional contradictions, not just stylistic drift."},"latency_ms":15653,"stop_reason":"end_turn","usage":{"input_tokens":2915,"output_tokens":1104},"cost_usd":0.08435}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the triage doc as `.claude/skills/review/greptile-triage.md` (relative, no `gstack` segment) while ship/SKILL.md uses `~/.claude/skills/gstack/review/greptile-triage.md` — same intended file, inconsistent path spelling","ship/SKILL.md annotates history writes with entry types (fix/fp/already-fixed) matching what retro counts, but review/SKILL.md's 'Save to both per-project and global greptile-history' lines omit the type tag (relies implicitly on triage.md for format)","greptile-triage.md excerpt shows a PROJECT_HISTORY variable but no corresponding GLOBAL_HISTORY variable, though the global path is listed in prose"],"score":4,"reasoning":"The core data architecture is implemented consistently: greptile-triage.md is the single owner of path derivation and defines both per-project and global paths; REMOTE_SLUG derivation is identical in both occurrences; /review and /ship both save to both paths and delegate mechanics/templates to triage.md; /retro explicitly reads only the global aggregate and never a per-project copy, with type counts (fix/fp/already-fixed) matching the types /ship writes. Only minor non-contradictory gaps exist (path-reference spelling for the triage doc, review's save lines lacking explicit type tags)."},"latency_ms":16585,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1175},"cost_usd":0.09574}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG is derived three different ways: review/SKILL.md uses `basename \"$PWD\"` (bare directory name), ship/SKILL.md uses a sed over `git remote get-url origin` producing `owner__repo`, and greptile-triage.md uses `browse/bin/remote-slug` with a fallback to `basename` of the git toplevel. For the same repo these can yield different slugs (e.g. `myrepo` vs `acme__myrepo`), so the per-project path diverges across files.","Because review/SKILL.md computes its own slug (`basename \"$PWD\"`) for reading suppressions while delegating writes to greptile-triage.md (which uses `remote-slug`), /review may read suppressions from a different `~/.gstack/projects/{slug}/greptile-history.md` than the one it writes to — suppressions would silently never match.","ship/SKILL.md's `mkdir -p` comment claims 'ship writes its per-project greptile-history.md here' using its own owner__repo slug, but the actual write mechanics are delegated to greptile-triage.md which may resolve a different slug; the directory ship creates may not be the one triage writes into.","ship/SKILL.md's sed pattern `[^/.]+` for the repo segment breaks on repo names containing dots (e.g. `foo.js`), which would further diverge from the other derivations.","review/SKILL.md uses `basename \"$PWD\"` rather than the git toplevel, so running /review from a subdirectory yields a different slug than running it from repo root."],"score":2,"reasoning":"The high-level data flow is consistent: greptile-triage.md defines both per-project and global paths, /review and /ship both delegate to it and say 'save to both per-project and global', and /retro explicitly reads only the global aggregate. However, the REMOTE_SLUG derivation — which the architecture requires to be consistent — is implemented three different ways, which can place per-project history under different directories per skill and break the suppression read/write round-trip in /review. The global path (used by /retro) is unaffected, so the aggregation path works, but the per-project path is functionally inconsistent."},"latency_ms":18193,"stop_reason":"end_turn","usage":{"input_tokens":3884,"output_tokens":1480},"cost_usd":0.11284}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `sections/greptile.md` rather than directly to `greptile-triage.md`; greptile-triage.md claims /ship Step 10 references it, but the extracts don't show the intermediate file actually doing so, so the delegation chain for /ship's write mechanics is unverifiable here.","retro/SKILL.md reads whatever path the preamble's `GREPTILE_HISTORY` line prints; the extract never states this is the global `~/.gstack/greptile-history.md`, so 'global only' is implied by delegation to an unseen script rather than stated.","retro expects entry types `fix` / `fp` / `already-fixed`, while greptile-triage.md classifies as VALID & ACTIONABLE / VALID BUT ALREADY FIXED / FALSE POSITIVE / SUPPRESSED; the write-side entry format and the mapping (and whether SUPPRESSED is logged to global) isn't visible in the extract, so the read/write schema can't be fully confirmed."],"score":4,"reasoning":"No direct contradictions. review/SKILL.md explicitly saves to both per-project and global and defers reply/write mechanics to greptile-triage.md. greptile-triage.md defines both paths and derives REMOTE_SLUG identically in both places it appears. retro reads a single path supplied by the preamble, consistent with global-only aggregation, and does not derive REMOTE_SLUG itself (correct, since it shouldn't be per-project). The deductions are for unverifiable links: ship's indirection through sections/greptile.md, retro's reliance on an unseen preamble to supply the global path, and the unseen entry-format mapping between writer classifications and retro's type vocabulary."},"latency_ms":19147,"stop_reason":"end_turn","usage":{"input_tokens":2972,"output_tokens":1514},"cost_usd":0.10542}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation is inconsistent across files: review/SKILL.md uses `basename \"$PWD\"` (yields e.g. `repo`), ship/SKILL.md uses a git-remote sed producing `owner__repo`, and greptile-triage.md uses the `remote-slug` binary with a `basename $(git rev-parse --show-toplevel)` fallback. These can produce three different slugs for the same repository.","Because review/SKILL.md delegates history WRITES to greptile-triage.md (remote-slug derived path) but READS suppressions from `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` using its own `basename \"$PWD\"` slug, /review may look for suppressions in a directory that was never written to, silently breaking the per-project suppression feature (and it also breaks if invoked from a subdirectory).","ship/SKILL.md re-derives REMOTE_SLUG and runs its own `mkdir -p` claiming 'ship writes its per-project greptile-history.md here', but the actual write mechanics are delegated to greptile-triage.md which derives the slug independently — redundant logic that can diverge (e.g., no-remote repos fall back differently) rather than reusing the shared `remote-slug` helper.","Minor: review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying the entry `type` (fix/fp/already-fixed) that ship/SKILL.md and retro/SKILL.md rely on; this is acceptable only if greptile-triage.md's write format enforces the type field."],"score":3,"reasoning":"The high-level architecture is implemented consistently: /review and /ship both write to per-project and global paths, both delegate reply templates and write mechanics to greptile-triage.md, greptile-triage.md defines both paths, and /retro explicitly reads only the global aggregate with matching entry types. However, the REMOTE_SLUG derivation — which the intended architecture explicitly requires to be consistent — differs in all three files that use it, and in review/SKILL.md this creates a concrete read/write path mismatch for suppressions. That is a real functional inconsistency, not just stylistic drift."},"latency_ms":19568,"stop_reason":"end_turn","usage":{"input_tokens":3884,"output_tokens":1624},"cost_usd":0.12004}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files implement the intended architecture coherently. greptile-triage.md is the single source of truth for write mechanics: it derives REMOTE_SLUG identically in both occurrences, defines PROJECT_HISTORY as ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md plus the global ~/.gstack/greptile-history.md, and its 'History File Writes' section appends to both. review/SKILL.md (Step 2.5) and ship/SKILL.md (Step 10) both delegate recording to 'greptile-triage.md § History File Writes' and explicitly state both per-project and global files are appended, with ship stating it records 'exactly as /review records them'. retro/SKILL.md reads only the global path, explicitly noting 'never a per-project copy', and repeats this in the JSON-output note. The only non-issue observation is that ship routes through an intermediate sections/greptile.md file for the step itself, but the write delegation still points at greptile-triage.md, so no contradiction exists."},"latency_ms":11686,"stop_reason":"end_turn","usage":{"input_tokens":3037,"output_tokens":845},"cost_usd":0.07262}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md routes Greptile handling through `sections/greptile.md` (not shown in the extract), so the actual write-path mechanics in that intermediate file cannot be verified here; ship/SKILL.md itself does correctly state that greptile-triage.md § History File Writes appends to both paths","REMOTE_SLUG derivation appears twice in greptile-triage.md (identical both times); no other file derives it independently, so cross-file consistency is trivially satisfied but relies on triage.md being the sole source"],"score":5,"reasoning":"All files agree with the intended architecture: greptile-triage.md defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md) and instructs appending to both; review/SKILL.md and ship/SKILL.md both explicitly delegate to greptile-triage.md § History File Writes and both state writes go to per-project AND global; retro/SKILL.md reads only the global path and explicitly says 'never a per-project copy'. REMOTE_SLUG derivation is identical in both occurrences. No contradictions found — only minor unverifiable indirection in ship."},"latency_ms":11525,"stop_reason":"end_turn","usage":{"input_tokens":2725,"output_tokens":944},"cost_usd":0.07445}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files align with the intended architecture. greptile-triage.md is the single source of truth defining REMOTE_SLUG derivation and both write targets (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md). review/SKILL.md directly delegates to greptile-triage.md and instructs saving to both paths. ship/SKILL.md delegates via ship/sections/greptile.md, which in turn delegates to greptile-triage.md, and also instructs saving to both paths (with a ship-specific 'already-fixed' type). retro/SKILL.md reads only the global path (~/.gstack/greptile-history.md), matching the aggregation intent, and its counted entry types (fix, fp, already-fixed) are compatible with the types written by review/ship. REMOTE_SLUG is only derived in greptile-triage.md, so there is no cross-file divergence; retro correctly does not need it. The only observation is the extra indirection layer in ship (sections/greptile.md), which is a structural choice rather than an inconsistency."},"latency_ms":10018,"stop_reason":"end_turn","usage":{"input_tokens":1096,"output_tokens":817},"cost_usd":0.05181}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md save instructions ('Save to both per-project and global greptile-history') omit the entry type annotations (fix/fp/already-fixed) that ship/SKILL.md includes and that retro/SKILL.md depends on for counting; the type schema is presumably defined in greptile-triage.md but is not visible in the extracted lines","greptile-triage.md derives REMOTE_SLUG twice with identical code (redundant but not contradictory); only PROJECT_HISTORY is assigned to a variable while the global path is referenced as a literal"],"score":4,"reasoning":"All files agree on the two-path architecture: /review and /ship both write to per-project and global history, both delegate fetch/classify/reply/write mechanics to greptile-triage.md, greptile-triage.md defines both paths with consistent REMOTE_SLUG derivation, and /retro explicitly reads only the global aggregate and never a per-project copy. Entry types in /ship (fix, fp, already-fixed) match the types /retro counts. The only gaps are minor explicitness differences in /review's save wording and some redundancy in the triage doc, not contradictions."},"latency_ms":14430,"stop_reason":"end_turn","usage":{"input_tokens":3705,"output_tokens":1010},"cost_usd":0.08755}
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md defines both paths (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) and derives REMOTE_SLUG identically in both occurrences. /review (Step 2.5) and /ship (Step 10, via sections/greptile.md) both reference greptile-triage.md for fetch/classify/escalation and reply templates, and both explicitly state 'save to both per-project and global greptile-history' — with /ship additionally tagging types (fix, fp, already-fixed) that match exactly what /retro counts. /retro reads only the global path and explicitly says 'never a per-project copy'. The only minor observation is that the extracted /review lines don't explicitly show type tags on saves, but write mechanics are delegated to greptile-triage.md, so this is a presentation difference rather than an architectural contradiction."},"latency_ms":12443,"stop_reason":"end_turn","usage":{"input_tokens":2417,"output_tokens":978},"cost_usd":0.07307}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md has one line ('If user chooses C: ... save to greptile-history (type: fp)') that omits the 'both per-project and global' qualifier used elsewhere in the same file and in review/SKILL.md — ambiguous rather than contradictory, since the write mechanics are delegated to greptile-triage.md which writes both paths","greptile-triage.md defines a PROJECT_HISTORY variable but no corresponding GLOBAL_HISTORY variable appears in the extracted lines; the global path is listed only as a literal, a minor asymmetry in how the two write targets are expressed"],"score":4,"reasoning":"All files agree on the two-path architecture: greptile-triage.md derives REMOTE_SLUG identically in both occurrences and lists both ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md as write targets; review and ship both delegate fetch/classify/reply templates to greptile-triage.md and (with one terse exception in ship) explicitly state saving to both per-project and global history; retro reads only the global aggregate and explicitly warns against using a per-project copy. Entry types (fix, fp, already-fixed) match between ship's writes and retro's reads. The only blemish is a single shorthand line in ship that doesn't restate 'both', which is an ambiguity rather than a conflict."},"latency_ms":14427,"stop_reason":"end_turn","usage":{"input_tokens":4011,"output_tokens":987},"cost_usd":0.08946}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly states 'Do not load any shared triage document; /review owns its own Greptile handling', directly contradicting the intended architecture (review delegates write mechanics to greptile-triage.md) and contradicting greptile-triage.md's own claim that 'Both /review (Step 2.5) and /ship (Step 10) reference this document'.","review/SKILL.md writes only to the global path (~/.gstack/greptile-history.md) and never to the per-project path (~/.gstack/projects/{slug}/greptile-history.md), so /review-originated suppressions will not be recorded per-project as the architecture requires.","review/SKILL.md's fetch command omits the `.position != null` filter, the top-level issue-comments endpoint, and the gstack-issue-guard sanitization that greptile-triage.md mandates, so /review and /ship would fetch and process different comment sets with different safety handling.","review/SKILL.md says to reply 'in your own words' while greptile-triage.md requires using the fixed reply templates (with GStack markers like **Fixed** / **Not a bug.**) that the Tier 2 escalation-detection logic depends on; /review replies would therefore break escalation detection for later /ship runs.","review/SKILL.md never derives REMOTE_SLUG at all (since it skips per-project writes), so REMOTE_SLUG consistency cannot hold across the files that should use it; within greptile-triage.md the two REMOTE_SLUG derivations are identical, and ship delegates correctly."],"score":2,"reasoning":"ship/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: ship delegates to the triage doc and saves to both per-project and global history, the triage doc defines both paths with a consistent REMOTE_SLUG derivation, and retro reads only the global aggregate. However, review/SKILL.md contradicts the architecture on nearly every point—it refuses to use the shared triage document (which itself claims /review references it), writes only to the global path, uses a different fetch pipeline without the guard, and uses free-form replies that break the marker-based escalation detection. Because one of the two writers diverges this sharply, the system is not consistently implemented."},"latency_ms":16427,"stop_reason":"end_turn","usage":{"input_tokens":3589,"output_tokens":1234},"cost_usd":0.09759}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `~/.claude/skills/gstack/ship/sections/greptile.md` rather than directly to `review/greptile-triage.md`; greptile-triage.md claims /ship (Step 10) references it, but that reference can only be transitive through sections/greptile.md, whose contents are not shown — the write-to-both-paths behavior for /ship is therefore unverified from these extracts.","retro/SKILL.md reads 'the greptile-history.md path that GREPTILE_HISTORY printed' without stating whether that is the global `~/.gstack/greptile-history.md` or a per-project path; the intended 'global only' read is implied but not explicit, and depends on a preflight script not shown.","retro expects entry types `fix`, `fp`, `already-fixed` with dates; the entry/line format written by greptile-triage.md is not visible in the extracted lines, so the read/write schema contract cannot be confirmed."],"score":4,"reasoning":"The two-path design is clearly and consistently stated in greptile-triage.md (per-project `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` and global `~/.gstack/greptile-history.md`), review/SKILL.md explicitly saves to both and delegates mechanics/templates to greptile-triage.md, and REMOTE_SLUG derivation is identical in both occurrences (only within greptile-triage.md, so no cross-file drift). Step numbers (Step 2.5 for /review, Step 10 for /ship) match between greptile-triage.md and the skill files. No outright contradictions exist; the deductions are for the extra indirection layer in /ship and the implicit (not stated) global-path assumption in /retro."},"latency_ms":17401,"stop_reason":"end_turn","usage":{"input_tokens":2972,"output_tokens":1228},"cost_usd":0.09112}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md defines both paths (PROJECT_HISTORY at ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) and uses an identical REMOTE_SLUG derivation in both places it appears. review/SKILL.md and ship/sections/greptile.md both delegate fetch/filter/classify/escalation and reply templates to greptile-triage.md, and both instruct saving to 'both per-project and global greptile-history'. retro/SKILL.md reads only the global path, and its entry types (fix, fp, already-fixed) match the types ship records. Step references (review Step 2.5, ship Step 10) match the cross-references in greptile-triage.md. The only trivial observation is that the review extract doesn't annotate entry types on its save line the way ship does, but since write mechanics are delegated to greptile-triage.md this is not a contradiction."},"latency_ms":16396,"stop_reason":"end_turn","usage":{"input_tokens":3992,"output_tokens":1123},"cost_usd":0.09607}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads BOTH the global ~/.gstack/greptile-history.md AND every ~/.gstack/projects/*/greptile-history.md and concatenates them, contradicting the intended architecture where /retro reads from the GLOBAL path only.","Because /review and /ship write every entry to BOTH the per-project and global files (per greptile-triage.md and ship/SKILL.md), retro's concatenation of global + all per-project files will double-count every Greptile entry, skewing the fix/fp/already-fixed counts and signal ratio.","retro/SKILL.md's note refers to a single 'greptile-history.md (the path GREPTILE_HISTORY printed)' while the read instruction describes reading many files — internally inconsistent about whether one or multiple paths are the source.","review/SKILL.md says 'Save to both per-project and global greptile-history' but never specifies entry types (fix/fp/already-fixed) that ship/SKILL.md and retro/SKILL.md rely on; this is only acceptable if greptile-triage.md's write mechanics define the type, which the extracted lines do not explicitly show."],"score":3,"reasoning":"review/SKILL.md, ship/SKILL.md, and greptile-triage.md are mutually consistent: both skills delegate fetch/classify/reply/write mechanics to greptile-triage.md, both save to per-project and global paths, and REMOTE_SLUG derivation is identical in both occurrences within greptile-triage.md. The main inconsistency is retro/SKILL.md, which deviates from the stated 'global-only' read design by also reading all per-project files; given the dual-write architecture this produces double counting, a functional bug rather than just a stylistic divergence. Minor ambiguities remain around entry types in review and the singular-path wording in retro's note."},"latency_ms":14279,"stop_reason":"end_turn","usage":{"input_tokens":4010,"output_tokens":1055},"cost_usd":0.09285}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md has one line ('If user chooses C: ... save to greptile-history (type: fp)') that omits the explicit 'both per-project and global' wording used elsewhere in the same file and in review/SKILL.md; since mechanics are delegated to greptile-triage.md this is not contradictory, but the phrasing is inconsistent.","review/SKILL.md extracted lines do not show the type annotations (fix/fp/already-fixed) that ship/SKILL.md and retro/SKILL.md rely on; likely an extraction artifact but worth verifying so /retro's type counting works on /review-written entries."],"score":4,"reasoning":"All files agree on the core architecture: greptile-triage.md is the single source defining both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md) with an identical REMOTE_SLUG derivation in both places it appears; /review (Step 2.5) and /ship (Step 10, via sections/greptile.md) both delegate fetch/filter/classify/escalation and reply templates to greptile-triage.md and state saves go to both per-project and global history; /retro explicitly reads only the global aggregate and never a per-project copy, filtering by date and counting fix/fp/already-fixed types matching ship's recorded types. The only deviations are minor wording inconsistencies, not contradictions."},"latency_ms":13847,"stop_reason":"end_turn","usage":{"input_tokens":4011,"output_tokens":993},"cost_usd":0.08976}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Do not load any shared triage document; /review owns its own Greptile handling', contradicting the intended delegation to greptile-triage.md and contradicting greptile-triage.md's own claim that 'Both /review (Step 2.5) and /ship (Step 10) reference this document'.","review/SKILL.md writes only to the global path (~/.gstack/greptile-history.md) and never mentions the per-project path (~/.gstack/projects/{slug}/greptile-history.md), violating the dual-write architecture that ship/SKILL.md and greptile-triage.md implement.","review/SKILL.md's fetch uses only the pulls/comments endpoint (line-level) without the position filter, top-level issue-comment fetch, or gstack-issue-guard sanitization that greptile-triage.md specifies, so /review and /ship fetch/classify differently.","review/SKILL.md says 'Reply to each Greptile comment in your own words', whereas greptile-triage.md mandates specific reply templates with GStack markers (**Fixed**, **Not a bug.**, **Already fixed**) that the Tier 2 escalation detection depends on; /review replies without markers will break escalation detection for later runs.","review/SKILL.md records no entry type (fix/fp/already-fixed) when appending to history, while retro/SKILL.md depends on counting those types; entries written by /review may be unparseable/skipped by /retro."],"score":2,"reasoning":"ship/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: ship delegates to greptile-triage.md and writes to both per-project and global paths, greptile-triage.md derives REMOTE_SLUG identically in both places and defines both paths, and retro reads only the global aggregate. However, review/SKILL.md directly contradicts the architecture on several fronts — it refuses to use the shared triage doc, writes only to the global path, uses a divergent fetch/classify procedure, and skips the reply templates/markers and typed history entries that the rest of the system relies on."},"latency_ms":14415,"stop_reason":"end_turn","usage":{"input_tokens":3589,"output_tokens":1109},"cost_usd":0.09134}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Do not load any shared triage document; /review owns its own Greptile handling', directly contradicting greptile-triage.md which states 'Both /review (Step 2.5) and /ship (Step 10) reference this document' and the intended architecture that /review delegates write mechanics to greptile-triage.md.","review/SKILL.md writes only to the global path (~/.gstack/greptile-history.md) and never to the per-project path (~/.gstack/projects/{slug}/greptile-history.md), violating the 'WRITE to BOTH paths' requirement; per-project suppression data from /review runs will be missing.","review/SKILL.md never derives REMOTE_SLUG at all (since it skips the per-project write), so slug derivation cannot be consistent with greptile-triage.md for the /review path.","review/SKILL.md fetches only line-level PR comments (and without the position != null filter or gstack-issue-guard sanitization), while greptile-triage.md fetches both line-level and top-level comments through the issue guard — /review and /ship will see different comment sets and apply different safety handling.","review/SKILL.md instructs replying 'in your own words' rather than using the shared reply templates/GStack markers (**Fixed**, **Not a bug.**, **Already fixed**) that greptile-triage.md's Tier 2 re-flag detection depends on, so /review replies will not be recognized as prior GStack replies by later /ship runs.","review/SKILL.md 'Append the outcome' does not specify the entry format (type: fix/fp/already-fixed) that retro/SKILL.md parses, risking unparseable or miscounted global history entries."],"score":2,"reasoning":"ship/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent and match the intended architecture (ship delegates to triage and writes both paths; triage defines both paths with a consistent REMOTE_SLUG derivation; retro reads only the global aggregate). However, review/SKILL.md contradicts the architecture and the triage doc on nearly every point: it refuses to use the shared triage document, writes only to the global file, skips per-project history and slug derivation, fetches a different comment set without the issue guard, and uses freeform replies instead of the shared templates. This is a substantive architectural contradiction rather than a minor drift."},"latency_ms":17011,"stop_reason":"end_turn","usage":{"input_tokens":3277,"output_tokens":1339},"cost_usd":0.09972}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files implement the intended architecture consistently. greptile-triage.md is the single source of truth for both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) and for REMOTE_SLUG derivation; it explicitly names /review Step 2.5 and /ship Step 10 as its consumers, matching the step numbers in those skills. review/SKILL.md and ship/SKILL.md both delegate to greptile-triage.md and both state 'save to both per-project and global greptile-history', so neither hardcodes or re-derives paths or REMOTE_SLUG, avoiding drift. retro/SKILL.md reads only the global path and expects entry types (fix, fp, already-fixed) that align with what ship writes (already-fixed). Only non-blocking observations: ship routes through an intermediate ship/sections/greptile.md (not shown) before reaching greptile-triage.md, and the REMOTE_SLUG command's first fallback uses a cwd-relative path, but these are robustness notes rather than architectural inconsistencies."},"latency_ms":11421,"stop_reason":"end_turn","usage":{"input_tokens":1096,"output_tokens":948},"cost_usd":0.05836}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["/retro reads from the PER-PROJECT path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and explicitly scopes to 'the current repo', but the intended architecture says /retro should read from the GLOBAL path (~/.gstack/greptile-history.md) to aggregate across all projects. The global file is written but never read by any shown consumer.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses `browse/bin/remote-slug` with fallbacks to basename of git toplevel, while retro/SKILL.md uses only `basename \"$(git rev-parse --show-toplevel)\"`. If remote-slug produces a different slug (e.g., owner-repo form), writes and reads will target different directories and retro will silently find no history.","retro's REMOTE_SLUG lacks the `2>/dev/null || pwd` fallback used in greptile-triage.md, so it may error/emit empty slug outside a git repo.","Skill path references differ: review/SKILL.md references a relative `.claude/skills/review/greptile-triage.md`, while ship/SKILL.md references an absolute `~/.claude/skills/gstack/ship/sections/greptile.md`; ship also delegates primarily to `sections/greptile.md` rather than greptile-triage.md directly, so write-to-both-paths behavior for /ship cannot be verified from the shown content."],"score":2,"reasoning":"The write side (review + greptile-triage.md) correctly implements dual-path writes to per-project and global files, and ship references the shared templates. However, the read side directly contradicts the intended architecture: /retro reads the per-project file instead of the global aggregate, and it derives REMOTE_SLUG with a different algorithm than the writer, so even the per-project read may miss the data. These are substantive architectural inconsistencies rather than cosmetic ones."},"latency_ms":14909,"stop_reason":"end_turn","usage":{"input_tokens":3227,"output_tokens":1228},"cost_usd":0.09367}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["Minor: review/SKILL.md's save instructions ('Save to both per-project and global greptile-history') don't explicitly annotate entry types (fix/fp/already-fixed) in the extracted lines, whereas ship/sections/greptile.md does and retro/SKILL.md depends on those exact type labels; this is presumably handled by the shared write format in greptile-triage.md, but it is not visible in the extracted lines."],"score":5,"reasoning":"All files agree on the two-path architecture. greptile-triage.md is the single source of truth for REMOTE_SLUG derivation (identical in both occurrences), the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md), and the global path (~/.gstack/greptile-history.md). Both /review (Step 2.5) and /ship (Step 10 via sections/greptile.md) delegate fetch/classify/reply mechanics to greptile-triage.md and instruct saving to both per-project and global history. /retro reads only the global file and counts by the same type labels (fix, fp, already-fixed) that /ship writes. Summary header format ('+ N Greptile comments (X valid, Y fixed, Z FP)') is also consistent across review, ship, and triage. No contradictions found."},"latency_ms":19474,"stop_reason":"end_turn","usage":{"input_tokens":3680,"output_tokens":1429},"cost_usd":0.10825}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG is derived three different ways: review/SKILL.md uses `basename \"$PWD\"`, ship/SKILL.md uses a `git remote get-url origin | sed ...` pipeline producing `owner__repo`, and greptile-triage.md uses `browse/bin/remote-slug` with a fallback of `basename \"$(git rev-parse --show-toplevel || pwd)\"`. These can produce different slugs for the same repo (e.g. `myrepo` vs `owner__myrepo`, or a subdirectory name when run from a nested cwd).","review/SKILL.md reads suppressions from `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` using the `basename \"$PWD\"` slug, but the writes it delegates to greptile-triage.md use the `remote-slug` derivation — so review may look for suppressions in a different directory than the one that was written to, silently missing them.","ship/SKILL.md runs `mkdir -p` on a per-project directory computed with its own sed-based slug while claiming 'ship writes its per-project greptile-history.md here', yet the actual write mechanics (delegated to greptile-triage.md) compute the directory with a different method; the mkdir may create an unused directory and the write may target another.","greptile-triage.md's fallback (`basename` of repo root) yields a plain repo-name slug, while ship's primary derivation yields `owner__repo`; the fallback format is not aligned with ship's format, so per-project paths can fork depending on environment."],"score":3,"reasoning":"The core two-path architecture is implemented consistently: greptile-triage.md defines both per-project and global paths, /review and /ship both instruct saving to both paths and delegate reply/write mechanics to greptile-triage.md, and /retro reads only the global aggregate with entry types (fix, fp, already-fixed) matching what /ship records. However, the REMOTE_SLUG derivation — which determines the per-project path — is inconsistent across all three files that use it, which can break the suppression lookup in /review and cause writes/reads to target different directories. This is a real functional inconsistency rather than a cosmetic one, so the configuration is not fully consistent."},"latency_ms":20881,"stop_reason":"end_turn","usage":{"input_tokens":3884,"output_tokens":1622},"cost_usd":0.11994}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md directs all three Greptile outcomes (fix, fp, already-fixed) to be saved to the per-project greptile-history ONLY and explicitly states 'ship never writes the global file', contradicting the intended architecture where /ship writes to BOTH paths.","Because /ship skips the global file, /retro (which reads ONLY ~/.gstack/greptile-history.md) will silently omit every Greptile outcome produced through /ship, skewing the signal ratio and undercounting catches/FPs.","review/greptile-triage.md documents both per-project and global as the write targets (mkdir for per-project, lists global aggregate), so ship/SKILL.md's 'per-project only' instruction also contradicts the shared reference it delegates to.","review/SKILL.md ('Save to both per-project and global') and ship/SKILL.md ('per-project only') disagree with each other even though both delegate to the same greptile-triage.md and feed the same /retro consumer.","Minor: review/SKILL.md does not explicitly tag entries with the `fix`/`fp`/`already-fixed` type values that retro counts, whereas ship/SKILL.md does; the extracted lines don't confirm review's entries are parseable by retro."],"score":2,"reasoning":"REMOTE_SLUG derivation is consistent (identical in both occurrences in greptile-triage.md), retro correctly reads only the global path, and review writes to both paths as intended. However, ship/SKILL.md directly contradicts the intended architecture and the shared triage reference by writing per-project only and explicitly forbidding global writes, which breaks retro's cross-project aggregation for all ship-originated Greptile outcomes. This is a substantive data-flow contradiction, not a cosmetic one."},"latency_ms":15243,"stop_reason":"end_turn","usage":{"input_tokens":3710,"output_tokens":1101},"cost_usd":0.09215}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation is inconsistent: ship/SKILL.md uses `REMOTE_SLUG=$(~/.claude/skills/gstack/browse/bin/remote-slug 2>/dev/null)` with no fallback, while greptile-triage.md uses a three-stage fallback chain (`browse/bin/remote-slug || ~/.claude/skills/gstack/browse/bin/remote-slug || basename $(git rev-parse --show-toplevel)`). If remote-slug fails, ship produces an empty slug (writing to `~/.gstack/projects//greptile-history.md`) while triage falls back to the repo basename — the per-project history could land in different directories depending on which snippet is executed.","ship/SKILL.md duplicates the REMOTE_SLUG/mkdir mechanics that are supposed to be delegated to greptile-triage.md, creating a second source of truth that has already drifted (see above). review/SKILL.md correctly delegates without re-implementing."],"score":4,"reasoning":"The core architecture is implemented consistently: both /review and /ship write to per-project and global greptile-history and delegate to greptile-triage.md, which defines both paths (`~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` and `~/.gstack/greptile-history.md`); /retro reads only the global path and explicitly rejects per-project copies; history types (fix/fp/already-fixed) match between writers and reader. The only inconsistency is ship's redundant, fallback-less REMOTE_SLUG derivation that diverges from the canonical one in greptile-triage.md, which could cause per-project history to be written to a different location in failure cases."},"latency_ms":13517,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1064},"cost_usd":0.09118}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `ship/sections/greptile.md` rather than `review/greptile-triage.md` directly, while greptile-triage.md claims `/ship (Step 10)` references it — the extracted ship lines cannot confirm the chain sections/greptile.md -> greptile-triage.md, nor that /ship writes to both per-project and global paths","retro/SKILL.md reads whichever path the preamble's `GREPTILE_HISTORY` line prints; the extracted lines do not show that this resolves to the global `~/.gstack/greptile-history.md` rather than the per-project path, so the 'global-only' read contract is not verifiable from retro's text alone","Minor: greptile-triage.md defines `PROJECT_HISTORY` as a variable but only lists the global path as a literal, with no corresponding `GLOBAL_HISTORY` variable — cosmetic asymmetry, not a contradiction"],"score":4,"reasoning":"No direct contradictions: review/SKILL.md correctly delegates to greptile-triage.md and states writes go to both per-project and global history; greptile-triage.md defines both paths and uses an identical REMOTE_SLUG derivation in both places it appears; retro reads a single greptile-history.md consistent with aggregating from one global file; the Greptile summary header format matches between review and triage. The deductions are for indirection that cannot be verified from the extract: /ship goes through sections/greptile.md instead of referencing greptile-triage.md directly (contradicting triage.md's self-description slightly), and retro's path is resolved by an external preamble rather than stated explicitly as the global path."},"latency_ms":18057,"stop_reason":"end_turn","usage":{"input_tokens":3284,"output_tokens":1238},"cost_usd":0.09474}
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files implement the intended architecture coherently. greptile-triage.md is the single source of truth for the two paths (per-project `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` and global `~/.gstack/greptile-history.md`) and for REMOTE_SLUG derivation, which appears twice with an identical fallback chain. Both /review (Step 2.5) and /ship (Step 10) delegate fetch/classify/reply mechanics to greptile-triage.md and explicitly save to both per-project and global history; ship's entry types (fix, fp, already-fixed) match exactly the types /retro counts. /retro reads only the global path and explicitly says 'never a per-project copy', matching the cross-project aggregation intent. The only trivial nit is that the extracted /review lines don't spell out the `type:` tags the way /ship does, but since write mechanics are delegated to greptile-triage.md this is not a contradiction. No conflicting paths, roles, or derivations found."},"latency_ms":15418,"stop_reason":"end_turn","usage":{"input_tokens":2729,"output_tokens":1033},"cost_usd":0.07894}
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["Minor: review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying the entry type tag (ship/SKILL.md explicitly uses type: fix / fp / already-fixed, which retro depends on for counting) — presumably greptile-triage.md supplies the type format, but review is less explicit than ship.","Minor: ship/SKILL.md adds an extra indirection (sections/greptile.md → greptile-triage.md) rather than referencing greptile-triage.md directly, but the delegation target is the same.","Minor: REMOTE_SLUG derivation is duplicated verbatim in greptile-triage.md (two identical lines) rather than defined once — consistent, but redundant."],"score":5,"reasoning":"All four files implement the intended architecture coherently: greptile-triage.md owns the write mechanics and defines both the per-project ($HOME/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global ($HOME/.gstack/greptile-history.md) paths with a single, consistent REMOTE_SLUG derivation; /review and /ship both delegate to greptile-triage.md and both state they save to per-project AND global; /retro reads exclusively from the global path and explicitly forbids per-project copies, and its type taxonomy (fix, fp, already-fixed) matches what /ship writes. No contradictions found — only small differences in explicitness and redundancy."},"latency_ms":14454,"stop_reason":"end_turn","usage":{"input_tokens":2417,"output_tokens":1259},"cost_usd":0.08712}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates Step 10 execution to `sections/greptile.md` (not shown), so the chain ship → sections/greptile.md → greptile-triage.md § History File Writes cannot be fully verified from the excerpts, though ship/SKILL.md explicitly asserts the writes go to both files via greptile-triage.md","REMOTE_SLUG derivation appears twice in greptile-triage.md (duplicated rather than defined once), though both instances are byte-identical"],"score":5,"reasoning":"All files agree with the intended architecture: greptile-triage.md defines both paths (per-project via REMOTE_SLUG and global ~/.gstack/greptile-history.md) and its § History File Writes appends to both; review/SKILL.md and ship/SKILL.md both delegate recording to that section and state it writes to both per-project and global; retro/SKILL.md reads only the global path and explicitly excludes per-project copies; REMOTE_SLUG derivation is identical in every occurrence. No contradictions found — only an unverifiable indirection through ship's sections/greptile.md and a harmless duplication."},"latency_ms":13551,"stop_reason":"end_turn","usage":{"input_tokens":2725,"output_tokens":1036},"cost_usd":0.07905}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md references `$REMOTE_SLUG` for the optional per-project read but the extracted lines show no derivation of REMOTE_SLUG in that file; the derivation is only defined (identically, twice) in greptile-triage.md, so consistency depends on retro's preamble reproducing the same fallback chain.","retro/SKILL.md's primary read is 'the path GREPTILE_HISTORY printed' rather than an explicit `~/.gstack/greptile-history.md`; the global path is implied (and the per-project path is offered as a separate optional read) but not stated literally.","retro/SKILL.md permits an optional per-project read 'for a per-repo breakdown', which slightly extends the stated 'READS from GLOBAL path only' architecture, though it does not contradict global aggregation."],"score":4,"reasoning":"All write paths agree: /review and /ship both delegate to greptile-triage.md and both state saving to per-project and global greptile-history, with matching entry types (fix, fp, already-fixed) that retro consumes. greptile-triage.md defines both paths and a single consistent REMOTE_SLUG derivation. /retro aggregates from the GREPTILE_HISTORY (global) path with the per-project path only as an optional supplement. The only gaps are retro's implicit global path and an unshown REMOTE_SLUG derivation, which are ambiguities rather than contradictions."},"latency_ms":14469,"stop_reason":"end_turn","usage":{"input_tokens":3713,"output_tokens":1174},"cost_usd":0.09583}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs across all three files: review/SKILL.md uses `basename \"$PWD\"` (yields e.g. `repo`), ship/SKILL.md uses an inline sed on the git remote URL (yields `owner__repo`), and greptile-triage.md uses `browse/bin/remote-slug` with a fallback to the git toplevel basename. The intended architecture requires consistent derivation.","Because review/SKILL.md derives REMOTE_SLUG as `basename \"$PWD\"`, the per-project suppression path it reads (`~/.gstack/projects/$REMOTE_SLUG/greptile-history.md`) will not match the `owner__repo` slug path that greptile-triage.md (and ship) write to, so suppressions written during triage may never be found by /review.","review/SKILL.md's `basename \"$PWD\"` is also sensitive to the current subdirectory, unlike the git-toplevel/remote-based approaches, further diverging per-project paths.","ship/SKILL.md re-implements slug derivation inline rather than delegating to the shared `remote-slug` helper used by greptile-triage.md; its sed also has no fallback when no origin remote exists, whereas greptile-triage.md falls back to the directory basename."],"score":3,"reasoning":"The high-level data flow is implemented consistently: greptile-triage.md defines both per-project and global paths, /review and /ship both instruct saving to both per-project and global history and delegate reply/write mechanics to greptile-triage.md, and /retro explicitly reads only the global aggregate. However, REMOTE_SLUG derivation is inconsistent across the three files that use it, and review/SKILL.md's `basename \"$PWD\"` variant produces a different slug than the shared helper/ship sed, which would cause /review to read suppressions from a path that doesn't match where they are written. This is a real functional inconsistency in the per-project path, though not a contradiction of the overall two-path/global-read design."},"latency_ms":16730,"stop_reason":"end_turn","usage":{"input_tokens":4196,"output_tokens":1389},"cost_usd":0.11141}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs: ship/SKILL.md uses only `~/.claude/skills/gstack/browse/bin/remote-slug` with no fallback, while greptile-triage.md uses a 3-tier fallback chain (relative path → absolute path → basename of git root). If remote-slug fails, ship produces an empty slug (writing to `~/.gstack/projects//greptile-history.md`) while triage would write under the repo basename — divergent per-project paths.","ship/SKILL.md duplicates write mechanics (REMOTE_SLUG derivation and mkdir) that the architecture says should be delegated to greptile-triage.md; review/SKILL.md fully delegates, so the two callers are structured differently.","review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying entry types, while ship/SKILL.md explicitly tags types (fix/fp/already-fixed) that retro depends on; review relies implicitly on triage.md for the type field (not visible in the excerpt)."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both paths, /review and /ship both save to per-project and global, both delegate templates/escalation to triage.md, and /retro explicitly reads only the global aggregate and ignores per-project copies. The main real inconsistency is the REMOTE_SLUG derivation in ship/SKILL.md lacking the fallback chain present in greptile-triage.md, which can yield different per-project paths in failure cases. The remaining issues are minor duplication/underspecification rather than contradictions."},"latency_ms":17310,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1337},"cost_usd":0.10483}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["Minor: REMOTE_SLUG derivation is duplicated verbatim twice within review/greptile-triage.md (fetch section and history-write section) — identical and consistent, but redundant; a single definition would reduce drift risk.","Minor: review/SKILL.md's extracted lines say 'Save to both per-project and global greptile-history' without the explicit '(type: fix|fp|already-fixed)' tags that ship/sections/greptile.md uses; since /retro computes its signal ratio by counting these exact type values, the review path should make the type tag equally explicit (may simply be absent from the extraction).","Cosmetic: ship/sections/greptile.md alternates between 'save per-project/global greptile-history' and 'save to both per-project and global greptile-history' — same meaning, inconsistent phrasing."],"score":5,"reasoning":"All files implement the intended architecture without contradiction. greptile-triage.md is the single source of truth for both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) and REMOTE_SLUG derivation; /review Step 2.5 and /ship Step 10 both delegate to it and both instruct writing to per-project AND global; /retro reads exclusively from the global path and never references the per-project path or REMOTE_SLUG. The type values retro counts (fix, fp, already-fixed) match the types ship writes. Remaining issues are stylistic/redundancy notes, not architectural inconsistencies."},"latency_ms":19589,"stop_reason":"end_turn","usage":{"input_tokens":3680,"output_tokens":1396},"cost_usd":0.1066}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references greptile-triage.md via relative path `.claude/skills/review/greptile-triage.md` while ship/SKILL.md uses absolute `~/.claude/skills/gstack/review/greptile-triage.md` — the install path differs (missing `gstack/` segment and `~/`), which could resolve to a different/nonexistent file depending on cwd","review/SKILL.md's save instructions do not annotate the entry type (fix/fp/already-fixed) the way ship/SKILL.md does; since /retro counts by these exact types, the entry format must be fully specified in greptile-triage.md (not visible in the extracted lines) for retro aggregation of /review writes to work"],"score":4,"reasoning":"The data architecture is implemented consistently: greptile-triage.md defines REMOTE_SLUG identically in both occurrences and declares both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths; both /review (Step 2.5) and /ship (Step 10) say to save to both per-project and global history and defer templates/mechanics to greptile-triage.md, which in turn names exactly those two callers; /retro reads only the global aggregate and explicitly excludes per-project copies, and its type taxonomy (fix, fp, already-fixed) matches the types ship writes. The only wrinkles are a path discrepancy in how review vs ship locate greptile-triage.md and review's lack of explicit type annotations, neither of which contradicts the architecture but could cause operational mismatch."},"latency_ms":24741,"stop_reason":"end_turn","usage":{"input_tokens":4011,"output_tokens":1358},"cost_usd":0.10801}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads BOTH the global `~/.gstack/greptile-history.md` AND every `~/.gstack/projects/*/greptile-history.md` and concatenates them, contradicting the intended architecture where /retro reads from the GLOBAL path only.","Because /review and /ship write every entry to both the per-project and global files, retro's concatenate-then-count approach will double-count each Greptile entry, skewing the fix/fp/already-fixed counts and the signal ratio.","retro/SKILL.md's note says to include the `greptile` field only if `greptile-history.md` (the single path `GREPTILE_HISTORY` printed) exists — this single-file gating is internally inconsistent with the multi-file read described earlier in the same file.","review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying entry type, while ship/SKILL.md explicitly tags entries (type: fix / fp / already-fixed) that retro depends on for counting; minor under-specification unless greptile-triage.md mandates the type field."],"score":3,"reasoning":"The write side is consistent: /review and /ship both delegate to greptile-triage.md, both save to per-project and global paths, and REMOTE_SLUG derivation is defined once (identically, twice) in greptile-triage.md with the per-project path matching the intended `~/.gstack/projects/{slug}/greptile-history.md`. The read side breaks the architecture: /retro is supposed to read only the global aggregate but instead concatenates global plus all per-project files, which contradicts the design and would double-count entries. Not contradictory on write mechanics, but a meaningful architectural deviation on the read path."},"latency_ms":15465,"stop_reason":"end_turn","usage":{"input_tokens":3698,"output_tokens":1097},"cost_usd":0.09183}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads BOTH the global `~/.gstack/greptile-history.md` AND every `~/.gstack/projects/*/greptile-history.md` and concatenates them, contradicting the intended architecture where /retro reads from the GLOBAL path only.","Because /review and /ship write every entry to BOTH per-project and global files, retro's concatenation approach will double-count every entry (each appears once in global and once in its project file), skewing fix/fp/already-fixed counts and the signal ratio unless deduplication is performed (none is specified).","retro/SKILL.md is internally inconsistent: the metric instruction reads multiple files, but the JSON note says to include the `greptile` field only if `greptile-history.md` (the single path `GREPTILE_HISTORY` printed) exists — a singular-path condition that doesn't match the multi-file read."],"score":3,"reasoning":"review/SKILL.md, ship/SKILL.md, and greptile-triage.md are mutually consistent: both skills delegate fetch/classify/reply mechanics to greptile-triage.md, both save to per-project and global history, output headers match, and REMOTE_SLUG derivation is identical in both occurrences within greptile-triage.md. The inconsistency is in retro/SKILL.md, which deviates from the 'global only' read design by also reading all per-project files; given the dual-write architecture this produces double-counted metrics, which is a material functional defect rather than a cosmetic mismatch."},"latency_ms":13177,"stop_reason":"end_turn","usage":{"input_tokens":4010,"output_tokens":966},"cost_usd":0.0884}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs between files: ship/SKILL.md uses only `~/.claude/skills/gstack/browse/bin/remote-slug 2>/dev/null` with no fallback, while review/greptile-triage.md uses a three-stage fallback chain (`browse/bin/remote-slug` || `~/.claude/skills/gstack/browse/bin/remote-slug` || `basename $(git rev-parse --show-toplevel)`). If the script fails in /ship, REMOTE_SLUG is empty and the per-project path collapses to `~/.gstack/projects//greptile-history.md`, diverging from where greptile-triage.md would write.","ship/SKILL.md partially duplicates write mechanics (REMOTE_SLUG derivation and mkdir for the per-project directory) instead of fully delegating them to greptile-triage.md, creating a second place that can drift from the canonical definition."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both the per-project and global paths; /review and /ship both save to 'both per-project and global greptile-history' for fix/fp/already-fixed types and reference greptile-triage.md for templates and triage; /retro explicitly reads only the global `~/.gstack/greptile-history.md` and never a per-project copy, with the type counts (fix, fp, already-fixed) matching the types written by /ship. The main inconsistency is the REMOTE_SLUG derivation, which lacks the fallback chain in ship/SKILL.md, and the minor duplication of write-path mechanics in ship rather than pure delegation. No outright contradictions, but one real divergence that could produce different per-project paths."},"latency_ms":15482,"stop_reason":"end_turn","usage":{"input_tokens":4110,"output_tokens":1209},"cost_usd":0.10155}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Do not load any shared triage document; /review owns its own Greptile handling', but greptile-triage.md says 'Both /review (Step 2.5) and /ship (Step 10) reference this document' — direct contradiction about whether /review delegates to greptile-triage.md.","review/SKILL.md writes only to the global path (~/.gstack/greptile-history.md) and never mentions the per-project path (~/.gstack/projects/{slug}/greptile-history.md), violating the intended two-path write architecture; per-project suppressions will not be recorded by /review.","review/SKILL.md does not derive REMOTE_SLUG at all (since it never writes per-project), so slug derivation cannot be consistent between /review and the shared triage doc; only greptile-triage.md derives REMOTE_SLUG (consistently within itself).","review/SKILL.md's inline fetch only queries the pulls/comments endpoint (line-level), omits top-level issue comments, omits the position != null filter, and skips the gstack-issue-guard sanitization step that greptile-triage.md mandates — so /review and /ship classify different comment sets with different safety handling.","review/SKILL.md does not use the shared reply templates (Fix / Already Fixed / False Positive) nor the GStack markers (**Fixed**, **Not a bug.**, **Already fixed**) that greptile-triage.md's Tier 2 escalation detection depends on; replies 'in your own words' from /review will break escalation detection for /ship later.","review/SKILL.md does not record a type (fix/fp/already-fixed) when appending to the global history, which /retro requires to compute the signal ratio."],"score":2,"reasoning":"ship/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent and match the intended architecture (ship delegates to triage doc and writes both paths; retro reads the global path only; REMOTE_SLUG derivation is identical in both places it appears). However, review/SKILL.md directly contradicts the architecture and the triage doc: it refuses to use the shared document, writes only to the global path, uses a divergent fetch/classify/reply flow, and omits the type field and GStack markers that downstream /ship escalation and /retro aggregation rely on."},"latency_ms":17994,"stop_reason":"end_turn","usage":{"input_tokens":3277,"output_tokens":1267},"cost_usd":0.09612}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["Minor: ship/SKILL.md routes Step 10 execution through `sections/greptile.md` (not shown here) while greptile-triage.md says /ship references it directly; the write-path statement in ship/SKILL.md explicitly defers to greptile-triage.md § History File Writes, so no contradiction, but the extra indirection is a place where drift could occur.","Minor: REMOTE_SLUG derivation appears twice in greptile-triage.md with identical logic; duplication is consistent today but is a maintenance risk."],"score":5,"reasoning":"All four files agree with the intended architecture. review/SKILL.md and ship/SKILL.md both delegate write mechanics to greptile-triage.md § History File Writes and both state writes go to per-project AND global paths. greptile-triage.md defines the per-project path as ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and the global path as ~/.gstack/greptile-history.md, and its History File Writes section appends to both. retro/SKILL.md reads only the global ~/.gstack/greptile-history.md and explicitly says 'never a per-project copy'. REMOTE_SLUG derivation is identical in every place it appears. No contradictory paths or roles were found."},"latency_ms":13625,"stop_reason":"end_turn","usage":{"input_tokens":2725,"output_tokens":1107},"cost_usd":0.0826}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files agree on the two-path architecture. greptile-triage.md defines both paths (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) and the REMOTE_SLUG derivation, and it is the only file deriving REMOTE_SLUG, so no divergence exists. /review and /ship both delegate fetch/filter/classify to greptile-triage.md and both explicitly state 'Save to both per-project and global greptile-history'. /ship adds one indirection via ship/sections/greptile.md, but that file in turn points to review/greptile-triage.md, so write mechanics remain centralized. /retro reads only the global path, matching the aggregation intent, and its entry types (fix, fp, already-fixed) align with the type /ship records. No contradictions found."},"latency_ms":10177,"stop_reason":"end_turn","usage":{"input_tokens":1096,"output_tokens":775},"cost_usd":0.04971}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files align with the intended architecture. greptile-triage.md defines both paths (per-project at ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global at ~/.gstack/greptile-history.md) and owns the REMOTE_SLUG derivation and mkdir. Both review/SKILL.md and ship/SKILL.md delegate to greptile-triage.md (ship via an extra indirection through sections/greptile.md, which itself points back to greptile-triage.md) and explicitly state 'Save to both per-project and global greptile-history'. retro/SKILL.md reads only the global path ~/.gstack/greptile-history.md and counts entry types (fix, fp, already-fixed) that match the type vocabulary ship uses. REMOTE_SLUG derivation appears in only one file (greptile-triage.md), which is consistent with the delegation design and avoids divergence; no conflicting derivations exist in the other files."},"latency_ms":11783,"stop_reason":"end_turn","usage":{"input_tokens":1408,"output_tokens":792},"cost_usd":0.05368}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG is derived three different ways: review/SKILL.md uses `basename \"$PWD\"`, ship/SKILL.md parses the origin URL into `owner__repo` via sed, and greptile-triage.md uses the `remote-slug` script with a fallback to basename of the git toplevel. These can yield different slugs for the same repo (e.g. `gstack` vs `owner__gstack`), so per-project history may be written to one directory and read from another.","review/SKILL.md reads suppressions from `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` using the `basename $PWD` slug, but the writes it delegates to greptile-triage.md use the remote-slug derivation — suppressions can silently fail to match if the two slugs differ (and `basename $PWD` also breaks when invoked from a subdirectory).","ship/SKILL.md's sed-based derivation has no fallback when there is no `origin` remote, unlike greptile-triage.md, which falls back to the directory name; ship's `mkdir -p` would then target `~/.gstack/projects//`."],"score":3,"reasoning":"The core architecture is implemented consistently: /review and /ship both delegate to greptile-triage.md, which writes to both the per-project and global paths; /retro reads only the global aggregate and explicitly rejects per-project copies; the global path `~/.gstack/greptile-history.md` and the per-project pattern `~/.gstack/projects/{slug}/greptile-history.md` match everywhere. The inconsistency is confined to REMOTE_SLUG derivation, which differs across all three files that use it and can cause per-project reads/writes to target different directories — a meaningful but localized defect rather than a contradictory architecture."},"latency_ms":15385,"stop_reason":"end_turn","usage":{"input_tokens":3884,"output_tokens":1172},"cost_usd":0.09744}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states 'save per-project greptile-history only (ship never writes the global file)' for all three outcome types (fix, fp, already-fixed), contradicting the intended architecture that /ship writes to BOTH per-project and global paths.","Because /ship never writes the global file, any Greptile triage performed during /ship is invisible to /retro, which reads only the global ~/.gstack/greptile-history.md — retro's signal ratio will undercount catches/FPs from ship workflows.","ship/SKILL.md contradicts review/greptile-triage.md, which it delegates to: the triage doc defines both the per-project and global aggregate paths as write targets, while ship overrides this to per-project only.","review/SKILL.md ('Save to both per-project and global greptile-history') and ship/SKILL.md ('per-project only') implement different write policies despite both delegating to the same shared triage document."],"score":2,"reasoning":"review/SKILL.md, review/greptile-triage.md, and retro/SKILL.md are mutually consistent with the intended architecture: triage defines both paths with a single consistent REMOTE_SLUG derivation, review writes to both, and retro reads only the global aggregate. However, ship/SKILL.md directly contradicts this in three places by asserting it writes per-project only and never touches the global file. This is not a minor wording drift but an explicit architectural contradiction that breaks the retro aggregation pipeline for ship-originated triage data."},"latency_ms":11737,"stop_reason":"end_turn","usage":{"input_tokens":3710,"output_tokens":838},"cost_usd":0.079}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the triage doc as `.claude/skills/review/greptile-triage.md` (relative, no `gstack/` segment) while ship/SKILL.md and greptile-triage.md itself use `~/.claude/skills/gstack/...` — a path reference inconsistency, though not a data-architecture one","review/SKILL.md saves to both histories but does not annotate entry types (fix/fp/already-fixed) the way ship/SKILL.md does; retro depends on these type values, so review relies implicitly on greptile-triage.md's entry format to emit them","review/SKILL.md lists a fourth classification (SUPPRESSED) that is not reflected in the shared summary header format `(X valid, Y fixed, Z FP)` used by ship and triage — minor, since suppressed items presumably derive from per-project history and are intentionally omitted"],"score":4,"reasoning":"The core data architecture matches the intent across all files: greptile-triage.md defines REMOTE_SLUG identically in both occurrences, derives PROJECT_HISTORY as ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md, and lists the global ~/.gstack/greptile-history.md aggregate; both /review and /ship explicitly save to both per-project and global history and delegate reply/write mechanics to greptile-triage.md; /retro reads only the global path and explicitly rejects per-project copies. The only discrepancies are a non-canonical relative path to greptile-triage.md in review/SKILL.md and some minor asymmetry in how entry types are spelled out, neither of which contradicts the two-path write / global-read design."},"latency_ms":18618,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1324},"cost_usd":0.10319}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs between ship/SKILL.md and review/greptile-triage.md: ship uses a single call `~/.claude/skills/gstack/browse/bin/remote-slug 2>/dev/null` with no fallback, while greptile-triage.md uses a fallback chain (`browse/bin/remote-slug || ~/.claude/skills/gstack/browse/bin/remote-slug || basename $(git rev-parse --show-toplevel)`). If remote-slug fails in /ship, REMOTE_SLUG is empty and the per-project path degrades to `~/.gstack/projects//greptile-history.md`, diverging from where triage.md would write.","ship/SKILL.md partially duplicates write mechanics (its own REMOTE_SLUG derivation and `mkdir -p` for the per-project directory) rather than fully delegating to greptile-triage.md as the architecture intends; review/SKILL.md fully delegates, so the two callers are structured differently."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both the per-project and global paths; /review and /ship both explicitly 'save to both per-project and global greptile-history' with matching type labels (fix, fp, already-fixed) that /retro counts; /review and /ship both reference greptile-triage.md for templates and triage steps; /retro reads only the global `~/.gstack/greptile-history.md` and explicitly says never a per-project copy. The only deviations are the REMOTE_SLUG derivation in ship/SKILL.md lacking the fallback chain present in greptile-triage.md, and ship duplicating some write-path mechanics instead of fully delegating. These are minor but real inconsistencies with the stated architecture."},"latency_ms":16422,"stop_reason":"end_turn","usage":{"input_tokens":4110,"output_tokens":1304},"cost_usd":0.1063}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["Minor: review/SKILL.md only shows one explicit 'Save to both per-project and global greptile-history' line (for ALREADY FIXED) and omits the `type:` annotations (fix/fp/already-fixed) that ship/sections/greptile.md includes; the review file relies on delegation to greptile-triage.md for the other outcomes, which is architecturally acceptable but less explicit than /ship."],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md is the single source for write mechanics and defines exactly two paths: per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md). Both /review (Step 2.5) and /ship (Step 10) reference greptile-triage.md for fetch/classify/escalation/reply templates and instruct saving to both per-project and global history. /retro reads only the global path (~/.gstack/greptile-history.md), matching its cross-project aggregation role, and the entry types it counts (fix, fp, already-fixed) exactly match the types /ship writes. REMOTE_SLUG derivation appears only in greptile-triage.md and is byte-identical in both occurrences, so no cross-file drift. No contradictory paths, mismatched type labels, or divergent slug derivations were found."},"latency_ms":16720,"stop_reason":"end_turn","usage":{"input_tokens":3680,"output_tokens":1184},"cost_usd":0.096}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md says it 'may also read ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md for the current repo', which deviates from the intended 'global path only' read for /retro (optional per-project read, not a contradiction of the primary global read).","retro/SKILL.md references $REMOTE_SLUG and the GREPTILE_HISTORY path without showing the derivation in the extracted lines; the global path (~/.gstack/greptile-history.md) is only implied via the preamble variable rather than stated explicitly, so slug derivation consistency with greptile-triage.md cannot be fully verified from these excerpts.","Minor wording variance in ship/SKILL.md ('save per-project/global greptile-history' vs 'save to both per-project and global greptile-history') — same meaning, but not identical phrasing."],"score":4,"reasoning":"review and ship both write to both paths and delegate templates/write mechanics to greptile-triage.md, which defines REMOTE_SLUG identically in both places and lists both per-project and global paths. retro's primary read is the global aggregate via GREPTILE_HISTORY and it counts the same types (fix/fp/already-fixed) that review/ship write. The only notable deviation is retro's optional per-project read for a per-repo breakdown, and the slug derivation in retro isn't visible in the excerpt."},"latency_ms":14491,"stop_reason":"end_turn","usage":{"input_tokens":3713,"output_tokens":1233},"cost_usd":0.09878}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md says it 'may also read ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md for the current repo', which deviates from the intended 'retro READS from the GLOBAL path only' rule (optional per-project read for breakdown).","retro/SKILL.md never names the global path ~/.gstack/greptile-history.md explicitly; it relies on an indirect `GREPTILE_HISTORY: present` line from an unshown preamble, so global-path alignment cannot be verified from the file itself.","retro/SKILL.md references $REMOTE_SLUG without showing a derivation; greptile-triage.md derives it via browse/bin/remote-slug fallback chain, so retro's slug source is unverified (though possibly supplied by the shared preamble).","review/SKILL.md extracted lines only show 'save to both' explicitly for the already-fixed case and omit the (type: fix/fp/already-fixed) tags that ship/SKILL.md uses; likely covered by delegation to greptile-triage.md but not explicit."],"score":4,"reasoning":"greptile-triage.md is the single source of truth defining both paths and an identical REMOTE_SLUG derivation (repeated consistently). /review and /ship both delegate to it and both state writes go to per-project AND global, matching the architecture. /retro primarily reads the global aggregate via GREPTILE_HISTORY and counts by the same type tags (fix/fp/already-fixed) that /ship writes. The only real deviation is retro's optional per-project read and its indirect/unverifiable global path and slug derivation—minor, non-contradictory gaps rather than conflicts."},"latency_ms":19595,"stop_reason":"end_turn","usage":{"input_tokens":3713,"output_tokens":1501},"cost_usd":0.11218}
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) and a single consistent REMOTE_SLUG derivation (identical in both occurrences). review/SKILL.md and ship/SKILL.md both delegate fetch/classify/reply/write mechanics to greptile-triage.md and both explicitly save to per-project AND global history; ship's extra indirection via sections/greptile.md still routes to greptile-triage.md. The entry types ship writes (fix, fp, already-fixed) match exactly the types retro counts. retro/SKILL.md reads only the global path and explicitly forbids using a per-project copy, matching the cross-project aggregation intent. No contradictions found; retro does not derive REMOTE_SLUG itself, which is appropriate since it only needs the global path."},"latency_ms":11710,"stop_reason":"end_turn","usage":{"input_tokens":2417,"output_tokens":936},"cost_usd":0.07097}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["Step number mismatch for /ship: greptile-triage.md says /ship references it at 'Step 3.75', but ship/SKILL.md addresses Greptile comments at 'Step 10'.","ship/SKILL.md delegates to an intermediate file `sections/greptile.md` (not shown) rather than directly to greptile-triage.md; the write-to-both-paths behavior for /ship is therefore only indirectly verifiable (ship/SKILL.md does reference greptile-triage.md reply templates, suggesting the intermediate file routes through it).","Minor path-style inconsistency: review/SKILL.md uses relative `.claude/skills/review/greptile-triage.md` while ship/SKILL.md uses absolute `~/.claude/skills/gstack/ship/sections/greptile.md`.","retro expects entry types `fix`, `fp`, `already-fixed` in the global file; the extracted greptile-triage.md lines don't show the entry format, so field-name alignment can't be fully confirmed (no contradiction visible, just unverified)."],"score":4,"reasoning":"The core data architecture is implemented consistently: greptile-triage.md defines both the per-project ($HOME/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths with a single, identically-repeated REMOTE_SLUG derivation; /review explicitly saves to both paths and delegates fetch/classify/reply mechanics to greptile-triage.md; /ship references greptile-triage.md templates (via a sections file); and /retro reads only the global path for aggregation, matching the intent. The only discrepancies are a stale step-number cross-reference (3.75 vs 10) and an unverified intermediate delegation file for /ship—documentation drift rather than architectural contradiction."},"latency_ms":15372,"stop_reason":"end_turn","usage":{"input_tokens":2829,"output_tokens":1209},"cost_usd":0.08874}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs between ship/SKILL.md and review/greptile-triage.md: ship uses only `~/.claude/skills/gstack/browse/bin/remote-slug 2>/dev/null` with no fallback, while greptile-triage.md uses a three-level fallback chain (local remote-slug → installed remote-slug → basename of git toplevel/pwd). If remote-slug fails, ship yields an empty slug and would write to `~/.gstack/projects//greptile-history.md`, whereas triage would write to `~/.gstack/projects/<repo-basename>/greptile-history.md` — the two files could save per-project history to different paths.","ship/SKILL.md duplicates the mkdir/REMOTE_SLUG mechanics that greptile-triage.md already owns, partially undermining the 'delegate write mechanics to greptile-triage.md' principle (duplication rather than contradiction, but it is the source of the derivation drift)."],"score":4,"reasoning":"Both /review and /ship correctly save to both per-project and global greptile-history and delegate reply templates/triage to greptile-triage.md; greptile-triage.md defines both paths explicitly; /retro reads only the global path and explicitly excludes per-project copies. The two-path architecture and the global-only retro read are consistent across all four files. The only substantive inconsistency is the REMOTE_SLUG derivation in ship/SKILL.md lacking the fallback chain present in greptile-triage.md, which can produce divergent per-project paths on failure."},"latency_ms":14686,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":954},"cost_usd":0.08568}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md says it 'may also read ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md for the current repo', which is an optional per-project read that slightly deviates from the stated 'retro reads from the GLOBAL path only' architecture (though the primary metric still comes from the GREPTILE_HISTORY/global path)","retro/SKILL.md references $REMOTE_SLUG but its derivation is not shown in the extracted lines, so consistency with greptile-triage.md's remote-slug derivation cannot be verified from the excerpt","retro/SKILL.md never explicitly names ~/.gstack/greptile-history.md; it relies on 'the path GREPTILE_HISTORY printed' from a preamble, so the global-path binding is implicit rather than stated","greptile-triage.md defines PROJECT_HISTORY as a variable but no corresponding GLOBAL_HISTORY variable is visible, even though the global path is listed as a write target","review/SKILL.md's extracted lines do not show the type labels (fix/fp/already-fixed) that ship/SKILL.md and retro/SKILL.md use, though it delegates mechanics to greptile-triage.md"],"score":4,"reasoning":"All four files agree on the dual-path model: greptile-triage.md defines both per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths with an identical REMOTE_SLUG derivation repeated consistently; review and ship both delegate fetch/classify/reply mechanics to greptile-triage.md and both explicitly save to 'both per-project and global greptile-history'; ship's type labels (fix, fp, already-fixed) match exactly what retro counts; retro's primary read is the GREPTILE_HISTORY (global) path for cross-project aggregation. The only deviations are minor: retro optionally permits a per-project read for a per-repo breakdown (softening 'global only'), and some bindings (REMOTE_SLUG in retro, global path name in retro) are implicit in the excerpt rather than explicit. No contradictions in paths, write targets, or type taxonomy."},"latency_ms":17319,"stop_reason":"end_turn","usage":{"input_tokens":4025,"output_tokens":1476},"cost_usd":0.11405}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the triage doc as `.claude/skills/review/greptile-triage.md` while ship/SKILL.md uses `~/.claude/skills/gstack/review/greptile-triage.md` — different path forms for the same shared file (likely relative vs. absolute, but could resolve differently)","review/SKILL.md save instructions ('Save to both per-project and global greptile-history') omit the entry `type` (fix/fp/already-fixed) that ship/SKILL.md specifies and that retro/SKILL.md depends on for counting; review may rely on greptile-triage.md to supply this, but it is not explicit in the extracted lines","greptile-triage.md defines a `PROJECT_HISTORY` variable but no corresponding global-path variable is shown; the global path appears only in prose, so the write mechanics are slightly asymmetric between the two paths"],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths with identical REMOTE_SLUG derivation in both occurrences; /review and /ship both delegate fetch/classify/templates to greptile-triage.md and both instruct saving to per-project AND global; /retro explicitly reads only the global aggregate and never a per-project copy. Remaining issues are minor documentation-level discrepancies (path reference form, missing explicit type labels in review) rather than architectural contradictions."},"latency_ms":16994,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1312},"cost_usd":0.10259}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md permits an optional read of the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) 'for a per-repo breakdown', which departs slightly from the stated 'retro READS from the GLOBAL path only' rule","retro/SKILL.md references $REMOTE_SLUG without showing a derivation in the extracted lines, so consistency with greptile-triage.md's remote-slug fallback chain cannot be fully confirmed (it may be defined in the preamble script)","retro's primary read path is indirect ('the path GREPTILE_HISTORY printed') rather than explicitly ~/.gstack/greptile-history.md, so the global-path intent is implied rather than stated in these excerpts"],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both the per-project and global paths and the REMOTE_SLUG derivation (identically in both occurrences); review and ship both explicitly save to both per-project and global history and delegate reply/write mechanics to greptile-triage.md; ship's entry types (fix, fp, already-fixed) match exactly the types retro counts. The only deviations are minor: retro optionally reads the per-project file in addition to the global one, and retro's REMOTE_SLUG derivation is not visible in the excerpt. No contradictions, just a small scope widening in retro."},"latency_ms":13430,"stop_reason":"end_turn","usage":{"input_tokens":4025,"output_tokens":1066},"cost_usd":0.09355}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md repeatedly says 'save per-project greptile-history only' and explicitly states '(ship never writes the global file)', contradicting the intended architecture that /ship writes to BOTH per-project and global paths.","Because /ship skips the global file, /retro (which reads ONLY ~/.gstack/greptile-history.md) will never see Greptile outcomes produced via /ship — the retro aggregation silently loses all ship-originated fix/fp/already-fixed entries.","ship/SKILL.md diverges from review/greptile-triage.md, which it delegates to and which lists both the per-project and global aggregate files as write targets; the delegation is thus only partially honored.","review/SKILL.md ('Save to both per-project and global greptile-history') and ship/SKILL.md ('per-project only') disagree with each other on write targets despite both referencing the same shared triage doc."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent with the intended architecture (dual write, global-only read, identical REMOTE_SLUG derivation in both occurrences). However, ship/SKILL.md explicitly and repeatedly contradicts the dual-write design by writing per-project only and asserting it never writes the global file, which breaks the retro aggregation pipeline for ship-driven Greptile actions. This is a direct architectural contradiction rather than a minor wording drift."},"latency_ms":11946,"stop_reason":"end_turn","usage":{"input_tokens":3710,"output_tokens":828},"cost_usd":0.0785}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `sections/greptile.md` rather than directly to `review/greptile-triage.md`; greptile-triage.md claims /ship Step 10 references it, but the intermediate file is not shown, so the delegation chain (and thus dual-path writing from /ship) cannot be verified from the extract.","retro/SKILL.md reads whatever path the preamble's `GREPTILE_HISTORY` line prints and never explicitly names `~/.gstack/greptile-history.md`, so the 'global path only' requirement is implied by an external script rather than stated in the skill file.","retro/SKILL.md expects entry types `fix`, `fp`, `already-fixed`, but the extracted greptile-triage.md lines do not show the history entry format, so the write format vs. read parser cannot be confirmed to match."],"score":4,"reasoning":"The core architecture holds: greptile-triage.md is the single owner of write mechanics, writes to both per-project (`~/.gstack/projects/$REMOTE_SLUG/greptile-history.md`) and global (`~/.gstack/greptile-history.md`) paths, and derives REMOTE_SLUG identically in both occurrences. review/SKILL.md correctly delegates and explicitly says 'Save to both per-project and global'. retro reads a single aggregated history consistent with global-only reading. No contradictions exist; the deductions are for indirections (ship → sections/greptile.md, retro → preamble-printed path) that leave the global-path and write-format guarantees unverifiable from the shown lines rather than for any conflicting statements."},"latency_ms":19246,"stop_reason":"end_turn","usage":{"input_tokens":2972,"output_tokens":1397},"cost_usd":0.09957}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files implement the intended architecture consistently. greptile-triage.md defines both paths (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) and its '## History File Writes' section instructs appending to both. review/SKILL.md and ship/SKILL.md both delegate write mechanics to greptile-triage.md § History File Writes and explicitly state both paths are appended; ship additionally says it records 'exactly as /review records them'. retro/SKILL.md reads only the global path and explicitly says 'never a per-project copy', matching the aggregation intent. REMOTE_SLUG derivation appears twice in greptile-triage.md with identical fallback chains (browse/bin/remote-slug → ~/.claude/skills/gstack/browse/bin/remote-slug → basename of repo root), and no other file re-derives it differently. The only unverifiable element is ship/sections/greptile.md (not shown), but ship/SKILL.md's own text is consistent with the architecture."},"latency_ms":12862,"stop_reason":"end_turn","usage":{"input_tokens":3037,"output_tokens":954},"cost_usd":0.07807}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["REMOTE_SLUG derivation only appears in greptile-triage.md in the provided excerpts; cross-file consistency cannot be fully verified, though centralizing it in the shared doc is itself the consistent design","ship/SKILL.md adds an extra indirection layer (ship/sections/greptile.md) before reaching greptile-triage.md, which is consistent but slightly more fragile than review's direct reference","greptile-triage.md's first REMOTE_SLUG fallback uses a cwd-relative path (browse/bin/remote-slug) which is a minor robustness concern, not an inconsistency"],"score":5,"reasoning":"All four files align with the intended architecture: greptile-triage.md defines both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths and the REMOTE_SLUG derivation; both /review (Step 2.5) and /ship (Step 10) explicitly delegate to greptile-triage.md and state they save to both per-project and global history; /retro reads only the global path, matching its cross-project aggregation role. The entry types /ship writes (already-fixed) match the types /retro counts (fix, fp, already-fixed). No contradictions found."},"latency_ms":15168,"stop_reason":"end_turn","usage":{"input_tokens":1408,"output_tokens":876},"cost_usd":0.05788}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md has one line ('If user chooses C: ... save to greptile-history (type: fp)') that omits the 'both per-project and global' qualifier used in every other write instruction; it is ambiguous rather than contradictory, but it is inconsistent wording relative to the other ship/review lines."],"score":4,"reasoning":"greptile-triage.md is the single source of truth and correctly defines both paths (per-project at ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global at ~/.gstack/greptile-history.md) with an identical REMOTE_SLUG derivation in both places it appears. /review and /ship both delegate fetch/classify/reply/write mechanics to greptile-triage.md and (with one ambiguously-worded exception in /ship) explicitly instruct saving to both per-project and global history. /retro reads only the global ~/.gstack/greptile-history.md and explicitly states it must never use a per-project copy, matching the intended aggregation design. Record types (fix, fp, already-fixed) written by /ship match those counted by /retro. No contradictions found; only a minor wording inconsistency."},"latency_ms":13806,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":986},"cost_usd":0.08629}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["Minor: review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying entry type (fix/fp/already-fixed), whereas ship/SKILL.md explicitly annotates each save with a type; retro depends on these type values for counting. This is likely covered by the shared entry format in greptile-triage.md, but review's wording is less explicit."],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md is the single source for write mechanics, defining REMOTE_SLUG identically in both occurrences and declaring both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths. review/SKILL.md (Step 2.5) and ship/SKILL.md (Step 10) both delegate fetch/classify/reply templates to greptile-triage.md and instruct saving to both per-project and global history, never hardcoding paths. ship's entry types (fix, fp, already-fixed) exactly match the types retro counts. retro/SKILL.md reads only the global aggregate and explicitly says 'never a per-project copy', consistent with cross-project aggregation. No file re-derives REMOTE_SLUG differently, so there is no slug inconsistency. The only gap is a slight difference in explicitness about entry type between review and ship, not an architectural contradiction."},"latency_ms":18783,"stop_reason":"end_turn","usage":{"input_tokens":3705,"output_tokens":1394},"cost_usd":0.10675}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md says it 'may also read ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md for the current repo' — an optional per-project read that deviates from the stated 'retro reads GLOBAL only' architecture (not contradictory, but a scope creep beyond the intended design)","retro/SKILL.md refers to 'the greptile-history.md path that GREPTILE_HISTORY printed' rather than naming ~/.gstack/greptile-history.md explicitly; the extracted lines do not show that this preamble value is the global path, so the global-only intent is only implicitly satisfied","retro/SKILL.md uses $REMOTE_SLUG but no derivation is shown in its extracted lines, so consistency with greptile-triage.md's remote-slug fallback chain cannot be confirmed from the provided excerpts","review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying entry type (fix/fp/already-fixed) as ship/SKILL.md does; retro depends on those type tags for its signal ratio, so review relies on greptile-triage.md to enforce the format"],"score":4,"reasoning":"All files agree on the two-path model: greptile-triage.md defines both ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md with identical REMOTE_SLUG derivation in both occurrences; review and ship both instruct writing to both paths and delegate templates/mechanics to greptile-triage.md; retro reads the aggregate path and counts the same fix/fp/already-fixed types ship records. The only soft deviations are retro's optional per-project read (beyond 'global only'), retro's indirect path reference, and review's omission of explicit type tags — none are contradictions."},"latency_ms":17767,"stop_reason":"end_turn","usage":{"input_tokens":3713,"output_tokens":1547},"cost_usd":0.11448}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files align with the intended architecture. greptile-triage.md is the single source of truth for both paths (per-project via REMOTE_SLUG and global) and the REMOTE_SLUG derivation; review/SKILL.md and ship/SKILL.md both delegate to it (ship via sections/greptile.md, which itself points at greptile-triage.md) and both explicitly save to both per-project and global history. retro/SKILL.md reads only the global ~/.gstack/greptile-history.md and counts entry types (fix/fp/already-fixed) that match what ship/review write (ship notes 'already-fixed' type). REMOTE_SLUG is derived in exactly one place, so no cross-file divergence is possible. Only trivial observation: ship has an extra indirection layer (sections/greptile.md), but it resolves to the same shared triage doc."},"latency_ms":10080,"stop_reason":"end_turn","usage":{"input_tokens":1096,"output_tokens":798},"cost_usd":0.05086}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md contradicts the intended architecture: it says 'save per-project greptile-history only' for fix, fp, and already-fixed types, and explicitly states 'ship never writes the global file', whereas the architecture requires /ship to write to BOTH per-project and global paths.","ship/SKILL.md contradicts review/greptile-triage.md, which it delegates to: greptile-triage.md defines both the per-project path and the global aggregate path as write targets, but ship overrides this with a per-project-only policy.","Downstream data gap: because /retro reads only the global ~/.gstack/greptile-history.md, any Greptile triage performed via /ship will be invisible to retro's cross-project aggregation and signal-ratio metric, breaking the intended aggregation pipeline.","ship/SKILL.md's 'already-fixed' handling says 'no AskUserQuestion needed' and reply via template but saves per-project only, while review/SKILL.md's equivalent step saves to both — the two callers of the same shared triage doc behave differently on persistence."],"score":2,"reasoning":"review/SKILL.md, review/greptile-triage.md, and retro/SKILL.md are mutually consistent: triage defines both paths with an identical REMOTE_SLUG derivation in both occurrences, review saves to both, and retro reads only the global aggregate. However, ship/SKILL.md directly contradicts the architecture and the shared triage doc by asserting per-project-only writes ('ship never writes the global file'), which also undermines retro's global aggregation. This is a substantive contradiction in one of the two writer files, not a cosmetic drift."},"latency_ms":13910,"stop_reason":"end_turn","usage":{"input_tokens":4022,"output_tokens":961},"cost_usd":0.08827}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `sections/greptile.md` rather than `review/greptile-triage.md` directly; greptile-triage.md claims /ship (Step 10) references it, but the extracted ship lines show no direct reference — consistency depends on sections/greptile.md (not shown) forwarding to greptile-triage.md.","retro/SKILL.md reads 'the path GREPTILE_HISTORY printed' without stating it is the global path (~/.gstack/greptile-history.md); correctness relies on an unseen preamble script resolving to the global file rather than the per-project one.","retro/SKILL.md expects entry types `fix`, `fp`, `already-fixed`, but the extracted greptile-triage.md lines do not show the history line format, so the write/read schema cannot be verified from the excerpts."],"score":4,"reasoning":"No direct contradictions. REMOTE_SLUG derivation is identical in both occurrences within greptile-triage.md, write mechanics correctly target both per-project and global paths, review/SKILL.md explicitly defers to greptile-triage.md and mentions saving to both histories, and retro only reads a single aggregated history consistent with global-only reads. Minor gaps are indirections (ship via sections/greptile.md, retro via a printed path) that are plausible but not verifiable from the extracted lines."},"latency_ms":13830,"stop_reason":"end_turn","usage":{"input_tokens":2972,"output_tokens":996},"cost_usd":0.07952}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads BOTH the global ~/.gstack/greptile-history.md AND every ~/.gstack/projects/*/greptile-history.md and concatenates them, contradicting the intended architecture where /retro reads from the GLOBAL path only; since /review and /ship write every entry to both paths, this concatenation double-counts every entry, inflating fix/fp/already-fixed counts (the signal ratio itself may survive, but raw counts in the 'Greptile signal' row will be doubled).","retro/SKILL.md's note says to include the greptile field only if 'greptile-history.md (the path GREPTILE_HISTORY printed) exists' — a single path — which is internally inconsistent with the same file's instruction to read all per-project files as well.","review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying the entry type (fix/fp/already-fixed) for all cases, whereas ship/SKILL.md consistently specifies types; since /retro counts by type, untyped entries from /review could be skipped as unparseable (minor, likely covered by greptile-triage.md's write mechanics)."],"score":3,"reasoning":"The write side is consistent: /review and /ship both delegate to greptile-triage.md, which defines REMOTE_SLUG identically in both places and writes to both the per-project and global paths. The read side deviates: /retro is supposed to aggregate from the global file alone, but it also reads every per-project file and concatenates, which both contradicts the stated architecture and double-counts entries. The retro file is also internally inconsistent about whether it reads one path or many. These are real architectural mismatches rather than cosmetic differences, but they don't make the system non-functional."},"latency_ms":13048,"stop_reason":"end_turn","usage":{"input_tokens":4010,"output_tokens":903},"cost_usd":0.08525}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references greptile-triage.md via a relative path `.claude/skills/review/greptile-triage.md` (no `gstack/` segment) while ship/SKILL.md uses the absolute `~/.claude/skills/gstack/review/greptile-triage.md`; this is a reference-path inconsistency, not a data-architecture contradiction, but could resolve to different locations depending on cwd","REMOTE_SLUG derivation only appears in greptile-triage.md (duplicated twice, identically), so cross-file consistency is satisfied trivially; review and ship do not re-derive it, which is correct delegation"],"score":4,"reasoning":"All four files implement the intended architecture: greptile-triage.md defines both paths (per-project via $HOME/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global via ~/.gstack/greptile-history.md) with a consistent REMOTE_SLUG derivation; /review and /ship both explicitly say 'save to both per-project and global greptile-history' and delegate reply templates, fetch/classify, escalation detection and write mechanics to greptile-triage.md; /retro reads only the global ~/.gstack/greptile-history.md and explicitly says 'never a per-project copy'. Entry types (fix, fp, already-fixed) match between ship's writes and retro's counting. The only blemish is the differing path strings used to reference greptile-triage.md between review and ship."},"latency_ms":15208,"stop_reason":"end_turn","usage":{"input_tokens":4011,"output_tokens":1133},"cost_usd":0.09676}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG is derived three different ways: review/SKILL.md uses `basename \"$PWD\"` (current directory name, varies with cwd/subdirectory), ship/SKILL.md uses a sed over `git remote get-url origin` producing `owner__repo`, and greptile-triage.md uses the `browse/bin/remote-slug` script with a fallback to the basename of the git toplevel. These can yield different slugs for the same repo.","review/SKILL.md states 'Suppressions for this review come from ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md' using the `basename $PWD` slug, but suppressions are written by greptile-triage.md under its own (remote-slug-derived) slug — if they differ, /review will fail to find its own prior suppressions.","ship/SKILL.md's `mkdir -p \"$HOME/.gstack/projects/$REMOTE_SLUG\"` comment claims 'ship writes its per-project greptile-history.md here', but ship delegates the actual write to greptile-triage.md, which recomputes the slug independently; the directory ship creates may not be the one that gets written to.","review/SKILL.md's `basename \"$PWD\"` differs from greptile-triage.md's fallback `basename \"$(git rev-parse --show-toplevel)\"` even in the fallback case (breaks when invoked from a subdirectory)."],"score":3,"reasoning":"The core two-path architecture is implemented consistently: review and ship both save to per-project AND global history, both delegate write mechanics and reply templates to greptile-triage.md, greptile-triage.md defines both paths, and retro explicitly reads only the global aggregate. However, the REMOTE_SLUG derivation — which determines the per-project path — is inconsistent across review, ship, and triage, undermining the per-project suppression lookup that review depends on. The global path (used by retro) is unaffected by this divergence, so cross-project aggregation remains correct."},"latency_ms":17475,"stop_reason":"end_turn","usage":{"input_tokens":3884,"output_tokens":1502},"cost_usd":0.11394}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Do not load any shared triage document; /review owns its own Greptile handling', contradicting the intended architecture (delegate write mechanics to greptile-triage.md) and contradicting greptile-triage.md itself, which states 'Both /review (Step 2.5) and /ship (Step 10) reference this document.'","review/SKILL.md writes only to the global path (~/.gstack/greptile-history.md) and never to the per-project path (~/.gstack/projects/{slug}/greptile-history.md), so /review outcomes will not feed per-project suppressions; ship/SKILL.md correctly saves to both.","review/SKILL.md never derives REMOTE_SLUG at all (it has no per-project write), so the slug derivation cannot be consistent with greptile-triage.md for the /review path.","review/SKILL.md fetches only line-level PR review comments and omits the top-level issue comments endpoint, the position != null filter, and the gstack-issue-guard sanitization that greptile-triage.md mandates — a divergent fetch/filter pipeline.","review/SKILL.md says to 'Reply to each Greptile comment in your own words', bypassing the Fix / Already Fixed / False Positive reply templates and the GStack markers (**Fixed**, **Not a bug.**, **Already fixed**) that greptile-triage.md relies on for Tier 2 escalation detection — so /review replies will not be recognized as prior GStack replies by /ship.","review/SKILL.md does not record an entry type (fix/fp/already-fixed) when appending, while /retro counts entries by exactly those types; /review entries may be unparseable or skipped by /retro."],"score":2,"reasoning":"ship/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: ship delegates to greptile-triage.md and writes both paths, greptile-triage.md defines both paths with a consistent REMOTE_SLUG derivation (identical in both occurrences), and retro reads only the global aggregate. However, review/SKILL.md directly contradicts the architecture and the triage doc: it refuses to use the shared triage document, writes only to the global path, skips the per-project suppression write, uses an ad-hoc fetch and ad-hoc replies without GStack markers, and omits entry types. This is a substantive contradiction on one of the two writer paths, not a minor drift."},"latency_ms":16866,"stop_reason":"end_turn","usage":{"input_tokens":3277,"output_tokens":1290},"cost_usd":0.09727}
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files agree with the intended architecture. greptile-triage.md defines both paths (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) with an identical REMOTE_SLUG derivation in both places it appears. /review and /ship both delegate fetch/classify/reply mechanics to greptile-triage.md and both explicitly save to 'per-project and global' history; /ship's type labels (fix, fp, already-fixed) match exactly the types /retro parses. /retro reads only the global aggregate and explicitly states 'never a per-project copy', consistent with its cross-project role, and correctly does not derive REMOTE_SLUG since it never touches the per-project path. The only non-contradictory observations are that /review omits the explicit type annotations that /ship includes (acceptable since it delegates to triage) and that the REMOTE_SLUG line is duplicated in greptile-triage.md (a maintenance smell, not an inconsistency)."},"latency_ms":14198,"stop_reason":"end_turn","usage":{"input_tokens":2417,"output_tokens":1065},"cost_usd":0.07742}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["greptile-triage.md path reference differs: review/SKILL.md says `.claude/skills/review/greptile-triage.md` (project-relative, no `gstack/` segment) while ship/SKILL.md says `~/.claude/skills/gstack/review/greptile-triage.md` — same intent, but the paths don't resolve to the same location","review/SKILL.md's extracted lines only show an explicit 'Save to both per-project and global greptile-history' under the ALREADY FIXED branch; ship/SKILL.md explicitly saves (with type tags fix/fp/already-fixed) for all three outcomes — review does not tag entry types, which retro depends on for counting","ship/SKILL.md uses the entry type `already-fixed` and `fp`/`fix`, matching retro's expected types; review/SKILL.md never names the type values, so consistency there relies on greptile-triage.md's write mechanics (not shown in extract)"],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines REMOTE_SLUG identically in both places and lists both per-project and global paths; /review and /ship both write to both paths and delegate reply/write mechanics to greptile-triage.md; /retro reads only the global ~/.gstack/greptile-history.md and explicitly rejects per-project copies, counting types fix/fp/already-fixed that match ship's write types. No contradictions in data flow. Minor inconsistencies are the divergent file path used to reference greptile-triage.md and review's less explicit type tagging compared to ship."},"latency_ms":17936,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1310},"cost_usd":0.10249}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["Minor: review/SKILL.md excerpt says 'Save to both per-project and global greptile-history' without specifying entry types (fix/fp/already-fixed) that ship/sections/greptile.md and retro/SKILL.md rely on; this is acceptable only because both delegate write mechanics to greptile-triage.md, which should be the single source for the entry format.","Minor: ship/sections/greptile.md uses slightly varied phrasing ('save per-project/global' vs 'save to both per-project and global') — semantically identical, not a contradiction."],"score":5,"reasoning":"All files implement the intended architecture: greptile-triage.md defines REMOTE_SLUG identically in both occurrences and lists both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths; /review and /ship both reference greptile-triage.md for fetch/classify/reply mechanics and explicitly save to both per-project and global history; /retro reads only the global path and expects entry types (fix, fp, already-fixed) that match those written by /ship. No file reads/writes a path outside the intended design, and REMOTE_SLUG derivation is only present in the shared triage file, so there is no divergence."},"latency_ms":16527,"stop_reason":"end_turn","usage":{"input_tokens":3680,"output_tokens":1247},"cost_usd":0.09915}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads from the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) instead of the global path (~/.gstack/greptile-history.md) required by the intended architecture; it explicitly scopes to 'the current repo' rather than aggregating across projects, and gates the JSON 'greptile' field on the per-project file's existence.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses browse/bin/remote-slug with fallbacks (remote-slug -> ~/.claude/skills/gstack/browse/bin/remote-slug -> basename of git toplevel), while retro/SKILL.md uses only basename \"$(git rev-parse --show-toplevel)\" with no fallback. When the remote-slug tool succeeds, writes and reads may target different directories, so retro could silently miss history that review/ship wrote.","retro/SKILL.md never references the global ~/.gstack/greptile-history.md at all, so the global aggregate written by greptile-triage.md has no consumer in the extracted files, defeating its stated purpose ('global aggregate for retro aggregation')."],"score":2,"reasoning":"The write side is consistent: review/SKILL.md explicitly saves to both per-project and global history, ship/SKILL.md delegates to greptile-triage.md (via sections/greptile.md), and greptile-triage.md defines both paths and the shared REMOTE_SLUG logic with proper fallbacks. However, the read side contradicts the intended architecture: retro reads the per-project file rather than the global one, and derives REMOTE_SLUG differently (no remote-slug tool), creating a real risk of path mismatch and making the global aggregate orphaned. These are substantive architectural contradictions rather than cosmetic differences."},"latency_ms":13515,"stop_reason":"end_turn","usage":{"input_tokens":3227,"output_tokens":1081},"cost_usd":0.08632}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md defines both paths (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) and its § History File Writes explicitly appends to both. review/SKILL.md and ship/SKILL.md both delegate recording to greptile-triage.md § History File Writes and both state it appends to per-project and global. retro/SKILL.md reads only the global path and explicitly says 'never a per-project copy', matching the aggregation intent. REMOTE_SLUG derivation appears twice in greptile-triage.md with identical fallback chains (remote-slug → installed remote-slug → basename of git toplevel/pwd). The only indirection is ship/SKILL.md routing Step 10 through sections/greptile.md while greptile-triage.md says /ship references it directly, but ship/SKILL.md's explicit statement that outcomes are recorded via greptile-triage.md § History File Writes resolves this without contradiction."},"latency_ms":10962,"stop_reason":"end_turn","usage":{"input_tokens":2725,"output_tokens":898},"cost_usd":0.07215}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md says it 'may also read ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md for the current repo' — an optional per-project read that deviates slightly from the stated 'retro READS from the GLOBAL path only' design (additive, not contradictory).","retro/SKILL.md relies on a GREPTILE_HISTORY preflight line to supply the path; the extracted lines never explicitly state that this resolves to the global ~/.gstack/greptile-history.md, so the global-only intent is implied rather than verifiable from these snippets.","retro/SKILL.md references $REMOTE_SLUG but no derivation is shown in its extracted lines, so consistency with greptile-triage.md's remote-slug fallback chain cannot be confirmed (greptile-triage.md itself derives it identically in both places it appears).","review/SKILL.md's 'Save to both per-project and global greptile-history' instruction omits the entry type tag (fix/fp/already-fixed) that ship/SKILL.md specifies and that retro depends on for counting; this is presumably handled by greptile-triage.md's write mechanics, but is less explicit than ship's wording."],"score":4,"reasoning":"All files agree on the two-path model: greptile-triage.md defines both per-project and global paths with a consistent REMOTE_SLUG derivation, /review and /ship both save to both paths and both delegate fetch/classify/reply/write mechanics to greptile-triage.md, and /retro consumes the aggregate history by type. The only gaps are a minor optional per-project read in retro that softens the 'global only' rule, some implicit (unshown) path/slug resolution in retro, and slightly less explicit type-tagging language in /review versus /ship. No contradictions."},"latency_ms":16403,"stop_reason":"end_turn","usage":{"input_tokens":3713,"output_tokens":1346},"cost_usd":0.10443}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files implement the intended architecture coherently. review/SKILL.md and ship/SKILL.md both delegate write mechanics to greptile-triage.md § History File Writes and both explicitly state writes go to both the per-project and global greptile-history files. greptile-triage.md defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md), uses an identical REMOTE_SLUG derivation in both places it appears, and instructs appending to both files with the correct rationale (per-project for suppressions, global for retro). retro/SKILL.md reads only the global path and explicitly says never a per-project copy, matching the cross-project aggregation intent. The only minor indirection is that ship/SKILL.md routes Step 10 through sections/greptile.md before greptile-triage.md, but this does not contradict anything and the write path is explicitly stated to match /review."},"latency_ms":11334,"stop_reason":"end_turn","usage":{"input_tokens":3037,"output_tokens":851},"cost_usd":0.07292}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files agree with the intended architecture. greptile-triage.md is the single source of truth for the two paths (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) and for REMOTE_SLUG derivation, which appears twice in that file with identical fallback chains. Both /review (Step 2.5) and /ship (Step 10) reference greptile-triage.md for fetch/classify/templates and instruct saving to 'both per-project and global greptile-history' without re-specifying write mechanics, i.e. they delegate correctly. /ship additionally labels entry types (fix, fp, already-fixed), which exactly match the types /retro counts. /retro explicitly reads only the global aggregate and warns against using a per-project copy. The only nit is that /review's extracted save lines don't show explicit type labels the way /ship's do, but since mechanics are delegated to the shared triage doc this is not a contradiction."},"latency_ms":16621,"stop_reason":"end_turn","usage":{"input_tokens":3705,"output_tokens":1132},"cost_usd":0.09365}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Do not load any shared triage document; /review owns its own Greptile handling', directly contradicting greptile-triage.md which states 'Both /review (Step 2.5) and /ship (Step 10) reference this document' and the intended architecture of delegating write mechanics to greptile-triage.md.","review/SKILL.md writes only to the global path ('Append the outcome to ~/.gstack/greptile-history.md') with no per-project write, violating the dual-write architecture that ship/SKILL.md and greptile-triage.md follow (per-project + global).","review/SKILL.md's fetch logic diverges from greptile-triage.md: it only fetches line-level PR comments (no top-level issue comments), applies no position!=null filter, and does not route bodies through gstack-issue-guard, so /review and /ship would classify different comment sets with different safety handling.","review/SKILL.md instructs 'Reply to each Greptile comment in your own words', whereas greptile-triage.md mandates specific reply templates with GStack markers (**Fixed**, **Not a bug.**, **Already fixed**) that the Tier 2 escalation detection depends on; /review replies would not be recognized as prior GStack replies.","review/SKILL.md never derives REMOTE_SLUG or the per-project path, so suppressions from /review are never recorded per-project (consequence of the missing dual write)."],"score":2,"reasoning":"ship/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: ship delegates to the shared triage doc and writes to both paths, triage defines REMOTE_SLUG identically in both places and documents both paths, and retro reads only the global aggregate. However, review/SKILL.md contradicts the architecture on multiple core points — it refuses to use the shared triage document that claims /review references it, writes only to the global file (breaking per-project suppressions), uses a narrower fetch, and uses free-form replies that break escalation detection. These are direct contradictions rather than minor drift."},"latency_ms":16509,"stop_reason":"end_turn","usage":{"input_tokens":3277,"output_tokens":1222},"cost_usd":0.09387}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["greptile-triage.md states that /ship references it at 'Step 3.75', but ship/SKILL.md places Greptile handling at Step 10 (via sections/greptile.md) — stale step-number cross-reference","ship/SKILL.md delegates to `sections/greptile.md` (not shown) rather than directly to greptile-triage.md for write mechanics; the extracted lines only confirm it uses greptile-triage.md reply templates, so the dual-path write for /ship can't be verified from these excerpts","Skill path conventions differ: review/SKILL.md references `.claude/skills/review/greptile-triage.md` (relative, no gstack prefix) while ship/SKILL.md references `~/.claude/skills/gstack/ship/sections/greptile.md` (absolute, with gstack prefix) — minor location inconsistency, not a data-architecture conflict"],"score":4,"reasoning":"The core data architecture is consistent: greptile-triage.md defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md); REMOTE_SLUG derivation is identical in both occurrences; review/SKILL.md explicitly saves to both paths for FP and already-fixed cases and delegates mechanics to greptile-triage.md; retro/SKILL.md reads only the global path, matching the aggregation intent. The only defects are a stale step-number reference (3.75 vs 10), an extra indirection layer in /ship whose write behavior isn't visible here, and differing path conventions — none contradict the intended data flow."},"latency_ms":15215,"stop_reason":"end_turn","usage":{"input_tokens":2829,"output_tokens":1201},"cost_usd":0.08834}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["Step reference mismatch: greptile-triage.md says /ship references it at 'Step 3.75', but ship/SKILL.md places Greptile handling at 'Step 10'.","Skill path base inconsistency: review/SKILL.md references '.claude/skills/review/greptile-triage.md' (relative, no 'gstack' segment) while ship/SKILL.md references '~/.claude/skills/gstack/ship/sections/greptile.md' (absolute, with 'gstack' segment); the REMOTE_SLUG fallback also uses '~/.claude/skills/gstack/...'.","ship/SKILL.md does not itself state that it writes to both per-project and global history; it delegates entirely to sections/greptile.md (not shown), so the dual-write for /ship cannot be verified from the extracted lines.","retro/SKILL.md expects entry types 'fix', 'fp', 'already-fixed' in the global history; the write format in greptile-triage.md is not visible in the extract, so field-name alignment cannot be confirmed."],"score":4,"reasoning":"Core data architecture is implemented consistently: greptile-triage.md defines both paths (per-project via REMOTE_SLUG and global aggregate) with identical REMOTE_SLUG derivation in both occurrences; review/SKILL.md explicitly saves to both paths and delegates mechanics to greptile-triage.md; retro/SKILL.md reads only the global ~/.gstack/greptile-history.md. The flaws are peripheral documentation drift (step numbering 3.75 vs 10, differing skill-directory path bases) rather than contradictions in where data is written or read."},"latency_ms":15867,"stop_reason":"end_turn","usage":{"input_tokens":2829,"output_tokens":1200},"cost_usd":0.08829}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly writes ONLY to the per-project greptile-history ('save per-project greptile-history only', 'ship never writes the global file') for all three outcome types (fix, fp, already-fixed), contradicting the intended architecture where /ship writes to BOTH per-project and global paths.","Because /retro reads exclusively from the global ~/.gstack/greptile-history.md, every Greptile outcome recorded by /ship is invisible to retro aggregation — the signal-ratio metric (fix + already-fixed)/(... + fp) will undercount and be biased toward /review-originated entries.","greptile-triage.md (the shared delegate) documents both paths as write targets, so ship/SKILL.md's 'per-project only' instruction contradicts the very reference document it delegates write mechanics to; a reader following greptile-triage.md literally would write global, while ship/SKILL.md says never to."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md all align with the intended two-path design (write both, retro reads global; REMOTE_SLUG derivation is identical in both occurrences within greptile-triage.md). However, ship/SKILL.md directly and repeatedly contradicts the architecture by forbidding global writes, which breaks the retro aggregation pipeline for ship-sourced data and conflicts with the shared triage document it references. This is a substantive, explicit contradiction rather than an ambiguity."},"latency_ms":14402,"stop_reason":"end_turn","usage":{"input_tokens":3710,"output_tokens":1025},"cost_usd":0.08835}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs across all three files that define it: review/SKILL.md uses `basename \"$PWD\"`, ship/SKILL.md parses the git remote URL into `owner__repo`, and greptile-triage.md uses `browse/bin/remote-slug` with a fallback to the basename of the git toplevel. These produce different slugs (e.g. `bar` vs `foo__bar`), so per-project history written by ship/triage may not be found by review's suppression lookup.","review/SKILL.md's `basename \"$PWD\"` is also fragile: if /review is invoked from a subdirectory the slug becomes the subdirectory name, pointing at a per-project path that nothing writes to.","ship/SKILL.md's `mkdir -p \"$HOME/.gstack/projects/$REMOTE_SLUG\"` with the comment 'ship writes its per-project greptile-history.md here' is misleading/inconsistent with the delegation model: the actual writes happen via greptile-triage.md using its own (different) slug derivation, so the directory ship creates may not be the one that gets written to.","Minor: output header wording differs slightly between ship ('already fixed') and review/triage ('fixed'), though semantically equivalent."],"score":3,"reasoning":"The core two-path architecture is implemented consistently: greptile-triage.md defines both the per-project and global paths and both /review and /ship instruct saving to both and delegate reply templates and write mechanics to greptile-triage.md; /retro correctly reads only the global aggregate and explicitly excludes per-project copies. However, the REMOTE_SLUG derivation — which determines the per-project path — is implemented three different ways across the three files that use it, directly violating the stated requirement for consistent derivation and risking a mismatch between where suppressions are written and where /review reads them. This is a functional inconsistency rather than a cosmetic one, so the set cannot be rated fully consistent."},"latency_ms":17646,"stop_reason":"end_turn","usage":{"input_tokens":4196,"output_tokens":1398},"cost_usd":0.11186}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs across all three files: review/SKILL.md uses `basename \"$PWD\"` (current directory name, breaks in subdirectories and ignores remote), ship/SKILL.md uses a git-remote sed pipeline producing `owner__repo`, and greptile-triage.md uses the `browse/bin/remote-slug` helper with a fallback to the repo toplevel basename. These can yield different slugs for the same repo, so /review's suppression lookup at `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` may point to a different directory than the one greptile-triage.md writes to, silently defeating suppressions.","ship/SKILL.md reimplements slug derivation inline rather than reusing the shared remote-slug helper that greptile-triage.md uses; even if outputs usually match, it is a duplicated algorithm that can drift (e.g., URL edge cases).","ship/SKILL.md's `mkdir -p` comment says 'ship writes its per-project greptile-history.md here', slightly blurring the stated delegation of write mechanics to greptile-triage.md, which computes its own path independently."],"score":3,"reasoning":"The two-path model is implemented consistently: greptile-triage.md defines both per-project and global paths, /review and /ship both save to both paths and delegate templates/mechanics to greptile-triage.md, and /retro explicitly reads only the global aggregate. The main architectural defect is REMOTE_SLUG: three different derivations across the three files, with /review's `basename \"$PWD\"` being clearly incompatible with the owner__repo format used by ship and the shared helper. Since the per-project path is keyed on this slug, the inconsistency can cause reads and writes to land in different directories."},"latency_ms":17178,"stop_reason":"end_turn","usage":{"input_tokens":4196,"output_tokens":1364},"cost_usd":0.11016}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["REMOTE_SLUG derivation differs: ship/SKILL.md uses `~/.claude/skills/gstack/browse/bin/remote-slug 2>/dev/null` with no fallback, while greptile-triage.md uses a three-stage fallback chain (relative path → absolute path → basename of git toplevel/pwd). If remote-slug fails, ship produces an empty slug and `mkdir -p $HOME/.gstack/projects/` (wrong per-project path), whereas triage would fall back to the repo basename — a genuine divergence in which per-project file gets written.","ship/SKILL.md partially re-implements write mechanics (its own REMOTE_SLUG + mkdir for per-project history) rather than fully delegating to greptile-triage.md, creating a second place the per-project path logic can drift.","Minor: review/SKILL.md extracts say 'Save to both per-project and global greptile-history' without stating the entry `type` (fix/fp/already-fixed) that ship/SKILL.md and retro rely on; it relies on greptile-triage.md to supply this, which is acceptable but less explicit than ship."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both paths (per-project and global), /review and /ship both save to both paths and reference triage templates, and /retro reads only the global ~/.gstack/greptile-history.md and explicitly rejects per-project copies. Entry types (fix/fp/already-fixed) match between ship writes and retro reads. The main inconsistency is the REMOTE_SLUG derivation in ship/SKILL.md lacking the fallback chain present in greptile-triage.md, which could cause the per-project write to land in a different directory under failure conditions. This is a real but non-contradictory drift, so the files are consistent overall with one notable gap."},"latency_ms":18938,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1445},"cost_usd":0.11023}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md says the retro 'may also read ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md for the current repo' as an optional per-repo breakdown, which is a soft deviation from the stated intent that /retro reads the GLOBAL path only (the primary aggregation still uses the GREPTILE_HISTORY path, so this is additive rather than contradictory).","retro/SKILL.md references $REMOTE_SLUG but the extracted lines show no derivation of it in that file; greptile-triage.md's derivation (remote-slug → basename of repo root) is not visibly reused there, so consistency of slug derivation across files cannot be confirmed from the excerpt.","The concrete value of GREPTILE_HISTORY (the path the preamble prints) is not shown in the retro excerpt, so it is only implied — not demonstrated — that it resolves to ~/.gstack/greptile-history.md (global).","review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying entry types, while ship/SKILL.md and retro/SKILL.md rely on types fix/fp/already-fixed; the shared entry format is presumably in greptile-triage.md but not visible in the extract."],"score":4,"reasoning":"The core architecture holds across files: greptile-triage.md is the single place defining REMOTE_SLUG (identically in both occurrences) and both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths; /review Step 2.5 and /ship Step 10 both delegate fetch/classify/reply mechanics to greptile-triage.md and both explicitly save to per-project and global history; /retro aggregates from the GREPTILE_HISTORY (global) path and counts the same fix/fp/already-fixed types that /ship writes. No contradictions exist — the only gaps are an optional per-project read in /retro and unverifiable slug derivation/path resolution in the retro excerpt."},"latency_ms":18514,"stop_reason":"end_turn","usage":{"input_tokens":3713,"output_tokens":1495},"cost_usd":0.11188}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md says 'Save to both per-project and global greptile-history' without the explicit `(type: fix|fp|already-fixed)` annotations that ship/SKILL.md includes; since retro/SKILL.md counts entries by type, review's write instruction is less precise about the entry format (likely fine if the format is defined in greptile-triage.md, but that format isn't visible in the extract).","Neither review nor ship explicitly says 'per greptile-triage.md' on the history-save lines; delegation of write mechanics is implicit (the paths/REMOTE_SLUG are only defined in greptile-triage.md), not stated.","ship/SKILL.md uses mixed phrasing — 'save per-project/global greptile-history' in one place and 'save to both per-project and global' elsewhere — cosmetic only."],"score":4,"reasoning":"All files agree with the intended architecture: greptile-triage.md defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md) with an identical REMOTE_SLUG derivation in both places it appears; /review (Step 2.5) and /ship (Step 10) both reference greptile-triage.md for fetch/classify/templates and both instruct saving to per-project AND global; /retro reads only the global aggregate and explicitly says 'never a per-project copy'. Step numbering (2.5 / 10) matches between triage and the callers. The only gaps are minor precision/wording differences in how review and ship describe the write step, not contradictions."},"latency_ms":19225,"stop_reason":"end_turn","usage":{"input_tokens":3705,"output_tokens":1442},"cost_usd":0.10915}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md is the single source for write mechanics and defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md per-project, ~/.gstack/greptile-history.md global) with mkdir for the project dir. /review ('Save to both per-project and global greptile-history') and /ship (fix/fp/already-fixed each 'save to both per-project and global') both write to both paths and delegate to greptile-triage.md for templates and mechanics rather than redefining them. /retro explicitly reads only the global path ('never a per-project copy') and counts the same three types (fix, fp, already-fixed) that /ship records. REMOTE_SLUG is derived only in greptile-triage.md, and both occurrences there use the identical fallback chain, so there's no divergence. The only nit is cosmetic: /review references greptile-triage.md with a relative path (.claude/skills/review/...) while /ship and triage use the absolute ~/.claude/skills/gstack/... form — not a data-architecture inconsistency."},"latency_ms":16647,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1159},"cost_usd":0.09494}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files agree on the two-path architecture. greptile-triage.md defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) and its § History File Writes appends to both, with REMOTE_SLUG derived identically in both occurrences. review/SKILL.md and ship/SKILL.md both delegate recording to greptile-triage.md § History File Writes and explicitly state writes go to both per-project and global. retro/SKILL.md reads only the global ~/.gstack/greptile-history.md and explicitly excludes per-project copies, matching the cross-project aggregation intent. The only minor indirection is that ship/SKILL.md routes Step 10 through sections/greptile.md rather than citing greptile-triage.md directly for triage mechanics, but it still names greptile-triage.md for the history writes, so no contradiction exists."},"latency_ms":11844,"stop_reason":"end_turn","usage":{"input_tokens":2725,"output_tokens":925},"cost_usd":0.0735}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["/retro reads the PER-PROJECT path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and explicitly says 'for the current repo' / 'per-project', but the intended architecture says /retro reads the GLOBAL path (~/.gstack/greptile-history.md) to aggregate across all projects. The global path is never referenced in retro/SKILL.md.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses `browse/bin/remote-slug || ~/.claude/skills/gstack/browse/bin/remote-slug || basename(git toplevel)`, while retro/SKILL.md uses only `basename \"$(git rev-parse --show-toplevel)\"`. When remote-slug succeeds, the writer and reader compute different slugs and retro will read a path that was never written to.","Minor: skill file path references differ in style — review/SKILL.md uses relative `.claude/skills/review/greptile-triage.md` while ship/SKILL.md uses absolute `~/.claude/skills/gstack/ship/sections/greptile.md`; ship also references greptile-triage.md by bare name without a path.","Minor: ship/SKILL.md delegates to sections/greptile.md for write mechanics rather than directly to greptile-triage.md; this is acceptable only if sections/greptile.md in turn delegates to greptile-triage.md, which cannot be verified from the excerpt."],"score":2,"reasoning":"The write side is consistent: /review explicitly saves to both per-project and global history, and greptile-triage.md defines both paths with a shared REMOTE_SLUG derivation. However, the read side contradicts the intended architecture — /retro reads the per-project file instead of the global aggregate, and it derives REMOTE_SLUG with a different (fallback-only) method than the writer, so even its per-project read may target the wrong directory. These two issues break the intended data flow between writers and the retro reader."},"latency_ms":17394,"stop_reason":"end_turn","usage":{"input_tokens":2915,"output_tokens":1082},"cost_usd":0.08325}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads the PER-PROJECT path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) in Step 1 command 8, the Greptile signal computation, and the JSON 'greptile' field note — but the intended architecture says /retro reads from the GLOBAL path (~/.gstack/greptile-history.md) only, to aggregate across all projects.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses `browse/bin/remote-slug || ~/.claude/skills/gstack/browse/bin/remote-slug || basename(git toplevel)` while retro/SKILL.md uses only `basename \"$(git rev-parse --show-toplevel)\")`. If remote-slug produces a different slug (e.g., owner-repo form), retro will look at a directory that was never written to, silently yielding no Greptile data.","retro's git rev-parse has no `2>/dev/null` fallback, unlike the triage version, so behavior outside a git repo differs.","ship/SKILL.md delegates to `ship/sections/greptile.md` (not shown) rather than directly to greptile-triage.md for mechanics; it only references greptile-triage.md for reply templates. Dual-path write behavior for /ship cannot be verified from the extracted lines, though it is plausibly delegated.","Minor: review/SKILL.md references greptile-triage.md via a relative path (`.claude/skills/review/greptile-triage.md`) while ship uses an absolute `~/.claude/skills/gstack/...` path; different resolution bases."],"score":2,"reasoning":"The write side (/review via greptile-triage.md) correctly implements dual-path writes with the per-project/global split, and the global path is clearly documented in greptile-triage.md. However, /retro directly contradicts the intended architecture by reading only the per-project file instead of the global aggregate, and its REMOTE_SLUG derivation differs from the writer's, meaning the read path may not even match the written per-project path. These two issues break the core read/write contract for retro aggregation."},"latency_ms":15545,"stop_reason":"end_turn","usage":{"input_tokens":2915,"output_tokens":1147},"cost_usd":0.0865}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files implement the intended architecture coherently. greptile-triage.md is the single source for the two paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md per-project and ~/.gstack/greptile-history.md global) and for REMOTE_SLUG derivation, which appears twice with identical fallback chain. Both /review (Step 2.5) and /ship (Step 10, via sections/greptile.md) delegate fetch/classify/escalation and reply templates to greptile-triage.md and explicitly save to both per-project and global history; triage.md correctly cross-references both callers by step number. /retro reads only the global path and counts types fix/fp/already-fixed, which exactly match the type labels used in ship/sections/greptile.md. The only trivial gap is that the extracted review/SKILL.md lines do not spell out the type labels on save (ship does), but this is an omission in the excerpt, not a contradiction, since the write mechanics are delegated to greptile-triage.md."},"latency_ms":15602,"stop_reason":"end_turn","usage":{"input_tokens":3992,"output_tokens":1077},"cost_usd":0.09377}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `sections/greptile.md` rather than directly to `greptile-triage.md`; greptile-triage.md claims /ship Step 10 references it, but the ship excerpt shows only an indirect path, and the dual-path write for /ship cannot be verified from the extracted lines","retro/SKILL.md reads 'the path GREPTILE_HISTORY printed' without explicitly stating it is the global `~/.gstack/greptile-history.md`; the preamble that derives this path is not shown, so global-only reading is implied but not confirmed","retro counts entry types `fix`, `fp`, `already-fixed` but the history line format written by greptile-triage.md is not shown in the excerpt, so the mapping from classifications (VALID & ACTIONABLE / ALREADY FIXED / FALSE POSITIVE / SUPPRESSED) to these types cannot be verified"],"score":4,"reasoning":"No contradictions found. greptile-triage.md defines both per-project and global paths with identical REMOTE_SLUG derivations in both occurrences; review/SKILL.md delegates to greptile-triage.md and explicitly saves to both per-project and global history; retro reads a single greptile-history.md path for aggregation consistent with global-only reads. The remaining concerns are gaps in verifiability (ship's indirect delegation via sections/greptile.md, retro's path source not shown, history entry format not shown) rather than inconsistencies, so the files appear to implement the intended architecture consistently."},"latency_ms":15096,"stop_reason":"end_turn","usage":{"input_tokens":3284,"output_tokens":1148},"cost_usd":0.09024}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md contradicts the intended architecture: all three save instructions (fix, fp, already-fixed) say 'save to the per-project greptile-history only', and one explicitly states 'ship never writes the global file'. The intended design is that /ship writes to BOTH paths.","ship/SKILL.md contradicts review/greptile-triage.md, the shared reference it delegates to, which specifies writing to both `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` (per-project) and `~/.gstack/greptile-history.md` (global aggregate).","Downstream data gap: because /retro reads ONLY the global `~/.gstack/greptile-history.md`, none of the Greptile outcomes recorded by /ship will ever appear in the retro 'Greptile signal' metric, so the aggregate is systematically incomplete.","review/SKILL.md and ship/SKILL.md are mutually inconsistent in their write behavior: review says 'Save to both per-project and global', ship says per-project only, despite both routing through the same triage document."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent and match the intended architecture (dual-path write, global-only read, identical REMOTE_SLUG derivation in both triage snippets). However, ship/SKILL.md explicitly and repeatedly asserts a per-project-only write policy ('ship never writes the global file'), which directly contradicts the stated architecture, the shared triage reference it delegates to, and review's behavior, and causes /ship data to be invisible to /retro's global aggregation."},"latency_ms":16546,"stop_reason":"end_turn","usage":{"input_tokens":3710,"output_tokens":1251},"cost_usd":0.09965}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md: one False Positive branch says only 'save to greptile-history (type: fp)' without specifying both paths, while the other FP branch and the fix/already-fixed branches explicitly say 'both per-project and global' — ambiguous shorthand, not a contradiction, since write mechanics are delegated to greptile-triage.md which writes both"],"score":4,"reasoning":"All files align with the intended architecture: greptile-triage.md defines the two paths (per-project via $HOME/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) and uses an identical REMOTE_SLUG derivation in both places it appears; /review and /ship both delegate to greptile-triage.md and instruct saving to both paths; /retro explicitly reads only the global aggregate and never a per-project copy. The only blemish is a single abbreviated phrasing in ship's FP branch that omits 'both paths', which is a minor wording inconsistency rather than an architectural conflict."},"latency_ms":12579,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":930},"cost_usd":0.08349}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["REMOTE_SLUG derivation differs: ship/SKILL.md uses `REMOTE_SLUG=$(~/.claude/skills/gstack/browse/bin/remote-slug 2>/dev/null)` with no fallback, while greptile-triage.md uses a three-stage fallback chain (`browse/bin/remote-slug || ~/.claude/skills/gstack/browse/bin/remote-slug || basename $(git rev-parse --show-toplevel)`). If remote-slug fails, ship yields an empty slug and would write to `~/.gstack/projects//greptile-history.md` (collapsing to `~/.gstack/projects/greptile-history.md`), whereas triage would fall back to a repo-basename directory — producing different per-project paths for the same repo.","ship/SKILL.md partially duplicates write mechanics (REMOTE_SLUG derivation and `mkdir -p` for the per-project directory) instead of fully delegating to greptile-triage.md, creating two sources of truth that have already drifted.","review/SKILL.md's 'Save to both per-project and global greptile-history' omits the `type:` annotation that ship/SKILL.md specifies (fix/fp/already-fixed); not contradictory, but relies on greptile-triage.md to define the entry format that /retro parses by type."],"score":4,"reasoning":"The core data architecture is implemented consistently: greptile-triage.md defines both the per-project and global paths; /review and /ship both save to both paths and reference greptile-triage.md for reply templates and classification; /retro explicitly reads only the global `~/.gstack/greptile-history.md` and never a per-project copy, and consumes the fix/fp/already-fixed types that /ship records. The main defect is the REMOTE_SLUG derivation divergence between ship/SKILL.md and greptile-triage.md, which violates the stated requirement for consistent derivation and could produce a different per-project path in failure cases. The ship file also partially re-implements write setup rather than fully delegating."},"latency_ms":20859,"stop_reason":"end_turn","usage":{"input_tokens":4110,"output_tokens":1660},"cost_usd":0.1241}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files implement the intended architecture coherently. greptile-triage.md is the single source of truth: it defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md per-project and ~/.gstack/greptile-history.md global), and its REMOTE_SLUG derivation is byte-identical in both places it appears (no other file re-derives it, so no drift). /review (Step 2.5) and /ship (Step 10, via the auto-generated sections/greptile.md) both explicitly delegate fetch/filter/classify/escalation and reply templates to greptile-triage.md, and both state 'save to both per-project and global greptile-history' for their write actions. /ship's entry types (fix, fp, already-fixed) exactly match the types /retro counts. /retro reads only the global aggregate and explicitly says 'never a per-project copy', matching the cross-project aggregation intent. Summary header format ('+ N Greptile comments (X valid, Y fixed, Z FP)') is consistent across review, ship, and triage. The only cosmetic difference is that the /review excerpt doesn't annotate '(type: ...)' as /ship does, but this is a presentation detail, not a contradiction, since write mechanics are delegated to greptile-triage.md."},"latency_ms":16450,"stop_reason":"end_turn","usage":{"input_tokens":4017,"output_tokens":1222},"cost_usd":0.10127}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Do not load any shared triage document; /review owns its own Greptile handling', directly contradicting the intended architecture (delegate to greptile-triage.md) and greptile-triage.md itself, which states 'Both /review (Step 2.5) and /ship (Step 10) reference this document.'","review/SKILL.md writes only to the global path (~/.gstack/greptile-history.md) and never to the per-project path (~/.gstack/projects/{slug}/greptile-history.md), so /review suppressions are never recorded per-project as the architecture requires; ship/SKILL.md and greptile-triage.md correctly write to both.","review/SKILL.md instructs 'Reply to each Greptile comment in your own words', contradicting greptile-triage.md's 'Use these templates for every Greptile reply' (Fix / False Positive / Already Fixed templates) that /ship uses.","review/SKILL.md uses a simplified fetch (single line-level endpoint, no position != null filter, no top-level issue-comments endpoint, no gstack-issue-guard sanitization), diverging from the fetch/filter mechanics defined in greptile-triage.md, so /review and /ship will see different comment sets and /review bypasses the prompt-injection guard.","review/SKILL.md does not derive REMOTE_SLUG at all (because it skips the per-project write), so the slug-derivation consistency the architecture expects is not achieved for /review."],"score":2,"reasoning":"ship/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: ship delegates to greptile-triage.md and writes to both per-project and global history; greptile-triage.md defines both paths with an identical REMOTE_SLUG derivation in both places; retro reads only the global aggregate. However, review/SKILL.md contradicts the architecture on nearly every point — it refuses to use the shared triage doc, writes only to the global path (missing per-project suppressions), uses free-form replies instead of the shared templates, and uses a divergent fetch pipeline. Since /review is one of the two writers, this is a substantive architectural contradiction rather than a minor drift."},"latency_ms":15844,"stop_reason":"end_turn","usage":{"input_tokens":3589,"output_tokens":1220},"cost_usd":0.09689}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md has one line ('If user chooses C: ... save to greptile-history (type: fp)') that omits 'both per-project and global', unlike its other save instructions and review/SKILL.md — ambiguous but not contradictory","greptile-triage.md defines a PROJECT_HISTORY variable but no corresponding GLOBAL_HISTORY variable in the extracted lines; the global path is only listed as a bullet, so write mechanics for the global path are slightly less explicit than for per-project","review/SKILL.md's save instruction ('Save to both per-project and global greptile-history') does not tag the entry type (fix/fp/already-fixed) in the extracted lines, whereas ship/SKILL.md does and retro depends on those type tags for counting"],"score":4,"reasoning":"All four files agree on the core architecture: greptile-triage.md is the single owner of fetch/classify/write mechanics and defines both paths with an identical REMOTE_SLUG derivation (repeated verbatim twice); /review and /ship both delegate to it and instruct saving to both per-project and global history; /retro reads only the global ~/.gstack/greptile-history.md and explicitly rejects per-project copies. The only gaps are wording-level: one ship save line drops 'both', and type tagging is not uniformly explicit across review vs ship, which could matter since retro counts by type. No actual contradictions."},"latency_ms":15725,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1117},"cost_usd":0.09284}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["Cosmetic: /ship header template says '{already_fixed} already fixed' while /review and greptile-triage.md say 'Y fixed' — same data, slightly different wording.","Minor: REMOTE_SLUG derivation is duplicated verbatim twice inside greptile-triage.md rather than defined once; identical, so no drift today, but a maintenance risk.","Minor: review/SKILL.md extracted lines say 'Save to both per-project and global greptile-history' without the explicit type tags (fix/fp/already-fixed) that ship/sections/greptile.md includes and that /retro parses; this is acceptable only because review delegates write mechanics to greptile-triage.md."],"score":5,"reasoning":"All files implement the intended architecture: greptile-triage.md is the single source defining both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) and the REMOTE_SLUG derivation (identical in both occurrences); /review (Step 2.5) and /ship (Step 10 via sections/greptile.md) both delegate fetch/classify/reply mechanics to greptile-triage.md and both save to per-project AND global history; /retro reads only the global ~/.gstack/greptile-history.md and counts the fix/fp/already-fixed types that /ship writes. No path, direction, or responsibility contradictions; only trivial wording differences."},"latency_ms":17673,"stop_reason":"end_turn","usage":{"input_tokens":3992,"output_tokens":1224},"cost_usd":0.10112}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["Minor: the entry format written by greptile-triage.md is not shown in the excerpt, so the `type` field values (`fix`, `fp`, `already-fixed`) that /retro counts cannot be verified against the writer's schema — though /ship's '(type: already-fixed)' annotation suggests alignment","Minor: /ship routes through an extra indirection (ship/sections/greptile.md → review/greptile-triage.md) rather than referencing greptile-triage.md directly; not a contradiction, just one more hop to keep in sync"],"score":5,"reasoning":"All files implement the intended architecture coherently. greptile-triage.md is the single source of truth for both paths (per-project and global) and for REMOTE_SLUG derivation; /review and /ship both delegate to it and both explicitly say 'Save to both per-project and global greptile-history', matching the dual-write design. /retro reads only the global path (~/.gstack/greptile-history.md), consistent with its cross-project aggregation role. REMOTE_SLUG is derived in exactly one place (greptile-triage.md), so there is no divergence risk across files. No contradictory paths, roles, or read/write directions were found."},"latency_ms":12602,"stop_reason":"end_turn","usage":{"input_tokens":1096,"output_tokens":1065},"cost_usd":0.06421}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads from the PER-PROJECT path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) in both the Step 1 command 8 fetch and the metric computation, but the intended architecture says /retro reads from the GLOBAL path (~/.gstack/greptile-history.md) only. As written, the global aggregate file is written by /review and /ship but never read by anything.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses `browse/bin/remote-slug || ~/.claude/skills/gstack/browse/bin/remote-slug || basename $(git rev-parse --show-toplevel)`, while retro/SKILL.md uses only `basename $(git rev-parse --show-toplevel)`. If remote-slug yields a different value (e.g., owner-repo form), retro will look in a different directory than the one /review and /ship wrote to and silently find no history.","retro's note explicitly scopes the greptile field to 'the per-project' file and 'the current repo', which is a conceptual contradiction with the stated purpose of /retro aggregating across all projects via the global path.","ship/SKILL.md delegates Step 10 to `~/.claude/skills/gstack/ship/sections/greptile.md` (not shown) rather than greptile-triage.md directly; it never states that it writes to both per-project and global paths, so the dual-write contract for /ship cannot be verified from the provided text and depends on an unseen file.","Minor: review/SKILL.md references greptile-triage.md via relative path `.claude/skills/review/greptile-triage.md` while ship uses absolute `~/.claude/skills/gstack/ship/sections/greptile.md`, and greptile-triage.md's fallback uses `~/.claude/skills/gstack/browse/...` — base path conventions differ across files."],"score":2,"reasoning":"The write side is largely consistent: greptile-triage.md defines both paths, and /review explicitly saves to both per-project and global via the shared doc. However, the read side breaks the architecture: /retro reads only the per-project file instead of the global file, and derives REMOTE_SLUG differently from the writer, so it may not even find the per-project file. The result is that the global aggregate is write-only and the retro metric is both mis-scoped and fragile."},"latency_ms":20159,"stop_reason":"end_turn","usage":{"input_tokens":2915,"output_tokens":1522},"cost_usd":0.10525}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md is the single source of truth for write mechanics: it defines REMOTE_SLUG identically in both occurrences, derives PROJECT_HISTORY from it, and lists both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths. /review and /ship both delegate to greptile-triage.md and both instruct saving to 'both per-project and global greptile-history' (ship additionally labels entry types fix/fp/already-fixed, matching the types /retro counts). /retro reads only the global path and explicitly states 'never a per-project copy', consistent with its cross-project aggregation role. No contradictory paths, no stray REMOTE_SLUG variants, and no file writes/reads against the wrong tier. Only cosmetic nits: /review's extracted lines omit explicit type labels (presumably covered in the triage doc), and /ship adds an extra indirection via sections/greptile.md, neither of which creates inconsistency."},"latency_ms":14465,"stop_reason":"end_turn","usage":{"input_tokens":4017,"output_tokens":1202},"cost_usd":0.10027}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["Step number mismatch: greptile-triage.md says /ship references it at 'Step 3.75', but ship/SKILL.md places Greptile handling at 'Step 10'.","ship/SKILL.md delegates to an intermediate file (sections/greptile.md) rather than directly to greptile-triage.md for write mechanics; the dual-path write for /ship is not visible in the provided excerpt and can only be assumed via that indirection.","Inconsistent skill path roots: review uses relative '.claude/skills/review/greptile-triage.md' while ship uses absolute '~/.claude/skills/gstack/ship/sections/greptile.md' (different directory hierarchy: 'skills/review' vs 'skills/gstack/...').","Entry format (type tags fix/fp/already-fixed, date field) that /retro parses is not shown in greptile-triage.md excerpt, so schema alignment cannot be fully confirmed."],"score":4,"reasoning":"The core data architecture is implemented consistently: greptile-triage.md defines both per-project ($HOME/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths with an identical REMOTE_SLUG derivation in both occurrences; /review explicitly saves to both and delegates to greptile-triage.md; /ship delegates reply templates to greptile-triage.md; /retro reads only the global path as intended. The only defects are a stale step-number reference (3.75 vs 10), an extra indirection layer for /ship whose write behavior isn't shown, and minor path-root inconsistencies — none contradict the intended architecture."},"latency_ms":15081,"stop_reason":"end_turn","usage":{"input_tokens":2829,"output_tokens":1160},"cost_usd":0.08629}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md is the single source of truth for both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md per-project and ~/.gstack/greptile-history.md global) and for REMOTE_SLUG derivation, which appears twice with identical logic. /review and /ship both instruct saving to both per-project and global history and both delegate templates/mechanics to greptile-triage.md without defining their own paths. /retro explicitly reads only the global path and explicitly excludes per-project copies, and its type counts (fix, fp, already-fixed) match the types /ship records. Only cosmetic differences exist: /review's extracted save line omits the explicit '(type: ...)' annotation that /ship includes, and /ship uses 'per-project/global' phrasing once versus 'both per-project and global' elsewhere — neither is contradictory."},"latency_ms":15457,"stop_reason":"end_turn","usage":{"input_tokens":3705,"output_tokens":1112},"cost_usd":0.09265}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files implement the intended architecture. greptile-triage.md is the single source of truth defining both paths (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) plus the REMOTE_SLUG derivation and mkdir. review/SKILL.md (Step 2.5) and ship/SKILL.md (Step 10, via the intermediate ship/sections/greptile.md) both delegate to greptile-triage.md and both explicitly say 'save to both per-project and global greptile-history' — step numbers match what triage.md documents. retro/SKILL.md reads only the global path (~/.gstack/greptile-history.md) in both its fetch command and its analysis instructions, and the entry types it counts (fix, fp, already-fixed) match the type ship writes (already-fixed). REMOTE_SLUG is derived in exactly one place (triage.md) with a consistent fallback chain; retro correctly has no need for it since it aggregates globally. The extra indirection layer in /ship (sections/greptile.md) is a structural choice, not a contradiction."},"latency_ms":11875,"stop_reason":"end_turn","usage":{"input_tokens":1096,"output_tokens":950},"cost_usd":0.05846}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["greptile-triage.md states /ship references it at 'Step 3.75', but ship/SKILL.md places Greptile handling at 'Step 10' — stale step reference.","ship/SKILL.md delegates to 'sections/greptile.md' (not provided), so the dual-write (per-project + global) behavior for /ship cannot be verified directly; ship/SKILL.md itself only mentions reply templates from greptile-triage.md, not the history write paths.","Skill file path references are inconsistent: review/SKILL.md uses relative '.claude/skills/review/greptile-triage.md' (no 'gstack' segment) while ship/SKILL.md and greptile-triage.md use '~/.claude/skills/gstack/...'.","REMOTE_SLUG derivation appears only in greptile-triage.md (duplicated identically), so cross-file consistency is trivially satisfied but relies on all writers delegating to that file."],"score":4,"reasoning":"The core data architecture is implemented consistently: greptile-triage.md defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md); review/SKILL.md explicitly saves to both for fix/FP/already-fixed outcomes and delegates mechanics to greptile-triage.md; retro/SKILL.md reads only from the global path, matching the aggregation design. REMOTE_SLUG derivation is identical in both occurrences. The remaining issues are minor drift (stale step number, path prefix inconsistency) and an unverifiable delegation for /ship rather than contradictions in the data flow."},"latency_ms":14886,"stop_reason":"end_turn","usage":{"input_tokens":3141,"output_tokens":1163},"cost_usd":0.08956}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["REMOTE_SLUG derivation differs: ship/SKILL.md uses only `~/.claude/skills/gstack/browse/bin/remote-slug 2>/dev/null` with no fallback, while greptile-triage.md uses a three-stage fallback chain (relative path || absolute path || basename of git toplevel). If remote-slug fails, ship would produce an empty slug and write per-project history to `~/.gstack/projects//greptile-history.md`, diverging from the path triage would compute.","ship/SKILL.md partially duplicates write mechanics (REMOTE_SLUG + mkdir -p) inline rather than fully delegating to greptile-triage.md, creating a second place where the per-project path logic must be kept in sync."],"score":4,"reasoning":"All four files agree on the core architecture: /review and /ship both save to per-project and global greptile-history (types fix/fp/already-fixed), both reference greptile-triage.md for fetch/classify/reply templates, greptile-triage.md defines both paths with the per-project path under ~/.gstack/projects/$REMOTE_SLUG/, and /retro explicitly reads only the global ~/.gstack/greptile-history.md aggregate. The only drift is the REMOTE_SLUG derivation in ship/SKILL.md lacking the fallback chain present in greptile-triage.md, which is a minor robustness inconsistency rather than a contradiction."},"latency_ms":19077,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":961},"cost_usd":0.08603}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["Step number mismatch: greptile-triage.md says /ship references it at 'Step 3.75', but ship/SKILL.md places Greptile handling at 'Step 10'.","ship/SKILL.md delegates to an intermediate file `sections/greptile.md` rather than directly to greptile-triage.md; the dual-path write behavior for /ship cannot be verified from the extracted lines (only the reply-template reference to greptile-triage.md is visible), so the 'write to both paths' guarantee for /ship is implicit rather than explicit.","Skill path styles differ: review uses relative `.claude/skills/review/greptile-triage.md` while ship uses absolute `~/.claude/skills/gstack/ship/sections/greptile.md` (with a `gstack/` segment), suggesting possible path-resolution inconsistency.","retro expects entry types `fix`, `fp`, `already-fixed`; the exact write format emitted by greptile-triage.md is not shown in the excerpt, so the type-tag contract between writer and reader cannot be fully confirmed."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths and uses an identical REMOTE_SLUG derivation in both places; review/SKILL.md explicitly delegates fetch/classify/reply mechanics to greptile-triage.md and repeatedly says 'save to both per-project and global'; retro/SKILL.md reads only the global path and correctly treats it as an aggregate. No file contradicts the two-path model. The deductions are for the stale step-number reference (3.75 vs 10), the extra indirection layer in /ship whose contents aren't visible, and minor path-style divergence — these are drift/documentation issues rather than architectural contradictions."},"latency_ms":17299,"stop_reason":"end_turn","usage":{"input_tokens":3141,"output_tokens":1341},"cost_usd":0.09846}
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md does not specify the entry type (fix/fp/already-fixed) when saving to greptile-history, whereas ship/SKILL.md does; this is acceptable since write mechanics are delegated to greptile-triage.md, but the type vocabulary is only explicitly cross-referenced between ship and retro","greptile-triage.md defines REMOTE_SLUG twice with an identical expression — redundant but not contradictory; a drift risk if one copy is later edited"],"score":5,"reasoning":"All files agree on the two-path model: greptile-triage.md defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md) with a single, consistent REMOTE_SLUG derivation. Both /review (Step 2.5) and /ship (Step 10) explicitly reference greptile-triage.md for fetch/classify/reply templates and state they save to both per-project and global history, delegating mechanics rather than redefining paths. /retro reads only the global aggregate and explicitly forbids per-project copies, and its type counts (fix, fp, already-fixed) match the types ship records. No contradictions in paths, ownership, or read/write direction; only minor stylistic redundancy."},"latency_ms":17624,"stop_reason":"end_turn","usage":{"input_tokens":2417,"output_tokens":1343},"cost_usd":0.09132}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads BOTH the global `~/.gstack/greptile-history.md` AND every `~/.gstack/projects/*/greptile-history.md` and concatenates them, contradicting the intended architecture where /retro reads the GLOBAL path only.","Because /review and /ship (via greptile-triage.md) write every entry to BOTH the per-project and global files, retro's concatenation will double-count every entry, inflating fix/fp/already-fixed counts (signal ratio stays correct only by coincidence of proportional doubling, but 'Y catches, Z FPs' will be 2x).","retro/SKILL.md is internally inconsistent: the dual-read instruction says to read global + all per-project files, but the later note gates the `greptile` field on a single `greptile-history.md` at 'the path GREPTILE_HISTORY printed', implying one path.","review/SKILL.md says 'Save to both per-project and global greptile-history' but never specifies the entry `type` (fix/fp/already-fixed) that retro depends on for counting; ship/SKILL.md does specify types. This is mitigated only if greptile-triage.md's write mechanics enforce the type field (not shown in the excerpt)."],"score":3,"reasoning":"The write side is consistent: /review and /ship both delegate to greptile-triage.md, which defines a single REMOTE_SLUG derivation (identical in both occurrences) and writes to both per-project and global paths. The read side breaks the architecture: /retro reads global plus all per-project files rather than global only, which double-counts entries that were written to both locations, and the retro file contradicts itself about whether it reads one path or many. Type labels used by ship match retro's expected types, but review omits them explicitly."},"latency_ms":14416,"stop_reason":"end_turn","usage":{"input_tokens":3698,"output_tokens":1091},"cost_usd":0.09153}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["Step number mismatch: greptile-triage.md says '/ship (Step 3.75)' references it, but ship/SKILL.md places Greptile handling at Step 10.","ship/SKILL.md delegates to an intermediary file (~/.claude/skills/gstack/ship/sections/greptile.md) rather than directly to greptile-triage.md; that file's contents are not shown, so the dual-path write for /ship cannot be fully verified from the extracted lines (only the reply-template reference to greptile-triage.md is explicit).","Minor path-convention inconsistency: review references a relative path (.claude/skills/review/greptile-triage.md) while ship uses an absolute gstack-prefixed path (~/.claude/skills/gstack/ship/sections/greptile.md)."],"score":4,"reasoning":"The core data architecture holds: greptile-triage.md defines REMOTE_SLUG identically in both occurrences and writes to both ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md; review explicitly saves to both per-project and global and delegates mechanics to greptile-triage.md; retro reads only the global path ~/.gstack/greptile-history.md. No contradictions in paths or read/write roles. Deductions are for the stale step-number reference (3.75 vs 10), ship's extra indirection layer that obscures verification of the dual write, and inconsistent path styles."},"latency_ms":15234,"stop_reason":"end_turn","usage":{"input_tokens":2829,"output_tokens":985},"cost_usd":0.07754}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md has one inconsistent phrasing: 'save to greptile-history (type: fp)' (option C branch) omits 'both per-project and global', unlike every other write instruction in ship and review which explicitly names both paths. Not contradictory, but ambiguous in isolation.","review/SKILL.md write instructions never mention the entry `type` field (fix/fp/already-fixed) that ship/SKILL.md specifies and retro/SKILL.md depends on for counting; review relies on greptile-triage.md to define the record format, which is acceptable but less explicit than ship."],"score":4,"reasoning":"The architecture is implemented consistently: greptile-triage.md is the single owner of write mechanics and defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md); REMOTE_SLUG is derived with the identical expression both times it appears and only appears in the triage file, so there is no cross-file drift. Both /review and /ship delegate to greptile-triage.md and instruct writing to both paths. /retro explicitly reads only the global aggregate and explicitly rejects per-project copies. The only blemishes are a single abbreviated 'save to greptile-history' line in ship and review's lack of explicit type labeling, neither of which contradicts the intended design."},"latency_ms":14404,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1016},"cost_usd":0.08779}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md deviates from the intended architecture: it reads the global `~/.gstack/greptile-history.md` AND every `~/.gstack/projects/*/greptile-history.md` and concatenates them, whereas the architecture specifies /retro reads from the GLOBAL path only.","Because /review and /ship (via greptile-triage.md) write every entry to BOTH the per-project and global files, retro's concatenation double-counts every Greptile entry — fix/fp/already-fixed counts and the signal ratio denominator/numerator will be inflated 2x (ratio itself survives but raw counts in the 'Y catches, Z FPs' row are wrong).","retro/SKILL.md is internally inconsistent: the aggregation step reads multiple files, but the output note gates the `greptile` field on a single `greptile-history.md` at 'the path GREPTILE_HISTORY printed', implying one file.","review/SKILL.md's save instruction ('Save to both per-project and global greptile-history') does not specify the entry `type` (fix/fp/already-fixed) that ship/SKILL.md specifies and that retro depends on for counting — a minor under-specification relative to ship."],"score":3,"reasoning":"The write side is consistent: /review and /ship both delegate to greptile-triage.md, both save to per-project and global paths, and REMOTE_SLUG is derived identically in the only file that uses it (greptile-triage.md, both occurrences match). The read side breaks the architecture: /retro reads per-project files in addition to the global file, which contradicts the 'global only' design and, given dual writes, double-counts entries. The retro file is also internally inconsistent about whether it reads one file or many."},"latency_ms":16425,"stop_reason":"end_turn","usage":{"input_tokens":3698,"output_tokens":1174},"cost_usd":0.09568}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the shared triage doc as `.claude/skills/review/greptile-triage.md` (relative, no `gstack/` segment) while ship/SKILL.md and greptile-triage.md itself use `~/.claude/skills/gstack/review/greptile-triage.md` — the file is the same but the reference path is inconsistent.","ship/SKILL.md's delegated triage subagent is told 'do NOT reply to comments', yet later lines in the same file instruct replying/saving history; this is fine as a two-phase design but the split of responsibilities (classify in subagent, write in parent) isn't stated as explicitly as in review/SKILL.md."],"score":4,"reasoning":"The core data architecture is implemented consistently: greptile-triage.md is the single place defining both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md), and its REMOTE_SLUG derivation appears identically in both places it is used. Both /review and /ship instruct saving to 'both per-project and global greptile-history' and delegate templates/mechanics to greptile-triage.md. The entry types written by /ship (fix, fp, already-fixed) match exactly the types /retro counts. /retro explicitly reads only the global aggregate and warns against using a per-project copy. The only real wrinkle is the mismatched reference path to greptile-triage.md between review and ship, which doesn't contradict the data model but could cause a lookup failure."},"latency_ms":15117,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1050},"cost_usd":0.08949}
|
||||
{"config":"cross-skill","item":"p02","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files align with the intended architecture. review/SKILL.md and ship/SKILL.md both delegate fetch/filter/classify mechanics to review/greptile-triage.md (ship via an intermediate ship/sections/greptile.md that itself points to greptile-triage.md) and both instruct saving to per-project AND global greptile-history. greptile-triage.md is the single source of truth for REMOTE_SLUG derivation and defines exactly the two expected paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md), so there is no divergent slug logic across files. retro/SKILL.md reads only the global path, matching its cross-project aggregation role, and the entry types it counts (fix, fp, already-fixed) match the 'already-fixed' type ship writes. No path, role, or delegation contradictions found."},"latency_ms":10706,"stop_reason":"end_turn","usage":{"input_tokens":1408,"output_tokens":666},"cost_usd":0.04738}
|
||||
{"config":"cross-skill","item":"a05","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["retro/SKILL.md permits an optional read of the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) for a per-repo breakdown, which slightly departs from the stated 'retro reads GLOBAL only' rule (though primary aggregation still uses the GREPTILE_HISTORY path)","retro/SKILL.md never states the global path literal; it relies on a GREPTILE_HISTORY preamble variable not shown in the extracted lines, so the global-path binding cannot be verified from these excerpts","retro/SKILL.md uses $REMOTE_SLUG without showing its derivation, so consistency with greptile-triage.md's remote-slug fallback chain is assumed rather than demonstrated","greptile-triage.md defines a PROJECT_HISTORY variable but no corresponding global-history variable is visible, even though both paths are listed as write targets","review/SKILL.md's extracted write instruction omits the entry type (fix/fp/already-fixed) that ship/SKILL.md specifies and retro depends on, though this may exist in lines not extracted"],"score":4,"reasoning":"The core architecture holds: greptile-triage.md is the single source of truth for fetch/classify/write mechanics and defines both per-project and global paths; both /review and /ship explicitly save to both paths and reference the triage doc's templates; REMOTE_SLUG is derived identically in both occurrences within greptile-triage.md; /retro's entry types (fix, fp, already-fixed) match the types /ship writes. The only deviations are minor: retro's optional per-project read softens the 'global only' rule, and some bindings (GREPTILE_HISTORY, REMOTE_SLUG in retro) are not visible in the excerpts. No outright contradictions."},"latency_ms":18409,"stop_reason":"end_turn","usage":{"input_tokens":4025,"output_tokens":1277},"cost_usd":0.1041}
|
||||
{"config":"cross-skill","item":"a03","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the triage doc as `.claude/skills/review/greptile-triage.md` (relative path) while ship/SKILL.md and greptile-triage.md itself use `~/.claude/skills/gstack/review/greptile-triage.md` — the two paths imply different install locations for the shared reference","review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying entry types (fix/fp/already-fixed), whereas ship/SKILL.md explicitly tags each save with a type and retro/SKILL.md depends on those type tags for its signal-ratio computation; the type tagging is presumably in greptile-triage.md but is not visible in the extracted lines","greptile-triage.md defines a PROJECT_HISTORY variable for the per-project path but no corresponding variable for the global path (only a bullet-list mention), a minor asymmetry in how the two write targets are specified"],"score":4,"reasoning":"The core data architecture is implemented consistently: both /review and /ship write to both the per-project and global greptile-history paths and delegate reply templates and write mechanics to greptile-triage.md; greptile-triage.md derives REMOTE_SLUG identically in both occurrences and creates the per-project directory; /retro explicitly reads only the global ~/.gstack/greptile-history.md and never a per-project copy, matching the intent. The only deviations are a path-reference inconsistency for the shared triage document between review and ship, and minor asymmetries in how entry types and the global path variable are spelled out, none of which contradict the intended two-path write / global-read design."},"latency_ms":16119,"stop_reason":"end_turn","usage":{"input_tokens":4011,"output_tokens":1127},"cost_usd":0.09646}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md has one line that says only 'save to greptile-history (type: fp)' without specifying both per-project and global paths, while sibling lines say 'save to both per-project and global' — ambiguous wording though likely resolved by delegation to greptile-triage.md","ship/SKILL.md uses mixed phrasing for the dual write ('per-project/global' vs 'both per-project and global'), and review/SKILL.md only explicitly states 'both' for the already-fixed case in the extracted lines","ship/SKILL.md adds an indirection layer (sections/greptile.md auto-generated from a .tmpl) before reaching greptile-triage.md, which is fine architecturally but means the write-path rules live two hops away"],"score":4,"reasoning":"The architecture is implemented consistently across files: greptile-triage.md is the single source for fetch/classify/write mechanics and defines both paths (PROJECT_HISTORY per-project and ~/.gstack/greptile-history.md global) with an identical REMOTE_SLUG derivation in both places it appears; /review and /ship both delegate to it and state they write to both paths; /retro explicitly reads only the global aggregate and even notes 'never a per-project copy'. The only deductions are minor wording inconsistencies in ship/SKILL.md where one FP branch omits the explicit 'both paths' qualifier, which could be misread as a single write but does not contradict the design."},"latency_ms":16201,"stop_reason":"end_turn","usage":{"input_tokens":4011,"output_tokens":1145},"cost_usd":0.09736}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files agree with the intended architecture. greptile-triage.md is the single place that defines the write mechanics: it derives REMOTE_SLUG (identically in both occurrences), mkdirs the per-project directory, and names both targets (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md). review/SKILL.md and ship/sections/greptile.md both instruct saving to 'both per-project and global' history for fix/fp/already-fixed outcomes and delegate templates/mechanics to greptile-triage.md rather than redefining paths. retro/SKILL.md reads only the global ~/.gstack/greptile-history.md and parses the same type tags (fix, fp, already-fixed) that ship records. REMOTE_SLUG is only derived in greptile-triage.md, so there is no cross-file divergence. Only cosmetic variance exists (ship's summary says 'already fixed' where review/triage say 'fixed'; review's excerpt omits explicit type tags that ship spells out), neither of which affects the data paths or read/write roles."},"latency_ms":18635,"stop_reason":"end_turn","usage":{"input_tokens":3680,"output_tokens":1395},"cost_usd":0.10655}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md: one False Positive branch ('If user chooses C') says only 'save to greptile-history (type: fp)' without specifying both per-project and global, while the other FP branch and the already-fixed/fix branches explicitly say both paths — ambiguous rather than contradictory, but inconsistent wording within the same file","ship/SKILL.md annotates history entries with '(type: fix|fp|already-fixed)' matching what retro counts, but review/SKILL.md's 'Save to both per-project and global greptile-history' lines never mention the type field — relies on greptile-triage.md defining the entry format (not shown in the excerpt) to keep retro's type-counting working for /review-written entries","Cosmetic: summary header text differs slightly between review/triage ('Y fixed') and ship ('{already_fixed} already fixed')"],"score":4,"reasoning":"The architecture is implemented consistently: greptile-triage.md is the single source for the two paths and REMOTE_SLUG derivation (identical in both occurrences), both /review and /ship delegate fetch/classify/reply mechanics to it and state they write to both per-project and global history, and /retro explicitly reads only the global aggregate (never per-project) and counts the fix/fp/already-fixed types that /ship writes. The only gaps are a vaguely worded save instruction in one ship branch and the absence of explicit type annotations in review's save lines, which are ambiguities rather than contradictions."},"latency_ms":17486,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1235},"cost_usd":0.09874}
|
||||
{"config":"cross-skill","item":"p04","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files agree with the intended architecture. greptile-triage.md is the single source of truth defining both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) and the 'History File Writes' section explicitly appends to both. review/SKILL.md and ship/SKILL.md both delegate write mechanics to greptile-triage.md § History File Writes and both state writes go to per-project AND global. retro/SKILL.md reads only the global path and explicitly says 'never a per-project copy', and its parsing (fix/fp/already-fixed types) matches the outcome types review records. REMOTE_SLUG derivation appears only in greptile-triage.md (twice) and both occurrences are byte-identical; no other file derives it differently. Minor non-contradictory observations: ship reaches greptile-triage.md indirectly via sections/greptile.md (not shown), and the REMOTE_SLUG line is duplicated within greptile-triage.md, which is a maintenance risk but currently consistent."},"latency_ms":13885,"stop_reason":"end_turn","usage":{"input_tokens":2725,"output_tokens":1064},"cost_usd":0.08045}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files agree with the intended architecture. review/SKILL.md and ship/SKILL.md both reference greptile-triage.md for fetch/classify/reply mechanics and both explicitly save to 'both per-project and global greptile-history'. greptile-triage.md is the single owner of the REMOTE_SLUG derivation (both occurrences are byte-identical) and defines exactly the two paths: ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md (per-project) and ~/.gstack/greptile-history.md (global aggregate). retro/SKILL.md reads only the global path and explicitly says 'never a per-project copy', and its entry types (fix, fp, already-fixed) match the types ship writes. The summary header format '+ N Greptile comments (X valid, Y fixed, Z FP)' is identical across review, ship, and triage. Only trivial observations: review/SKILL.md's save line omits the explicit type labels that ship includes (but it delegates to triage), and ship routes through an auto-generated sections/greptile.md wrapper — neither constitutes a contradiction."},"latency_ms":12792,"stop_reason":"end_turn","usage":{"input_tokens":3705,"output_tokens":927},"cost_usd":0.0834}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads the global ~/.gstack/greptile-history.md AND every ~/.gstack/projects/*/greptile-history.md and concatenates them, contradicting the intended architecture where /retro reads the global path only. Since /review and /ship write every entry to BOTH paths (per greptile-triage.md and ship/SKILL.md), concatenating would double-count every entry, skewing fix/fp/already-fixed counts and the signal ratio.","retro/SKILL.md is internally inconsistent: the GREPTILE_HISTORY read instruction says to aggregate global + all per-project files, but the later Note gates the `greptile` output field on a single `greptile-history.md` (the path GREPTILE_HISTORY printed) existing and having entries.","Minor: review/SKILL.md says 'Save to both per-project and global greptile-history' but never names the entry type tags (fix/fp/already-fixed) that ship/SKILL.md specifies and retro/SKILL.md depends on for counting; it relies implicitly on greptile-triage.md to supply the format."],"score":3,"reasoning":"The write side is consistent: /review and /ship both delegate fetch/classify/reply mechanics to greptile-triage.md, which defines REMOTE_SLUG identically in both occurrences and writes to both the per-project and global paths; ship's type tags match retro's expected types. The read side breaks the architecture: /retro is specified to read global plus all per-project files, which both violates the 'global only' intent and would double-count entries given dual-writes, and retro's own gating note contradicts its read instruction."},"latency_ms":24620,"stop_reason":"end_turn","usage":{"input_tokens":3698,"output_tokens":1027},"cost_usd":0.08833}
|
||||
{"config":"cross-skill","item":"a06","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md option C for FALSE POSITIVE says only 'save to greptile-history (type: fp)' without specifying both per-project and global, while other branches (fix, already-fixed, and the later fp branch) explicitly say 'both per-project and global' — ambiguous but likely shorthand","review/SKILL.md extracted lines only explicitly mention 'Save to both per-project and global' for the already-fixed branch; fix and fp branches are not shown specifying dual-write (may be delegated to greptile-triage.md, which does define both paths)","review/SKILL.md does not show entry type tags (fix/fp/already-fixed) that /retro depends on for counting, whereas ship/SKILL.md does — relies on greptile-triage.md defining the entry format"],"score":4,"reasoning":"The architecture is implemented coherently: greptile-triage.md is the single source of truth for REMOTE_SLUG derivation (identical in both occurrences), the per-project path, and the global aggregate path; both /review and /ship delegate fetch/classify/reply/write mechanics to it and state dual-write to per-project and global; /retro explicitly reads only the global path and rejects per-project copies, counting the same types (fix, fp, already-fixed) that /ship records. The only deductions are for one abbreviated 'save to greptile-history' phrasing in /ship and the lack of explicit type/dual-path wording on every /review branch, which are minor and non-contradictory."},"latency_ms":16270,"stop_reason":"end_turn","usage":{"input_tokens":3699,"output_tokens":1161},"cost_usd":0.09504}
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["Minor: review/SKILL.md excerpt says 'Save to both per-project and global greptile-history' without specifying the entry type (fix/fp/already-fixed) that ship/SKILL.md tags and retro/SKILL.md counts on; the type tagging is presumably handled by greptile-triage.md's write mechanics, but it is not explicit in the review excerpt."],"score":5,"reasoning":"All files agree on the intended architecture. greptile-triage.md defines both paths (per-project ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and global ~/.gstack/greptile-history.md) with an identical REMOTE_SLUG derivation in both occurrences. /review and /ship both delegate fetch/classify/reply/write mechanics to greptile-triage.md and both state saves go to both per-project and global history. /ship's extra indirection via sections/greptile.md still points to greptile-triage.md. /retro explicitly reads only the global path ('never a per-project copy') and counts the same three types (fix, fp, already-fixed) that /ship writes. No contradictions found; only a trivial omission of type labels in the review excerpt."},"latency_ms":14404,"stop_reason":"end_turn","usage":{"input_tokens":2729,"output_tokens":1004},"cost_usd":0.07749}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `sections/greptile.md` rather than directly to `review/greptile-triage.md`, while greptile-triage.md claims `/ship (Step 10)` references it directly; the intermediate file's contents are not shown, so the delegation chain to the shared write mechanics cannot be verified from these excerpts.","retro/SKILL.md reads 'the greptile-history.md path that line printed' (GREPTILE_HISTORY from a preflight script) without stating it is the global `~/.gstack/greptile-history.md`; the excerpt does not demonstrate the global-only read, though the absence of any REMOTE_SLUG usage in retro is consistent with it.","retro/SKILL.md expects entry types `fix`, `fp`, `already-fixed`, but the write format in greptile-triage.md is not shown in the excerpt, so the schema compatibility between writer and reader is unverified (and the SUPPRESSED classification from review has no obvious mapping, though it likely isn't logged)."],"score":4,"reasoning":"No contradictions found. greptile-triage.md is the single owner of REMOTE_SLUG derivation (two identical definitions) and of both write paths (per-project + global), review/SKILL.md explicitly says 'Save to both per-project and global' and delegates fetch/classify/reply mechanics to greptile-triage.md, and the Greptile header summary format matches between review and triage. Deductions are for unverifiable links rather than conflicts: ship's extra indirection via sections/greptile.md, retro's path source not being explicitly shown as global, and the log entry schema not being visible on the writer side."},"latency_ms":20636,"stop_reason":"end_turn","usage":{"input_tokens":2972,"output_tokens":1613},"cost_usd":0.11037}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `ship/sections/greptile.md` rather than directly to `review/greptile-triage.md`; the extracted lines cannot confirm that sections/greptile.md in turn references greptile-triage.md or writes to both per-project and global paths, even though greptile-triage.md claims /ship Step 10 references it","retro/SKILL.md reads whatever path the `GREPTILE_HISTORY` preamble line prints rather than explicitly naming `~/.gstack/greptile-history.md`; the global-only intent is implied (no REMOTE_SLUG usage) but not verifiable from the extracted lines","retro parses entry types `fix`, `fp`, `already-fixed` but the write format of entries in greptile-triage.md is not shown, so field-level compatibility cannot be confirmed"],"score":4,"reasoning":"Core architecture holds: greptile-triage.md defines both per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths, uses an identical REMOTE_SLUG derivation in both occurrences, and review/SKILL.md explicitly delegates to it and saves to both histories. retro does not derive a project slug, consistent with reading the global aggregate. No contradictions found, but ship's indirection through sections/greptile.md and retro's indirect path resolution leave the two-path write (for ship) and global-only read (for retro) implied rather than explicitly demonstrated in the extracted lines."},"latency_ms":14580,"stop_reason":"end_turn","usage":{"input_tokens":3284,"output_tokens":1045},"cost_usd":0.08509}
|
||||
{"config":"cross-skill","item":"p03","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md is the single source of truth: it defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md per-project and ~/.gstack/greptile-history.md global), derives REMOTE_SLUG identically in both occurrences, and does mkdir -p before writing. review/SKILL.md (Step 2.5) and ship/sections/greptile.md (Step 10) both delegate fetch/classify/escalation/reply templates to greptile-triage.md and both instruct 'save to both per-project and global greptile-history', matching the dual-write design. ship/SKILL.md correctly points to sections/greptile.md which in turn points to review/greptile-triage.md. retro/SKILL.md reads only the global ~/.gstack/greptile-history.md and counts types fix/fp/already-fixed, which match the types ship/sections/greptile.md records. No contradictions in paths, slug derivation, read/write direction, or summary header format ('+ N Greptile comments (X valid, Y fixed, Z FP)'). Only cosmetic notes: review/SKILL.md's extracted save line omits the explicit '(type: ...)' annotation that ship uses, and greptile-triage.md defines PROJECT_HISTORY but later lists the literal path — neither creates an inconsistency."},"latency_ms":17844,"stop_reason":"end_turn","usage":{"input_tokens":3680,"output_tokens":1247},"cost_usd":0.09915}
|
||||
{"config":"cross-skill","item":"a04","split":"dev","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs: ship/SKILL.md uses `REMOTE_SLUG=$(~/.claude/skills/gstack/browse/bin/remote-slug 2>/dev/null)` with no fallback, while greptile-triage.md uses a three-stage fallback (`browse/bin/remote-slug || ~/.claude/.../remote-slug || basename git-toplevel`). If remote-slug fails in /ship, REMOTE_SLUG is empty and the per-project path collapses to `~/.gstack/projects//greptile-history.md`, diverging from the path /review (via greptile-triage.md) would write.","ship/SKILL.md duplicates the REMOTE_SLUG + mkdir mechanics inline rather than fully delegating write mechanics to greptile-triage.md, creating a second source of truth that has already drifted.","review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying entry types (fix/fp/already-fixed) that ship/SKILL.md specifies and retro/SKILL.md depends on for counting; this is only consistent if greptile-triage.md's write format (not fully shown) enforces the type field."],"score":4,"reasoning":"The two-path architecture is implemented consistently at the conceptual level: /review and /ship both write to per-project and global paths and both reference greptile-triage.md for templates; greptile-triage.md defines both paths correctly; /retro reads only the global aggregate and explicitly rejects per-project copies. The main defect is the REMOTE_SLUG derivation in ship/SKILL.md lacking the fallback chain present in greptile-triage.md, which can produce a different per-project path on failure. A minor concern is review not stating the type tags retro relies on."},"latency_ms":15852,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1161},"cost_usd":0.09603}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly writes to the per-project greptile-history ONLY ('save per-project greptile-history only (type: fix)', 'save to the per-project greptile-history only (type: fp)', 'Save to per-project greptile-history only (ship never writes the global file) (type: already-fixed)'), contradicting the intended architecture where /ship writes to BOTH paths.","ship/SKILL.md contradicts review/greptile-triage.md, which it delegates to and which lists both `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` (per-project) and `~/.gstack/greptile-history.md` (global aggregate) as write targets.","Because /retro reads only the global file, Greptile entries produced via /ship (fix, fp, already-fixed) will never appear in retro's Greptile signal ratio, silently skewing the cross-project aggregate toward /review-only data.","review/SKILL.md ('Save to both per-project and global greptile-history') and ship/SKILL.md ('ship never writes the global file') describe different persistence behavior for the same classification outcomes while using the same shared triage doc."],"score":2,"reasoning":"/review, greptile-triage.md, and /retro are mutually consistent with the intended two-path design (review writes both, triage defines both paths, retro reads global only), and REMOTE_SLUG derivation is identical in both occurrences within greptile-triage.md. However, /ship directly and repeatedly contradicts the architecture by asserting it writes per-project only and never the global file. This is a substantive data-flow contradiction (not a wording difference) that undermines retro's aggregation, so the set as a whole is not consistent."},"latency_ms":13088,"stop_reason":"end_turn","usage":{"input_tokens":3710,"output_tokens":917},"cost_usd":0.08295}
|
||||
{"config":"cross-skill","item":"p01","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files implement the intended architecture coherently. greptile-triage.md is the single source of truth for write mechanics: it derives REMOTE_SLUG identically in both places it appears, defines PROJECT_HISTORY as ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md, and lists the global ~/.gstack/greptile-history.md as the aggregate. review/SKILL.md (Step 2.5) and ship/SKILL.md (Step 10) both delegate fetch/classify/reply to greptile-triage.md and both instruct saving to 'both per-project and global greptile-history', matching the triage doc's self-description of being shared by /review Step 2.5 and /ship Step 10. ship's entry types (fix, fp, already-fixed) exactly match the types retro counts. retro/SKILL.md reads only the global path and explicitly says 'never a per-project copy', consistent with its cross-project aggregation role. No file derives REMOTE_SLUG differently or points retro at a per-project path. The only trivial observation is that the extracted review lines don't spell out entry type labels the way ship does, but since write mechanics are delegated to greptile-triage.md this is not a contradiction."},"latency_ms":17045,"stop_reason":"end_turn","usage":{"input_tokens":4017,"output_tokens":1309},"cost_usd":0.10562}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it saves to the per-project greptile-history ONLY for all three classification types (fix, fp, already-fixed), and even asserts 'ship never writes the global file' — this directly contradicts the intended architecture that /review and /ship both WRITE to BOTH paths.","Because /retro reads only the global ~/.gstack/greptile-history.md, /ship's Greptile triage outcomes will never appear in retro aggregation under ship/SKILL.md's current behavior, breaking the retro signal-ratio metric for ship-driven triage.","ship/SKILL.md's per-project-only instruction contradicts review/greptile-triage.md, which it delegates to and which lists both the per-project and global aggregate paths as write targets.","review/SKILL.md ('Save to both per-project and global greptile-history') and ship/SKILL.md ('per-project only') implement different write semantics despite both delegating to the same greptile-triage.md mechanics."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent with the intended architecture: triage defines both paths with a consistent REMOTE_SLUG derivation, review writes to both, and retro reads global only. However, ship/SKILL.md explicitly and repeatedly contradicts the architecture by writing only to the per-project file and stating that ship never writes the global file. This is a direct contradiction (not a mere omission) that also creates a functional data gap for /retro aggregation."},"latency_ms":11495,"stop_reason":"end_turn","usage":{"input_tokens":4022,"output_tokens":891},"cost_usd":0.08477}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Do not load any shared triage document; /review owns its own Greptile handling', contradicting the intended delegation to greptile-triage.md and contradicting greptile-triage.md's own statement that 'Both /review (Step 2.5) and /ship (Step 10) reference this document'.","review/SKILL.md writes only to the global path (~/.gstack/greptile-history.md) and never mentions the per-project path (~/.gstack/projects/{slug}/greptile-history.md); intended architecture requires /review to write to BOTH, and ship/SKILL.md and greptile-triage.md both do dual-write.","review/SKILL.md has no REMOTE_SLUG derivation at all (consistent with it not writing per-project), so slug derivation is not consistent across files that should use it; only greptile-triage.md derives it (identically in both places there, which is fine).","review/SKILL.md fetches only pulls/$PR_NUMBER/comments (line-level) with no position filter, no top-level issue-comment fetch, and no gstack-issue-guard pass, whereas greptile-triage.md fetches both endpoints, filters position != null, and routes bodies through the issue guard.","review/SKILL.md instructs to 'Reply to each Greptile comment in your own words', while greptile-triage.md requires the fixed reply templates whose markers (**Fixed**, **Not a bug.**, **Already fixed**) are what Tier 2 escalation detection scans for; free-form /review replies would break escalation detection for later /ship runs.","review/SKILL.md uses classification label 'FIXED' while retro/SKILL.md, ship/SKILL.md and greptile-triage.md use 'already-fixed'/'ALREADY FIXED' as the history type; unclear what type /review records, risking unparseable entries for /retro's count-by-type."],"score":2,"reasoning":"ship/SKILL.md, review/greptile-triage.md, and retro/SKILL.md are mutually consistent and match the intended architecture (dual-write via greptile-triage, consistent REMOTE_SLUG derivation, retro reads global only). However, review/SKILL.md directly contradicts the architecture on multiple points: it refuses to use the shared triage doc, writes only to the global path, skips per-project history and slug derivation, uses a divergent fetch pipeline, and replies free-form rather than with the templates that escalation detection depends on. This is a substantive architectural contradiction, not a cosmetic drift."},"latency_ms":18466,"stop_reason":"end_turn","usage":{"input_tokens":3277,"output_tokens":1455},"cost_usd":0.10552}
|
||||
{"config":"cross-skill","item":"p05","split":"dev","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md says 'Save to both per-project and global greptile-history' without explicitly naming the entry type (fix/fp/already-fixed) the way ship/SKILL.md does; this is a documentation-detail gap rather than a contradiction, since type tagging is presumably defined in greptile-triage.md which both delegate to"],"score":5,"reasoning":"All files implement the intended architecture coherently: greptile-triage.md defines both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths and uses an identical REMOTE_SLUG derivation in both places it appears. /review (Step 2.5) and /ship (Step 10, via sections/greptile.md) both delegate fetch/filter/classify/escalation and reply templates to greptile-triage.md and both instruct saving to both per-project and global history. /retro explicitly reads only the global aggregate, states 'never a per-project copy', and counts the same three types (fix, fp, already-fixed) that /ship writes. No contradictions in paths, read/write direction, or slug derivation."},"latency_ms":15632,"stop_reason":"end_turn","usage":{"input_tokens":2729,"output_tokens":1051},"cost_usd":0.07984}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["Step-number mismatch: greptile-triage.md says '/ship (Step 3.75)' references it, but ship/SKILL.md places Greptile handling at Step 10.","ship/SKILL.md delegates to an intermediate file (~/.claude/skills/gstack/ship/sections/greptile.md) rather than directly to greptile-triage.md; the excerpt only shows ship using greptile-triage.md for reply templates, so the dual-path write for /ship cannot be verified from the provided lines (it is one indirection removed).","Skill path references are inconsistent in form: review uses a project-relative path `.claude/skills/review/greptile-triage.md` while ship uses a home-anchored path `~/.claude/skills/gstack/ship/sections/greptile.md` (note the extra `gstack` segment), which could cause one or the other to fail depending on install layout."],"score":4,"reasoning":"The core data architecture is consistently implemented: greptile-triage.md defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md), /review explicitly saves to both and delegates mechanics/templates to greptile-triage.md, /retro reads only the global file, and REMOTE_SLUG derivation is identical in both places it appears (only within greptile-triage.md, so no cross-file divergence). The remaining issues are documentation drift (wrong step number for /ship), an extra indirection layer in /ship whose write behavior isn't visible in the excerpt, and inconsistent path conventions — none contradict the intended architecture, but they are minor consistency defects."},"latency_ms":14466,"stop_reason":"end_turn","usage":{"input_tokens":3141,"output_tokens":1062},"cost_usd":0.08451}
|
||||
{"config":"cross-skill","item":"f04","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Do not load any shared triage document; /review owns its own Greptile handling', contradicting the intended architecture (and greptile-triage.md's own claim that 'Both /review (Step 2.5) and /ship (Step 10) reference this document').","review/SKILL.md writes only to the global path (~/.gstack/greptile-history.md) and never to the per-project path (~/.gstack/projects/{slug}/greptile-history.md), so per-project suppression history is not populated by /review; ship/SKILL.md and greptile-triage.md write to both.","review/SKILL.md fetches only the line-level comments endpoint without the position != null filter and without the top-level issue-comments endpoint, diverging from the fetch/filter mechanics in greptile-triage.md used by /ship.","review/SKILL.md does not use the REMOTE_SLUG derivation at all (it never derives a slug since it skips per-project writes), so slug consistency cannot be verified for /review; ship delegates slug derivation to greptile-triage.md where the two REMOTE_SLUG definitions are identical.","review/SKILL.md says to reply 'in your own words' rather than using the shared reply templates (Fix / Already Fixed / False Positive) that ship/SKILL.md and greptile-triage.md mandate, so history entries and reply markers (**Fixed**, **Not a bug.**, **Already fixed**) used for Tier 2 escalation detection may be inconsistent across skills."],"score":2,"reasoning":"ship/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent with the intended two-path architecture (ship writes both paths via triage doc, retro reads global only, REMOTE_SLUG derivations match). However, review/SKILL.md directly contradicts the architecture: it refuses to delegate to greptile-triage.md, writes only to the global path, uses a different fetch pipeline, and skips shared reply templates. Since one of the two writer skills breaks delegation and the dual-write contract, the set is substantially inconsistent."},"latency_ms":15036,"stop_reason":"end_turn","usage":{"input_tokens":3277,"output_tokens":1138},"cost_usd":0.08967}
|
||||
{"config":"cross-skill","item":"a02","split":"dev","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["Step number mismatch: greptile-triage.md says /ship references it at 'Step 3.75', but ship/SKILL.md places Greptile handling at 'Step 10'.","ship/SKILL.md delegates to an intermediate file (sections/greptile.md) that is not shown, so the per-project + global dual-write for /ship cannot be directly verified from the extracted lines (it only references greptile-triage.md for reply templates).","Skill file path roots differ: review/SKILL.md references the relative path '.claude/skills/review/greptile-triage.md' while ship/SKILL.md references '~/.claude/skills/gstack/ship/sections/greptile.md' — inconsistent install-root conventions."],"score":4,"reasoning":"The core data architecture is consistent: greptile-triage.md defines REMOTE_SLUG identically in both occurrences and writes to both ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md; review/SKILL.md explicitly saves to both per-project and global and delegates mechanics to greptile-triage.md; retro/SKILL.md reads only the global path, matching the aggregation intent. The remaining issues are a step-number discrepancy for /ship, an unverifiable indirection layer in /ship, and minor path-convention differences — none contradict the data model."},"latency_ms":13070,"stop_reason":"end_turn","usage":{"input_tokens":2829,"output_tokens":963},"cost_usd":0.07644}
|
||||
{"config":"cross-skill","item":"f05","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads from BOTH the global ~/.gstack/greptile-history.md AND every ~/.gstack/projects/*/greptile-history.md and concatenates them, contradicting the intended architecture where /retro reads the GLOBAL path only.","Because /review and /ship (via greptile-triage.md) write every entry to BOTH per-project and global files, retro's concatenation of both sources will double-count every entry, inflating fix/fp/already-fixed counts (the signal ratio itself is unaffected but the reported catch/FP counts are wrong).","retro/SKILL.md is internally inconsistent: the read step uses global + all per-project files, but the inclusion note gates the `greptile` field on a single `greptile-history.md` path that `GREPTILE_HISTORY` printed.","review/SKILL.md says 'Save to both per-project and global greptile-history' without specifying the entry type (fix/fp/already-fixed) that ship/SKILL.md specifies and retro depends on for counting; the type convention is only explicit in ship."],"score":3,"reasoning":"The write side is consistent: review and ship both delegate to greptile-triage.md, which defines a single REMOTE_SLUG derivation (identical in both occurrences) and writes to both per-project and global paths as intended. The read side deviates: retro reads global plus all per-project files instead of global only, which both contradicts the stated architecture and causes double counting given the dual-write design. Minor ambiguities remain around entry types in review and the gating note in retro."},"latency_ms":14486,"stop_reason":"end_turn","usage":{"input_tokens":3698,"output_tokens":1007},"cost_usd":0.08733}
|
||||
{"config":"cross-skill","item":"a01","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `sections/greptile.md` rather than directly to `review/greptile-triage.md`; greptile-triage.md claims `/ship` (Step 10) references it, but that link can only be indirect via sections/greptile.md, whose contents are not shown — the delegation chain cannot be fully verified from these excerpts.","retro/SKILL.md reads 'the greptile-history.md path that GREPTILE_HISTORY printed' without explicitly stating it is the global path (~/.gstack/greptile-history.md); correctness depends on the preamble script, which is not shown.","review/SKILL.md says 'Save to both per-project and global greptile-history' but gives no path details — it relies entirely on greptile-triage.md, which is fine as delegation but means review itself has no explicit tie to the global path."],"score":4,"reasoning":"No contradictions exist. greptile-triage.md is the single source of truth for both history paths and for REMOTE_SLUG derivation, and its two REMOTE_SLUG definitions are identical. review/SKILL.md explicitly delegates fetch/classify/reply to greptile-triage.md and writes to both paths. retro reads a single history file consistent with global-only aggregation. The only gaps are unverifiable indirections: ship's delegation goes through an unseen sections/greptile.md, and retro's path comes from an unseen preamble variable."},"latency_ms":12926,"stop_reason":"end_turn","usage":{"input_tokens":2972,"output_tokens":931},"cost_usd":0.07627}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads from the PER-PROJECT path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) in both the Step 1 fetch command and the metric computation, but the intended architecture says /retro reads from the GLOBAL path (~/.gstack/greptile-history.md) only, aggregating across all projects. The retro file even says 'for the current repo', directly contradicting the cross-project aggregation intent and making the global write in greptile-triage.md effectively unused.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses `browse/bin/remote-slug` with a fallback to `~/.claude/skills/gstack/browse/bin/remote-slug` and finally `basename $(git rev-parse --show-toplevel || pwd)`, while retro/SKILL.md uses only `basename $(git rev-parse --show-toplevel)`. If remote-slug produces a different slug (e.g. owner-repo) than the directory basename, retro will look in a different per-project directory than the one review/ship wrote to, and the Greptile metric will silently be skipped.","Minor: skill path references differ in style — review/SKILL.md references `.claude/skills/review/greptile-triage.md` (relative, no gstack segment) while ship/SKILL.md references `~/.claude/skills/gstack/ship/sections/greptile.md` (absolute, with gstack segment); greptile-triage.md's own fallback also uses the `~/.claude/skills/gstack/` prefix. These may resolve to different installations.","ship/SKILL.md delegates to sections/greptile.md and only mentions reply templates from greptile-triage.md; the extracted lines do not show ship explicitly writing to both history paths, so the dual-write for /ship is only implied via delegation rather than stated (review/SKILL.md states it explicitly three times)."],"score":2,"reasoning":"review/SKILL.md and greptile-triage.md are consistent with each other (dual-write to per-project and global, shared templates, shared slug derivation). However, retro/SKILL.md contradicts the intended architecture on the core read path — it reads per-project instead of global — and uses a different, less robust REMOTE_SLUG derivation that can point at a different directory than the writers use. These two issues break the write→read contract that the global aggregate was designed for."},"latency_ms":17344,"stop_reason":"end_turn","usage":{"input_tokens":2915,"output_tokens":1290},"cost_usd":0.09365}
|
||||
{"config":"cross-skill","item":"f01","split":"dev","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["retro/SKILL.md reads from the PER-PROJECT path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) in Step 1 command 8, the Greptile signal computation, and the JSON output note — the intended architecture says /retro reads from the GLOBAL path (~/.gstack/greptile-history.md) only to aggregate across all projects. The global path is never referenced in retro/SKILL.md.","REMOTE_SLUG derivation is inconsistent: greptile-triage.md uses `browse/bin/remote-slug` (with fallback to ~/.claude/skills/gstack/browse/bin/remote-slug, then basename of repo root), while retro/SKILL.md uses only `basename \"$(git rev-parse --show-toplevel)\"`. For repos where remote-slug produces a different value than the directory basename, retro will look in a different per-project directory than the one triage wrote to, silently finding no history.","retro/SKILL.md explicitly scopes the Greptile signal to 'the current repo', which contradicts the architectural intent that retro aggregates Greptile data across all projects via the global file.","Minor: greptile-triage.md states /ship Step 10 references it directly, but ship/SKILL.md delegates to `sections/greptile.md` (not shown), adding an indirection layer whose write behavior cannot be verified from the provided excerpts; ship/SKILL.md itself never mentions the dual-path write."],"score":2,"reasoning":"The write side is consistent: review/SKILL.md says to save to both per-project and global history and delegates mechanics to greptile-triage.md, which defines both paths and the REMOTE_SLUG derivation. However, the read side contradicts the intended architecture — retro reads the per-project file instead of the global aggregate, and uses a different, simpler REMOTE_SLUG derivation that can diverge from triage's. This means retro may read a path triage never wrote to, and in any case does not perform cross-project aggregation as designed."},"latency_ms":16532,"stop_reason":"end_turn","usage":{"input_tokens":2915,"output_tokens":1162},"cost_usd":0.08725}
|
||||
{"config":"cross-skill","item":"f02","split":"dev","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly writes only to the per-project greptile-history and states 'ship never writes the global file' for all three classification types (fix, fp, already-fixed), contradicting the intended architecture that /review and /ship both write to BOTH paths; review/SKILL.md says 'Save to both per-project and global greptile-history' and greptile-triage.md lists both paths as write targets.","Because /retro reads ONLY the global ~/.gstack/greptile-history.md, any Greptile triage done via /ship will never be aggregated into retro metrics (signal ratio, fix/fp/already-fixed counts), creating a data gap between ship and review flows.","ship/SKILL.md's per-project-only instructions override the shared write mechanics in greptile-triage.md rather than delegating to them, so the 'delegate write mechanics to greptile-triage.md' intent is only partially honored by /ship."],"score":2,"reasoning":"The per-project path, global path, REMOTE_SLUG derivation (identical in both occurrences within greptile-triage.md), and retro's global-only read are all consistent with the intended architecture. However, ship/SKILL.md directly contradicts the core requirement that /ship write to both paths, repeatedly stating it writes per-project only and never writes the global file. This is a real contradiction with review/SKILL.md, greptile-triage.md, and the stated architecture, and it breaks the retro aggregation pipeline for ship-triaged comments."},"latency_ms":13251,"stop_reason":"end_turn","usage":{"input_tokens":4022,"output_tokens":973},"cost_usd":0.08887}
|
||||
{"config":"cross-skill","item":"f03","split":"dev","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["REMOTE_SLUG derivation differs across all three files that use it: review/SKILL.md uses `basename \"$PWD\"`, ship/SKILL.md uses a `git remote get-url origin | sed` pipeline producing `owner__repo`, and greptile-triage.md uses `browse/bin/remote-slug` with a fallback to `basename` of the git toplevel. These can produce different slugs for the same repo (e.g. `myrepo` vs `owner__myrepo`, or a subdirectory name when run from a nested cwd).","Because review/SKILL.md reads suppressions from `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` using its own `basename \"$PWD\"` slug, while greptile-triage.md writes per-project history under the remote-slug-derived slug, /review may look for suppressions in a different directory than the one /review and /ship actually write to — breaking the per-project suppression loop.","ship/SKILL.md duplicates write-path mechanics (its own REMOTE_SLUG derivation and `mkdir -p` for the per-project directory) instead of fully delegating to greptile-triage.md as intended, creating a second source of truth that can drift from the shared reference."],"score":3,"reasoning":"The high-level data architecture is implemented consistently: greptile-triage.md defines both per-project and global paths, /review and /ship both save to both paths with matching type labels, both delegate templates/classification to greptile-triage.md, and /retro explicitly reads only the global aggregate. However, the REMOTE_SLUG derivation is inconsistent in all three files that compute it, and since the per-project path depends on that slug, /review's suppression read and the triage doc's write may target different directories. This is a functional inconsistency rather than merely cosmetic, so the files are not fully consistent."},"latency_ms":19780,"stop_reason":"end_turn","usage":{"input_tokens":3884,"output_tokens":1612},"cost_usd":0.11944}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it does NOT read review/greptile-triage.md and uses its own inline classification, contradicting the intended architecture (and greptile-triage.md's own claim that both /review Step 2.5 and /ship Step 10 reference it).","ship/SKILL.md writes Greptile outcomes to a third, non-architected path `~/.gstack/ship-greptile-history.md` instead of the per-project and global greptile-history.md paths, so /ship outcomes never reach the global aggregate that /retro reads and never populate per-project suppressions.","ship/SKILL.md references `sections/greptile.md` as its Greptile source while greptile-triage.md says /ship references greptile-triage.md — the two files disagree about which document /ship delegates to.","ship/SKILL.md does not derive REMOTE_SLUG at all, so per-project suppression history is never produced by /ship; its history file is also not project-scoped.","ship/SKILL.md claims greptile-triage.md's templates and escalation rules are 'for /review only', contradicting greptile-triage.md's framing as a shared reference."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: review delegates to triage, triage writes to both per-project and global paths with a consistent REMOTE_SLUG derivation, and retro reads only the global aggregate. However ship/SKILL.md directly contradicts the architecture on nearly every point — it refuses to delegate to greptile-triage.md, writes to an unrelated single path (`ship-greptile-history.md`) rather than both intended paths, and cites a different source document. This breaks /retro's cross-skill aggregation and per-project suppressions for /ship, and creates an explicit contradiction with greptile-triage.md's statement that /ship references it."},"latency_ms":11404,"stop_reason":"end_turn","usage":{"input_tokens":3396,"output_tokens":927},"cost_usd":0.08031}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files implement the intended architecture consistently. greptile-triage.md is the single source of truth: it defines REMOTE_SLUG once, declares both GREPTILE_PROJECT_LOG (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and GREPTILE_GLOBAL_LOG (~/.gstack/greptile-history.md), and instructs appending to BOTH, with suppressions reading only the per-project log. Both /review (Step 2.5) and /ship (Step 10) delegate fetch/filter/classify/escalation to greptile-triage.md and reference the same two log variables with the same dual-write semantics. /retro reads only the hardcoded global path ~/.gstack/greptile-history.md, which matches GREPTILE_GLOBAL_LOG exactly, and explicitly declines to read per-project files, matching the aggregation intent. REMOTE_SLUG is derived in only one place (greptile-triage.md), so there is no divergence risk. The only unverifiable element is /ship's additional reference to ship/sections/greptile.md, whose contents are not shown, but nothing in the provided lines contradicts the architecture."},"latency_ms":11476,"stop_reason":"end_turn","usage":{"input_tokens":1664,"output_tokens":830},"cost_usd":0.05814}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files align with the intended architecture. greptile-triage.md is the single source of truth: it derives REMOTE_SLUG once, defines GREPTILE_PROJECT_LOG (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and GREPTILE_GLOBAL_LOG (~/.gstack/greptile-history.md), creates the project dir, and specifies appending to BOTH. review/SKILL.md (Step 2.5) and ship/SKILL.md (Step 10) both delegate to greptile-triage.md and use identical wording to write to both $GREPTILE_PROJECT_LOG and $GREPTILE_GLOBAL_LOG, so they never re-derive REMOTE_SLUG and cannot drift. retro/SKILL.md reads only ~/.gstack/greptile-history.md (matching GREPTILE_GLOBAL_LOG exactly) and explicitly forbids reading per-project files, consistent with the triage doc's comment that the global log is 'read by /retro'. The suppressions check reading only the per-project log matches the stated purpose of that path. The only unverifiable detail is ship's extra indirection through ship/sections/greptile.md (content not shown), but the ship lines provided already reference greptile-triage.md directly, so no contradiction is present."},"latency_ms":11913,"stop_reason":"end_turn","usage":{"input_tokens":1352,"output_tokens":978},"cost_usd":0.06242}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md does not reference greptile-triage.md directly; it delegates to ship/sections/greptile.md (not provided), so the /ship → greptile-triage.md delegation and write-to-both-paths behavior claimed in greptile-triage.md ('Both /review and /ship reference this document') cannot be verified from the excerpts","retro/SKILL.md expects history entries typed as fix / fp / already-fixed, but the entry format written by greptile-triage.md is not shown in the excerpts, so format alignment between writer and reader is unverified"],"score":4,"reasoning":"The visible files implement the intended architecture coherently: greptile-triage.md defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md) and uses an identical REMOTE_SLUG derivation in both places it appears; review/SKILL.md delegates fetch/classify/reply mechanics to greptile-triage.md and explicitly says to save to both per-project and global history; retro/SKILL.md reads only the path printed by gstack-retro-metrics, which resolves to the global state root ($_GH/greptile-history.md, explicitly never a projects/<slug> directory), matching the 'retro reads global only' design. The only gaps are indirections (ship delegates via sections/greptile.md, whose contents aren't shown) and an unshown entry format, which are unverifiable rather than contradictory."},"latency_ms":16870,"stop_reason":"end_turn","usage":{"input_tokens":3435,"output_tokens":1201},"cost_usd":0.0944}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly states 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review' — this contradicts the intended architecture that /review writes to BOTH paths, and contradicts greptile-triage.md which lists both per-project and global paths as write targets.","ship/SKILL.md (sections/greptile.md) saves only to the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md, types fix/fp/already-fixed) and never mentions the global path — this contradicts the intended dual-write and means /retro's global aggregation would miss all /ship-recorded entries.","/review and /ship are mutually inconsistent: /review writes global-only while /ship writes per-project-only, so neither implements the shared greptile-triage.md write mechanics that specify both paths.","ship/SKILL.md uses $REMOTE_SLUG in save paths but does not show its own derivation; it implicitly depends on greptile-triage.md's REMOTE_SLUG definition, while review/SKILL.md hardcodes the global path and sidesteps REMOTE_SLUG entirely — inconsistent handling of slug derivation across the two writers.","retro/SKILL.md reads 'the greptile-history.md path that GREPTILE_HISTORY printed' without specifying it is the global ~/.gstack/greptile-history.md; whether it reads the global path depends on an unshown preflight script, so the global-only read contract is not explicit in the file.","ship/SKILL.md inconsistently describes the fix-path save ('save per-project greptile-history (type: fix)') without a concrete path while the fp and already-fixed saves give the explicit path — minor internal inconsistency."],"score":2,"reasoning":"greptile-triage.md correctly defines both write paths and a consistent REMOTE_SLUG derivation, but the two consumers diverge from it and from each other: /review writes only to the global path (and explicitly disclaims per-project), while /ship writes only to the per-project path. This defeats both halves of the intended design — per-project suppressions aren't recorded by /review, and /ship's entries never reach the global file that /retro aggregates. The /retro read path is only implicitly global via an unshown preflight variable. The architecture is partially implemented in the shared reference but contradicted by both callers."},"latency_ms":17459,"stop_reason":"end_turn","usage":{"input_tokens":4057,"output_tokens":1298},"cost_usd":0.10547}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md: for VALID BUT ALREADY FIXED comments it says 'Save to global greptile-history (type: already-fixed)' only, whereas review/SKILL.md saves already-fixed to 'both per-project and global greptile-history' and the intended architecture says /review and /ship write to BOTH paths. This is a review/ship divergence and a deviation from the stated architecture.","ship/SKILL.md fix path uses the ambiguous phrasing 'save per-project/global greptile-history' (slash could read as 'or'), while other lines in the same file and in review say 'both per-project and global'; minor wording inconsistency."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both paths with an identical REMOTE_SLUG derivation in both places it appears; review and ship both delegate fetch/filter/classify/escalation and reply templates to greptile-triage.md; retro explicitly reads only the global ~/.gstack/greptile-history.md and never a per-project copy, and the entry types it counts (fix, fp, already-fixed) match the types ship writes. The one substantive inconsistency is that ship writes already-fixed entries to the global file only, while review writes them to both and the architecture mandates both. Otherwise the files agree."},"latency_ms":18284,"stop_reason":"end_turn","usage":{"input_tokens":4012,"output_tokens":1376},"cost_usd":0.10892}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references greptile-triage.md via a project-relative path (`.claude/skills/review/greptile-triage.md`) while ship/SKILL.md uses an absolute path (`~/.claude/skills/gstack/review/greptile-triage.md`); these may resolve to different locations","review/SKILL.md's VALID & ACTIONABLE flow explicitly saves history only for the false-positive branch; the fix branch (user chooses A) does not state that a `type: fix` entry is written to per-project/global history, whereas ship/SKILL.md does — this could skew /retro's signal ratio if /review fixes aren't recorded","review/SKILL.md never names the entry types (`fix`/`fp`/`already-fixed`) when saving, relying implicitly on greptile-triage.md, while ship/SKILL.md names them explicitly; retro depends on these exact type strings"],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md), with REMOTE_SLUG derived identically in both places it appears; /review and /ship both delegate fetch/classify/reply/write mechanics to greptile-triage.md and both state they save to both per-project and global history; /retro reads only the global file and counts the same type values (fix, fp, already-fixed) that /ship records. The only deviations are minor: inconsistent reference paths to greptile-triage.md between review and ship, and /review being less explicit than /ship about recording `fix`-type entries and type labels, which could cause under-reporting in /retro but does not contradict the architecture."},"latency_ms":19564,"stop_reason":"end_turn","usage":{"input_tokens":3701,"output_tokens":1178},"cost_usd":0.09591}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["Minor cosmetic only: /ship's summary header label reads '{already_fixed} already fixed' while /review and greptile-triage.md use 'Y fixed' — same data, slightly different wording; not a data-architecture inconsistency."],"score":5,"reasoning":"All files implement the intended architecture: greptile-triage.md defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md per-project and ~/.gstack/greptile-history.md global) and the shared line format; /review and /ship both instruct saving to both per-project and global history and delegate templates/mechanics to greptile-triage.md; /retro explicitly reads only the global aggregate and never a per-project copy. The entry format (date | repo | type | file-pattern | category) and the type vocabulary (fix, fp, already-fixed) match across review, triage, and retro. REMOTE_SLUG is derived only in greptile-triage.md, where both occurrences use the identical command chain, so there is no divergence across files."},"latency_ms":23924,"stop_reason":"end_turn","usage":{"input_tokens":4110,"output_tokens":1355},"cost_usd":0.10885}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `ship/sections/greptile.md` rather than referencing greptile-triage.md directly; greptile-triage.md claims /ship Step 10 references it, but the intermediate sections/greptile.md is not shown, so the ship→triage delegation chain cannot be verified from the excerpts.","greptile-triage.md hardcodes the global path as `$HOME/.gstack/greptile-history.md`, while bin/gstack-retro-metrics reads from `$_gstack_sr_root/greptile-history.md` (described as '~/.gstack by default'). These coincide under defaults, but if the state root is configurable the writer and reader could diverge."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths and writes to both; review/SKILL.md explicitly saves to both and delegates mechanics to greptile-triage.md; retro reads only the global path via gstack-retro-metrics, which explicitly excludes projects/<slug> directories; REMOTE_SLUG derivation is identical in both occurrences within greptile-triage.md and no other file redefines it. The only gaps are an unverifiable indirection layer for /ship and a hardcoded $HOME vs. configurable state-root path that match only by default."},"latency_ms":16159,"stop_reason":"end_turn","usage":{"input_tokens":3123,"output_tokens":1293},"cost_usd":0.09588}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["Cosmetic only: ship's header string says 'already fixed' where review/triage say 'fixed' (`+ N Greptile comments (X valid, Y fixed, Z FP)` vs `({already_fixed} already fixed ...)`) — same data, slightly different label","Cosmetic only: review/SKILL.md describes the history line as `date | repo | type | ...` while greptile-triage.md specifies `<owner/repo>`; same field, less precise wording in review"],"score":5,"reasoning":"All files implement the intended architecture coherently. greptile-triage.md is the single source of truth for path mechanics: it derives REMOTE_SLUG identically in both places it appears (remote-slug binary with fallback to git toplevel basename), defines the per-project path ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and the global ~/.gstack/greptile-history.md, and specifies the shared line format. /review and /ship never hardcode paths — both say 'save to both per-project and global greptile-history' and delegate reply templates and write mechanics to greptile-triage.md, with matching type vocabulary (fix, fp, already-fixed). /retro reads only the global path and explicitly says 'never a per-project copy', and its parsing (type counts fix/fp/already-fixed, date filtering) matches the write format. The only variances are minor wording differences in output labels, not architectural contradictions."},"latency_ms":17524,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1252},"cost_usd":0.10058}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"new","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files implement the intended two-path architecture consistently. greptile-triage.md defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) with an identical REMOTE_SLUG derivation in both places it appears, plus mkdir for the per-project dir. review/SKILL.md and ship/SKILL.md both delegate fetch/classify/reply mechanics to greptile-triage.md and both explicitly say to save to both per-project and global greptile-history for all three types (fix, fp, already-fixed). The entry line format (date | repo | type | file-pattern | category) and type vocabulary match across review, triage, and retro. retro/SKILL.md reads only the global ~/.gstack/greptile-history.md and explicitly states never a per-project copy, matching the aggregation design and the same type names/ratio computation. The only variance is cosmetic header wording ('fixed' vs 'already fixed' in the summary line between triage/review and ship), which does not affect the data architecture."},"latency_ms":17493,"stop_reason":"end_turn","usage":{"input_tokens":4110,"output_tokens":1342},"cost_usd":0.1082}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates Step 10 to `ship/sections/greptile.md` rather than directly to `review/greptile-triage.md`, while greptile-triage.md claims `/ship` (Step 10) references it directly. The intermediate `sections/greptile.md` is not shown, so the ship → greptile-triage.md delegation and dual-path write cannot be verified from the extract.","retro/SKILL.md parses entry types `fix`, `fp`, `already-fixed`, but the extract of greptile-triage.md does not show the actual line format written to the history files, so format compatibility between writer and reader is not verifiable here."],"score":4,"reasoning":"The core architecture holds: greptile-triage.md defines both paths (per-project `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` and global `~/.gstack/greptile-history.md`) with a single, repeated REMOTE_SLUG derivation; review/SKILL.md explicitly delegates to greptile-triage.md and saves to both; retro reads only the global path via gstack-retro-metrics, which anchors `_GH` to the state root and explicitly excludes projects/<slug>. No contradictions found — only an unverifiable indirection layer in ship and unshown entry format."},"latency_ms":15548,"stop_reason":"end_turn","usage":{"input_tokens":3123,"output_tokens":1203},"cost_usd":0.09138}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references greptile-triage.md via relative path `.claude/skills/review/greptile-triage.md` while ship/SKILL.md uses absolute `~/.claude/skills/gstack/review/greptile-triage.md` — different path forms (and the `gstack/` segment) could resolve to different locations","review/SKILL.md does not explicitly instruct saving a history entry (type: fix) when a VALID & ACTIONABLE comment is fixed, whereas ship/SKILL.md does — this could undercount `fix` entries in /retro's signal ratio","review/SKILL.md omits the entry type (fix/fp/already-fixed) in its 'save to both' instructions, while ship/SKILL.md specifies types; /retro depends on these types for parsing (mitigated if greptile-triage.md defines the format)"],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both per-project and global paths with an identical REMOTE_SLUG derivation in both occurrences; /review and /ship both delegate to greptile-triage.md and save to both per-project and global history; /retro reads only the global ~/.gstack/greptile-history.md and aggregates by type. Remaining issues are minor — a path-form discrepancy when referencing greptile-triage.md, and /review not explicitly recording fix-type entries or naming entry types — none contradict the intended two-path design."},"latency_ms":15132,"stop_reason":"end_turn","usage":{"input_tokens":3701,"output_tokens":1075},"cost_usd":0.09076}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `sections/greptile.md` rather than directly to `review/greptile-triage.md`; the content of sections/greptile.md is not shown, so the chain /ship -> sections/greptile.md -> greptile-triage.md (and writing to both paths) cannot be verified from the excerpts, even though greptile-triage.md claims /ship Step 10 references it.","greptile-triage.md hardcodes `$HOME/.gstack/...` for both write paths, while bin/gstack-retro-metrics reads from `$_gstack_sr_root` (described as '~/.gstack by default'). If the state root is ever overridden, writers and the retro reader could diverge; currently they coincide only by default."],"score":4,"reasoning":"The core architecture holds across files: greptile-triage.md writes to both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md); review/SKILL.md delegates fetch/classify/reply mechanics to greptile-triage.md and explicitly says to save to both per-project and global history; retro/SKILL.md reads only the path printed by gstack-retro-metrics, which is the global state-root file and explicitly never a projects/<slug> directory. REMOTE_SLUG derivation appears twice in greptile-triage.md with identical fallback chains and is not derived elsewhere, so it is consistent. The only gaps are the unverifiable indirection in /ship and the hardcoded $HOME vs configurable state root, neither of which is an outright contradiction."},"latency_ms":15612,"stop_reason":"end_turn","usage":{"input_tokens":3435,"output_tokens":1228},"cost_usd":0.09575}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it does NOT read review/greptile-triage.md and uses its own lightweight inline classification, but greptile-triage.md claims 'Both /review (Step 2.5) and /ship (Step 10) reference this document' — direct contradiction between the two files.","ship/SKILL.md writes Greptile outcomes to a third path, ~/.gstack/ship-greptile-history.md, which is neither the per-project path nor the global path defined in greptile-triage.md. This breaks the intended dual-write architecture.","Because /ship writes to ~/.gstack/ship-greptile-history.md instead of the global ~/.gstack/greptile-history.md, /retro (which reads only the global path) will silently miss all /ship Greptile outcomes, undermining cross-project aggregation.","/ship also does not write per-project history, so suppressions recorded during /ship will not be visible to /review's SUPPRESSED classification in later runs.","ship/SKILL.md references a `sections/greptile.md` file for Step 10 that is not part of the shared greptile-triage.md architecture, suggesting a parallel/duplicated implementation of fetch/classify logic and templates.","ship/SKILL.md fetches via `gh pr view --comments` rather than the two-endpoint gh api approach in greptile-triage.md, and bypasses the gstack-issue-guard sanitization step defined there."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: review delegates to triage, triage writes both per-project and global paths with a consistent REMOTE_SLUG derivation, and retro reads only the global path. However, ship/SKILL.md directly contradicts the architecture and the triage doc's own claim about /ship: it refuses to use greptile-triage.md, writes to an unrelated third path (ship-greptile-history.md), and therefore never feeds the global aggregate that /retro depends on. This is a substantive architectural inconsistency, not a cosmetic one."},"latency_ms":14746,"stop_reason":"end_turn","usage":{"input_tokens":3084,"output_tokens":1095},"cost_usd":0.08559}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md saves VALID BUT ALREADY FIXED entries to the global greptile-history only ('Save to global greptile-history (type: already-fixed)'), whereas review/SKILL.md saves the same classification 'to both per-project and global greptile-history' and the intended architecture says /review and /ship write to BOTH paths. ship's fix and fp branches correctly write to both, so the already-fixed branch is an internal inconsistency within ship as well as a mismatch with review."],"score":4,"reasoning":"The architecture is largely implemented consistently: greptile-triage.md derives REMOTE_SLUG identically in both locations, defines PROJECT_HISTORY under ~/.gstack/projects/$REMOTE_SLUG/ and lists both per-project and global paths; review and ship both delegate fetch/classify/reply/write mechanics to greptile-triage.md; retro reads only the global ~/.gstack/greptile-history.md and counts the same entry types (fix, fp, already-fixed) that ship emits. The single deviation is ship's already-fixed path writing only to the global file instead of both, which contradicts review's behavior and the stated 'write to BOTH' rule. Since retro only consumes the global file, the aggregation metric is unaffected, but per-project suppression history would diverge between /review and /ship runs."},"latency_ms":13524,"stop_reason":"end_turn","usage":{"input_tokens":3700,"output_tokens":1144},"cost_usd":0.0942}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the triage doc as `.claude/skills/review/greptile-triage.md` (relative, no `gstack/` segment) while ship/SKILL.md uses `~/.claude/skills/gstack/review/greptile-triage.md`; the triage doc's own REMOTE_SLUG fallback uses `~/.claude/skills/gstack/...`, so the review path is the odd one out","review/SKILL.md does not explicitly name the history entry types (fix/fp/already-fixed) when saving, whereas ship/SKILL.md does; it relies on greptile-triage.md to supply the type, which is acceptable but slightly less explicit than ship"],"score":4,"reasoning":"The data architecture is implemented consistently: greptile-triage.md is the single place that derives REMOTE_SLUG (identically in both occurrences) and defines both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths; /review and /ship both delegate to it and consistently state 'save to both per-project and global'; /retro reads only the global path, and the entry types it parses (fix, fp, already-fixed) match the types /ship writes. The only inconsistency is a reference-path discrepancy for greptile-triage.md between review and ship, which does not affect the history data architecture itself."},"latency_ms":15360,"stop_reason":"end_turn","usage":{"input_tokens":3389,"output_tokens":1276},"cost_usd":0.09769}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `ship/sections/greptile.md` rather than directly to `review/greptile-triage.md`; greptile-triage.md claims /ship Step 10 references it, but the extracted ship lines cannot confirm the indirection actually chains to greptile-triage.md (unverifiable from the provided excerpt, not a contradiction).","greptile-triage.md hardcodes `$HOME/.gstack/greptile-history.md` for the global write, while bin/gstack-retro-metrics reads from `$_gstack_sr_root/greptile-history.md` ('~/.gstack by default'). If the state root is ever overridden, the writer and reader could diverge; they match only under the default configuration."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md writes to both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md), with the REMOTE_SLUG derivation expression identical in both occurrences. review/SKILL.md explicitly delegates fetch/classify/reply mechanics to greptile-triage.md and states 'Save to both per-project and global greptile-history'. retro/SKILL.md reads only the path emitted by gstack-retro-metrics, which resolves to the state-root (global) file and explicitly never a projects/<slug> directory, matching the intent that /retro aggregates globally. The only soft spots are the extra indirection layer in /ship (sections/greptile.md) that can't be verified here, and the hardcoded $HOME/.gstack vs. configurable state root asymmetry between writer and reader. Neither is contradictory under default settings."},"latency_ms":18830,"stop_reason":"end_turn","usage":{"input_tokens":3435,"output_tokens":1339},"cost_usd":0.1013}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["Minor cosmetic variance in the summary header: review/SKILL.md and greptile-triage.md use '(X valid, Y fixed, Z FP)' while ship's greptile section uses '({already_fixed} already fixed, ...)' — same data, slightly different wording.","review/SKILL.md duplicates the greptile-history line format ('date | repo | type | file pattern | category') instead of purely delegating to greptile-triage.md; it currently matches the canonical format but is a drift risk.","review/SKILL.md mentions a SUPPRESSED classification that is not visible in the ship section's classification set or the extracted triage lines (may be elided from the excerpt)."],"score":5,"reasoning":"All files agree on the two-path architecture. greptile-triage.md is the single place defining both paths, the REMOTE_SLUG derivation (identical in both occurrences), and the entry format. /review and /ship both explicitly save to 'both per-project and global' history for fix/fp/already-fixed and defer templates and mechanics to greptile-triage.md. /retro reads only the global ~/.gstack/greptile-history.md (explicitly 'never a per-project copy') and counts exactly the three types (fix, fp, already-fixed) that the writers emit. The only differences are wording-level, not architectural."},"latency_ms":19545,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1370},"cost_usd":0.10648}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md: the VALID BUT ALREADY FIXED branch says 'Save to global greptile-history (type: already-fixed)' only, whereas review/SKILL.md saves already-fixed to both per-project and global, and the intended architecture says /review and /ship write to BOTH paths. This is a per-project write omission in /ship for the already-fixed type.","Minor: ship's fix branch phrases it as 'save per-project/global greptile-history' while the fp branch says 'save to both per-project and global' — same meaning but inconsistent wording within the same file."],"score":4,"reasoning":"Nearly all elements align with the intended architecture: greptile-triage.md defines both paths and derives REMOTE_SLUG identically in both places; /review and /ship both delegate fetch/classify/reply templates to greptile-triage.md; /review saves to both paths for all types; /ship saves fix and fp to both paths; /retro reads only the global aggregate and counts exactly the types (fix, fp, already-fixed) that /ship writes. The single substantive deviation is /ship's already-fixed branch writing only to global, skipping the per-project copy, which diverges from /review's handling of the same case and from the stated 'write to both' rule."},"latency_ms":16134,"stop_reason":"end_turn","usage":{"input_tokens":4012,"output_tokens":1222},"cost_usd":0.10122}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files agree with the intended architecture. greptile-triage.md is the single definition point for both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md per-project, ~/.gstack/greptile-history.md global), the REMOTE_SLUG derivation, the mkdir, and the entry format. review/SKILL.md and ship/SKILL.md both delegate fetch/classify/reply/write mechanics to greptile-triage.md and consistently say 'save to both per-project and global' with types fix/fp/already-fixed. retro/SKILL.md explicitly reads only the global aggregate and never a per-project copy, and its type vocabulary (fix, fp, already-fixed) and pipe-delimited date|repo|type|pattern|category parsing match the format defined in triage and echoed in review. The summary header format '+ N Greptile comments (X valid, Y fixed, Z FP)' is identical across review, ship, and triage. REMOTE_SLUG is derived only in greptile-triage.md and both occurrences there are identical. The only non-issue is review/SKILL.md restating the entry format inline (a mild drift risk, but currently matching), which does not constitute an inconsistency."},"latency_ms":15845,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1121},"cost_usd":0.09403}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md VALID BUT ALREADY FIXED branch says 'Save to global greptile-history (type: already-fixed)' only, omitting the per-project path. This contradicts the intended architecture (both /review and /ship write to BOTH paths) and diverges from ship's own fix/fp branches ('save to both per-project and global') and from review/SKILL.md, which saves already-fixed to both.","Minor: greptile-triage.md defines a PROJECT_HISTORY variable but no corresponding GLOBAL_HISTORY variable, so the global write path is only described in prose rather than as a shared, reusable variable (slightly weaker delegation of write mechanics).","Minor: review/SKILL.md excerpt does not name the entry types (fix/fp/already-fixed) that /retro depends on for counting; ship does. If review relies on triage.md to supply types this is fine, but it is not explicit in the shown lines."],"score":3,"reasoning":"Most of the architecture is implemented consistently: both /review and /ship delegate fetch/classify/reply/write mechanics to greptile-triage.md; triage.md declares both the per-project and global paths and uses an identical REMOTE_SLUG derivation in both places; /retro explicitly reads only the global aggregate and counts the same types (fix, fp, already-fixed) that /ship records. The one real contradiction is ship's already-fixed case writing only to the global file, which breaks the 'write to BOTH' rule and would leave per-project suppression history incomplete relative to /review's behavior."},"latency_ms":18947,"stop_reason":"end_turn","usage":{"input_tokens":3700,"output_tokens":1572},"cost_usd":0.1156}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"new","sample":0,"status":"ok","value":{"consistent":false,"issues":["greptile-triage.md is internally inconsistent on the per-project path: the PROJECT_HISTORY variable and mkdir use ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md (correct), but the later documented path list says ~/.gstack/$REMOTE_SLUG/greptile-history.md (missing the 'projects/' segment).","greptile-triage.md documents the global aggregate path as ~/.gstack/history/greptile.md, which contradicts the intended architecture (~/.gstack/greptile-history.md) and the path /retro actually reads (~/.gstack/greptile-history.md). If writes follow the documented path, /retro would never see any entries and the Greptile signal metric would silently be skipped.","greptile-triage.md defines a PROJECT_HISTORY variable but no corresponding GLOBAL_HISTORY variable in the extracted lines, so the global write mechanics that /review and /ship delegate to are underspecified/ambiguous.","Minor: the path used to reference the triage doc differs between skills — review/SKILL.md uses a relative '.claude/skills/review/greptile-triage.md' while ship/SKILL.md uses absolute '~/.claude/skills/gstack/ship/sections/greptile.md' and a bare 'greptile-triage.md' — not a data-path issue but inconsistent referencing.","REMOTE_SLUG derivation is consistent (identical in both occurrences within greptile-triage.md); review/SKILL.md and ship/SKILL.md correctly delegate to greptile-triage.md and say to save to both per-project and global history, so the high-level intent is consistent even though the concrete paths are not."],"score":2,"reasoning":"The high-level design (review/ship write both, delegate to triage doc; retro reads global only) is consistent across the skill files, and REMOTE_SLUG derivation matches. However, the single source of truth for write mechanics — greptile-triage.md — contradicts itself on the per-project path and specifies a global path (~/.gstack/history/greptile.md) that neither matches the intended architecture nor the path /retro reads (~/.gstack/greptile-history.md). This is a functional break in the write→read data flow, not just a cosmetic inconsistency, so the score is low."},"latency_ms":18372,"stop_reason":"end_turn","usage":{"input_tokens":3008,"output_tokens":1461},"cost_usd":0.10313}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md states 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review' — this directly contradicts the intended architecture (both paths) and greptile-triage.md, which it delegates to and which lists both the per-project and global paths as write targets.","ship/SKILL.md specifies only the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md, 'save per-project greptile-history') for fix/fp/already-fixed entries and never mentions the global path; if taken literally, /ship entries would never reach the global aggregate that /retro reads, breaking retro aggregation.","The two consumers (review and ship) each name a single, different path (review → global only, ship → per-project only) rather than consistently delegating write mechanics to greptile-triage.md, so the 'write to BOTH' rule is not expressed anywhere except in the shared triage doc.","retro/SKILL.md reads whatever path the GREPTILE_HISTORY preamble line prints; the extracted lines do not show that this resolves to the global path (~/.gstack/greptile-history.md), so retro's dependency on the global aggregate cannot be verified from these files.","ship/SKILL.md uses $REMOTE_SLUG in paths without deriving it, implicitly depending on greptile-triage.md's derivation (which is itself duplicated twice in that file); acceptable but fragile."],"score":2,"reasoning":"greptile-triage.md correctly describes dual-path writes and a consistent REMOTE_SLUG derivation, but review/SKILL.md explicitly asserts global-only writes and that per-project history is unused — a direct contradiction with the shared doc and the intended design — while ship/SKILL.md only ever names the per-project path. The result is that the two writers disagree with each other and with the shared reference about where history goes, which risks /retro's global aggregation missing /ship data and suppressions missing /review data."},"latency_ms":17504,"stop_reason":"end_turn","usage":{"input_tokens":3745,"output_tokens":1223},"cost_usd":0.0986}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files agree with the intended architecture. greptile-triage.md is the single source of truth: it derives REMOTE_SLUG once, defines GREPTILE_PROJECT_LOG (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and GREPTILE_GLOBAL_LOG (~/.gstack/greptile-history.md), creates the project dir, and instructs appending to BOTH. review/SKILL.md and ship/SKILL.md both delegate to greptile-triage.md and reference the same two variable names for writes, so slug derivation is not duplicated and cannot drift. retro/SKILL.md reads only $HOME/.gstack/greptile-history.md, matches the GREPTILE_GLOBAL_LOG path exactly, and explicitly forbids reading per-project files, consistent with triage.md's comment that the global log is 'read by /retro'. Suppressions reading the per-project log only is also consistent with the stated purpose split. The only non-issue observation is that ship/SKILL.md additionally references ship/sections/greptile.md as a wrapper, but it still routes to greptile-triage.md for mechanics, so no contradiction."},"latency_ms":12195,"stop_reason":"end_turn","usage":{"input_tokens":1352,"output_tokens":948},"cost_usd":0.06092}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates Greptile handling to `ship/sections/greptile.md` (not shown) rather than referencing `greptile-triage.md` directly; greptile-triage.md's claim that /ship references it can only hold via that intermediate file, which cannot be verified from the excerpts provided."],"score":5,"reasoning":"All shown files agree with the intended architecture. greptile-triage.md is the single source for write mechanics and defines both paths (per-project `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` and global `~/.gstack/greptile-history.md`); review/SKILL.md delegates to it and explicitly says 'Save to both per-project and global'. REMOTE_SLUG derivation appears only in greptile-triage.md and both occurrences are byte-identical. retro/SKILL.md reads only the path printed by gstack-retro-metrics, which resolves to `$_GH/greptile-history.md` with `_GH` = state root (~/.gstack) and an explicit comment that it is never a projects/<slug> directory — i.e., global only, matching the aggregation intent. The entry types retro counts (fix/fp/already-fixed) align with the triage classifications (VALID & ACTIONABLE, FALSE POSITIVE, VALID BUT ALREADY FIXED). No contradictions; the only gap is the unshown ship/sections/greptile.md indirection."},"latency_ms":19161,"stop_reason":"end_turn","usage":{"input_tokens":3123,"output_tokens":1436},"cost_usd":0.10303}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it 'does not read review/greptile-triage.md', directly contradicting greptile-triage.md which says 'Both /review (Step 2.5) and /ship (Step 10) reference this document' and the intended architecture that /ship delegates write mechanics to greptile-triage.md.","ship/SKILL.md writes Greptile outcomes to a third, undefined path `~/.gstack/ship-greptile-history.md` instead of the per-project (~/.gstack/projects/{slug}/greptile-history.md) and global (~/.gstack/greptile-history.md) paths; it writes to neither intended path.","Because /ship writes to `ship-greptile-history.md`, /retro (which reads only the global `~/.gstack/greptile-history.md`) will never see /ship's Greptile outcomes, breaking the retro aggregation contract and making the signal-ratio metric incomplete.","ship/SKILL.md references a `sections/greptile.md` file for Step 10 that is not part of the described architecture, while greptile-triage.md claims to be the shared reference for ship Step 10 — two different source-of-truth documents are implied.","ship/SKILL.md does not use REMOTE_SLUG at all (it uses a flat global-ish path), so per-project suppression history cannot be populated by /ship, undermining the per-project suppression path's purpose."],"score":2,"reasoning":"review/SKILL.md, review/greptile-triage.md, and retro/SKILL.md are mutually consistent: review delegates to greptile-triage.md, which defines both paths with an identical REMOTE_SLUG derivation in both occurrences, and retro reads only the global aggregate. However, ship/SKILL.md contradicts the architecture on every axis: it disclaims the shared triage doc that itself names /ship as a consumer, writes to a completely different file (`ship-greptile-history.md`) rather than the per-project and global paths, and thereby silently disconnects /ship from /retro's aggregation. This is a direct cross-file contradiction, not a minor drift, so the set is not consistent."},"latency_ms":13660,"stop_reason":"end_turn","usage":{"input_tokens":3396,"output_tokens":1064},"cost_usd":0.08716}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md says 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review' — this directly contradicts the intended architecture (review writes to BOTH paths) and contradicts greptile-triage.md, which defines PROJECT_HISTORY and lists both per-project and global paths as write targets.","review's global-only write means per-project suppressions (the stated purpose of the per-project path) never get populated by /review, so the SUPPRESSED classification in Step 2.5 can only draw on /ship-written entries — a functional gap, not just a wording mismatch.","ship/SKILL.md explicitly names only the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) for fix/fp/already-fixed saves and never mentions the global aggregate path; unless the 'save' step is understood to delegate fully to greptile-triage.md's two-path write, /ship entries would be missing from the global file /retro reads.","review and ship are mutually inconsistent with each other: review writes global-only, ship writes per-project-only, while the shared triage doc says both — three different answers to the same question.","ship/SKILL.md uses $REMOTE_SLUG without deriving it; it relies on greptile-triage.md's derivation, but Step 10 dispatches triage to a report-only subagent, so the variable may not exist in the main context when the save step runs.","retro/SKILL.md reads whatever path GREPTILE_HISTORY printed rather than explicitly naming the global path; this is likely correct but is not verifiable from the excerpt and is weaker than an explicit reference."],"score":2,"reasoning":"greptile-triage.md correctly encodes the dual-path design with a consistent REMOTE_SLUG derivation, but the two consumers diverge: /review explicitly declares global-only (and says per-project is unused), while /ship explicitly names only per-project. This is a direct contradiction with the intended architecture and between the files themselves, breaking both per-project suppression for /review and (potentially) global aggregation for /retro from /ship entries. Retro's read side is plausibly fine but under-specified."},"latency_ms":18451,"stop_reason":"end_turn","usage":{"input_tokens":3745,"output_tokens":1317},"cost_usd":0.1033}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["Global path contradiction: greptile-triage.md documents the global aggregate as `~/.gstack/history/greptile.md`, but retro/SKILL.md reads `~/.gstack/greptile-history.md` (the intended path). If triage writes where it says, /retro will never find any Greptile history.","Per-project path is internally inconsistent inside greptile-triage.md: the PROJECT_HISTORY variable and mkdir use `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` (correct), but the prose summary lists `~/.gstack/$REMOTE_SLUG/greptile-history.md` (missing `projects/`).","greptile-triage.md defines only PROJECT_HISTORY; no GLOBAL_HISTORY variable or mkdir for the global path appears in the extracted write mechanics, so the 'write to both' step that review/SKILL.md delegates to is not clearly implemented for the global path.","ship/SKILL.md delegates to `sections/greptile.md` (not shown) while also citing greptile-triage.md templates; greptile-triage.md claims /ship Step 10 references it directly. The delegation chain is indirect and cannot be verified from the provided content.","retro/SKILL.md's note says to include the greptile field only if `~/.gstack/greptile-history.md` exists — consistent with its own read path, but dependent on the mismatched write path in triage.md."],"score":2,"reasoning":"review/SKILL.md correctly delegates 'save to both per-project and global' to greptile-triage.md, REMOTE_SLUG derivation is identical in both occurrences, and the output header format matches between review and triage. However, greptile-triage.md contradicts itself on the per-project path and documents a global path (`~/.gstack/history/greptile.md`) that does not match what /retro reads (`~/.gstack/greptile-history.md`). This breaks the core intended data flow (write global → retro aggregates), so the files are not consistent."},"latency_ms":18064,"stop_reason":"end_turn","usage":{"input_tokens":2696,"output_tokens":1669},"cost_usd":0.11041}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md VALID BUT ALREADY FIXED branch says 'Save to global greptile-history (type: already-fixed)' only, while the intended architecture (and review/SKILL.md's equivalent branch, plus ship's own fix/fp branches) write to BOTH per-project and global paths. This means /ship's already-fixed entries never reach the per-project suppression file, diverging from /review for the same classification type."],"score":4,"reasoning":"greptile-triage.md is the single source of truth: it defines REMOTE_SLUG identically in both places, defines both the per-project and global paths, and both /review and /ship delegate fetch/classify/reply/write mechanics to it. /retro correctly reads only the global aggregate and explicitly excludes per-project copies, and its type taxonomy (fix/fp/already-fixed) matches the types written by /ship. The only deviation is /ship's already-fixed branch writing to global only instead of both paths, which contradicts both the stated architecture and /review's handling of the same case. Impact is limited (retro still works since it only needs global), but it is a genuine cross-file inconsistency."},"latency_ms":17562,"stop_reason":"end_turn","usage":{"input_tokens":3700,"output_tokens":1357},"cost_usd":0.10485}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it 'does not read review/greptile-triage.md' and uses its own inline classification, directly contradicting greptile-triage.md which says 'Both /review (Step 2.5) and /ship (Step 10) reference this document' and violating the intended architecture that /ship delegates write mechanics to greptile-triage.md.","ship/SKILL.md records Greptile outcomes to a third path, `~/.gstack/ship-greptile-history.md`, which is neither the per-project path (`~/.gstack/projects/{slug}/greptile-history.md`) nor the global path (`~/.gstack/greptile-history.md`). This means /ship writes to neither architecturally defined location.","Because /ship does not write to the global `~/.gstack/greptile-history.md`, /retro (which reads only the global path) will silently omit all /ship Greptile outcomes from its signal-ratio aggregation; likewise suppressions from /ship never reach the per-project file.","ship/SKILL.md points Step 10 at a different reference file (`sections/greptile.md`) than the shared `review/greptile-triage.md`, creating two competing sources of truth for triage/write mechanics.","ship/SKILL.md does not derive REMOTE_SLUG at all (it writes a flat path), so slug derivation consistency cannot hold for /ship; review and triage are consistent with each other on this."],"score":2,"reasoning":"review/SKILL.md, review/greptile-triage.md, and retro/SKILL.md are mutually consistent with the intended architecture: review delegates to triage, triage writes both per-project and global paths with a single consistent REMOTE_SLUG derivation, and retro reads only the global aggregate. However, ship/SKILL.md contradicts the architecture on nearly every point — it disclaims the shared triage doc (which itself claims /ship uses it), invents a third history path, and never writes to the per-project or global files, which breaks /retro's cross-project aggregation. One of four files being this contradictory warrants a low score."},"latency_ms":20789,"stop_reason":"end_turn","usage":{"input_tokens":3084,"output_tokens":1302},"cost_usd":0.09594}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md's VALID & ACTIONABLE path (user chooses A: fix) only says to reply with the Fix template and does not explicitly say to save to per-project/global greptile-history, whereas ship/SKILL.md explicitly saves (type: fix). Since /retro counts `fix` entries for the signal ratio, /review-originated fixes may be under-recorded unless greptile-triage.md's write mechanics cover it implicitly.","Path to the shared triage doc differs: review/SKILL.md reads `.claude/skills/review/greptile-triage.md` (project-relative, no `gstack` segment) while ship/SKILL.md reads `~/.claude/skills/gstack/review/greptile-triage.md` (home-absolute). Likely a template/install-location difference, but it is inconsistent as written.","greptile-triage.md defines a `PROJECT_HISTORY` variable for the per-project path but shows no equivalent variable for the global path, though the global path is listed as a write target; the global write mechanics are less explicit than the per-project ones."],"score":4,"reasoning":"The core architecture holds: both /review and /ship write to both per-project and global paths and delegate to greptile-triage.md; /retro reads only the global ~/.gstack/greptile-history.md; REMOTE_SLUG derivation is identical in both occurrences in greptile-triage.md and is not re-derived elsewhere; entry type names (fix, fp, already-fixed) match between /ship writes and /retro reads. Deviations are minor: review's fix path doesn't explicitly log to history, and the triage doc is referenced via two different paths."},"latency_ms":18004,"stop_reason":"end_turn","usage":{"input_tokens":3389,"output_tokens":1401},"cost_usd":0.10394}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the triage doc via a relative path (`.claude/skills/review/greptile-triage.md`) while ship/SKILL.md uses an absolute path (`~/.claude/skills/gstack/review/greptile-triage.md`); if the review path doesn't resolve, the write mechanics for both history files would never be loaded","review/SKILL.md's VALID & ACTIONABLE flow says to reply with the Fix template when the user chooses A but does not explicitly say to save a `fix` entry to per-project/global history, whereas ship/SKILL.md does (type: fix); since /retro counts `fix` entries, /review-originated fixes may be under-recorded","review/SKILL.md never names the entry types (`fix`, `fp`, `already-fixed`) that ship/SKILL.md and retro/SKILL.md depend on, leaving the type field implicit (presumably defined in greptile-triage.md)"],"score":4,"reasoning":"The core data architecture holds across all files: greptile-triage.md defines both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths with an identical REMOTE_SLUG derivation in both occurrences; /review and /ship both delegate to greptile-triage.md and instruct saving to both per-project and global history; /retro reads only the global path. The only gaps are a divergent reference path to the triage doc in /review versus /ship, and /review's fix flow omitting an explicit history save that /ship includes — minor omissions rather than contradictions."},"latency_ms":17165,"stop_reason":"end_turn","usage":{"input_tokens":3389,"output_tokens":1318},"cost_usd":0.09979}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md for VALID BUT ALREADY FIXED comments says 'Save to global greptile-history (type: already-fixed)' only, whereas review/SKILL.md saves already-fixed to both per-project and global, and the intended architecture says /ship writes to BOTH paths. This omits the per-project write for already-fixed entries in /ship, which affects per-project suppression tracking."],"score":4,"reasoning":"The architecture is largely implemented consistently: greptile-triage.md defines both paths with identical REMOTE_SLUG derivation in both occurrences; /review and /ship both delegate fetch/classify/reply/write mechanics to greptile-triage.md; fix and fp types in /ship write to both paths; /retro reads only the global path and explicitly rejects per-project copies. The single deviation is /ship's already-fixed handling, which writes only to the global history rather than both, diverging from /review and from the stated architecture. This is a minor but real inconsistency rather than a contradiction."},"latency_ms":10988,"stop_reason":"end_turn","usage":{"input_tokens":4012,"output_tokens":762},"cost_usd":0.07822}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the shared doc via a relative path (`.claude/skills/review/greptile-triage.md`) while ship/SKILL.md uses an absolute path (`~/.claude/skills/gstack/review/greptile-triage.md`); the two resolve to different locations unless run from a specific CWD","review/SKILL.md explicitly saves to per-project/global history for FALSE POSITIVE and ALREADY FIXED outcomes but omits the save instruction for the Fix (user chooses A) path, whereas ship/SKILL.md saves `type: fix`; since /retro's signal ratio counts `fix` entries, /review fixes may be under-reported unless greptile-triage.md handles it implicitly","review/SKILL.md never names the entry types (`fix`, `fp`, `already-fixed`) that ship/SKILL.md and retro/SKILL.md rely on — it depends entirely on greptile-triage.md for the record format"],"score":4,"reasoning":"The core data architecture is implemented consistently: greptile-triage.md is the single owner of REMOTE_SLUG derivation (identical in both occurrences), the per-project path, and the dual-write to per-project + global; /ship and /review both delegate to it and both state writes go to both locations; /retro reads only the global ~/.gstack/greptile-history.md and aggregates by type. No contradictions in paths or read/write roles. The deductions are for a path-reference mismatch to the shared doc between /review and /ship and for /review not explicitly logging the `fix` outcome, which could skew the retro metric."},"latency_ms":17650,"stop_reason":"end_turn","usage":{"input_tokens":3389,"output_tokens":1428},"cost_usd":0.10529}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["greptile-triage.md documents the global aggregate path as `~/.gstack/history/greptile.md`, but retro/SKILL.md reads from `~/.gstack/greptile-history.md` (the intended global path). If writes follow the triage doc, /retro will never find the data — the retro aggregation pipeline is broken.","greptile-triage.md is internally inconsistent on the per-project path: PROJECT_HISTORY and mkdir use `~/.gstack/projects/$REMOTE_SLUG/greptile-history.md` (correct), but the summary list later says `~/.gstack/$REMOTE_SLUG/greptile-history.md` (missing the `projects/` segment).","greptile-triage.md defines PROJECT_HISTORY but no corresponding GLOBAL_HISTORY variable/write step appears in the extracted lines, even though /review and /ship both delegate 'save to both per-project and global greptile-history' to it. The global write mechanics are at best under-specified and at worst pointed at the wrong file.","Minor: greptile-triage.md says /ship references it directly at Step 10, while ship/SKILL.md actually routes through `sections/greptile.md` which then references greptile-triage.md — an extra indirection layer not reflected in the triage doc."],"score":2,"reasoning":"REMOTE_SLUG derivation is identical across both occurrences, /review and /ship correctly delegate write mechanics to greptile-triage.md, and /retro reads only the global path as intended. However, greptile-triage.md — the single source of truth for write paths — contradicts both itself (two different per-project paths) and /retro (global path `~/.gstack/history/greptile.md` vs. `~/.gstack/greptile-history.md`). Since /retro's Greptile metric depends entirely on the global file matching, this is a functional contradiction in the data architecture, not just a cosmetic one."},"latency_ms":15829,"stop_reason":"end_turn","usage":{"input_tokens":2696,"output_tokens":1368},"cost_usd":0.09536}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it 'does not read review/greptile-triage.md', directly contradicting greptile-triage.md which says 'Both /review (Step 2.5) and /ship (Step 10) reference this document' and violating the intended delegation of write mechanics to greptile-triage.md.","ship/SKILL.md writes Greptile outcomes to a third, undocumented path `~/.gstack/ship-greptile-history.md` instead of the per-project `~/.gstack/projects/{slug}/greptile-history.md` and global `~/.gstack/greptile-history.md` paths; it writes to neither of the two intended paths.","Because /ship writes to `ship-greptile-history.md`, /retro (which reads only the global `~/.gstack/greptile-history.md`) will never see /ship's Greptile outcomes, breaking the retro aggregation contract; likewise per-project suppressions from /ship are lost.","ship/SKILL.md's reference table points Step 10 to `sections/greptile.md`, a file not otherwise referenced, adding a third inconsistent source of truth for Greptile handling.","ship/SKILL.md never derives REMOTE_SLUG, so it cannot write per-project history even if it intended to; only greptile-triage.md derives it (consistently in its two occurrences)."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: review delegates to the triage doc, the triage doc defines a single REMOTE_SLUG derivation and both per-project and global paths, and retro reads only the global aggregate. However, ship/SKILL.md contradicts the architecture on every point: it refuses to use greptile-triage.md (while that file claims /ship uses it), writes to a novel `ship-greptile-history.md` path rather than the two intended paths, and therefore its data is invisible to /retro. This is a direct contradiction between files, not merely an omission."},"latency_ms":12835,"stop_reason":"end_turn","usage":{"input_tokens":3084,"output_tokens":1088},"cost_usd":0.08524}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly states 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review', directly contradicting the intended architecture (write to BOTH) and greptile-triage.md, which lists both per-project and global paths as write targets.","ship/SKILL.md only ever references the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) for fp, already-fixed, and fix entries, with no mention of the global path — so /ship appears to write per-project only, while /review writes global only, and greptile-triage.md says both. Three files, three different answers.","ship/SKILL.md uses $REMOTE_SLUG in save paths but the extracted lines show no REMOTE_SLUG derivation in ship; it implicitly depends on greptile-triage.md's derivation without stating so, and /review doesn't use REMOTE_SLUG at all because it skips per-project entirely.","retro/SKILL.md reads 'the greptile-history.md path that GREPTILE_HISTORY printed' without stating it is the global path; given /review writes only global and /ship writes only per-project, retro's aggregation will miss /ship data if it reads global, or miss /review data if it reads per-project — the cross-skill data flow is broken either way.","Write mechanics are not actually delegated to greptile-triage.md in /review and /ship as intended: both skills hardcode their own (differing) path choices rather than deferring to the shared reference's 'write to both' instruction."],"score":2,"reasoning":"The shared reference (greptile-triage.md) correctly describes both paths and has a consistent REMOTE_SLUG derivation, but the two consumers contradict it and each other: /review explicitly writes global-only and disavows per-project, while /ship writes per-project-only with no global write. This breaks the intended architecture where both skills write to both paths and /retro aggregates from the global file — under the current text, /retro's global aggregation would miss all /ship suppressions/fixes, and /review's suppression lookup (which per the architecture relies on per-project history) would have no data. The only fully consistent element is the REMOTE_SLUG derivation within greptile-triage.md."},"latency_ms":18309,"stop_reason":"end_turn","usage":{"input_tokens":4057,"output_tokens":1328},"cost_usd":0.10697}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `ship/sections/greptile.md` rather than referencing `review/greptile-triage.md` directly, while greptile-triage.md claims `/ship (Step 10)` references it. The extracted lines cannot confirm that sections/greptile.md in turn delegates to greptile-triage.md and writes to both paths — this is an unverified indirection, not a demonstrated contradiction.","greptile-triage.md excerpt does not show the history entry format, so the retro's expected entry types (`fix`, `fp`, `already-fixed`) cannot be fully confirmed against what the writers emit; the mapping to VALID & ACTIONABLE / VALID BUT ALREADY FIXED / FALSE POSITIVE is plausible but not shown.","REMOTE_SLUG derivation's first fallback `browse/bin/remote-slug` is a relative path that only works when cwd is the gstack root, but it falls through to the absolute path so it is harmless; both occurrences in greptile-triage.md are identical."],"score":4,"reasoning":"The architecture is implemented consistently across the visible files: greptile-triage.md defines both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths with identical REMOTE_SLUG derivation in both places; review/SKILL.md delegates fetch/classify/reply mechanics to greptile-triage.md and explicitly saves to both per-project and global history; retro reads only the global path via gstack-retro-metrics, which anchors to the state root and explicitly never a projects/<slug> directory, and retro/SKILL.md reads whatever path that helper prints. The only gap is that /ship's write path goes through an intermediate sections/greptile.md not included in the excerpt, so its delegation to greptile-triage.md and dual-path write cannot be confirmed from the provided lines."},"latency_ms":17681,"stop_reason":"end_turn","usage":{"input_tokens":3123,"output_tokens":1354},"cost_usd":0.09893}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["greptile-triage.md is internally inconsistent on the per-project path: the executable line sets PROJECT_HISTORY=\"$HOME/.gstack/projects/$REMOTE_SLUG/greptile-history.md\" (and mkdir -p the projects/ dir), but the documentation bullet later says `~/.gstack/$REMOTE_SLUG/greptile-history.md` (missing the `projects/` segment).","Global path contradiction: greptile-triage.md documents the global aggregate as `~/.gstack/history/greptile.md`, but retro/SKILL.md reads `~/.gstack/greptile-history.md` (which matches the intended architecture). If writes follow the triage doc, /retro will never see any Greptile history and the signal metric silently disappears.","greptile-triage.md shows no explicit GLOBAL_HISTORY variable or write mechanics for the global path (only PROJECT_HISTORY is defined), even though review/SKILL.md and ship/SKILL.md delegate the 'save to both per-project and global' mechanics to it — the global write is effectively unspecified except by the incorrect doc bullet.","Minor: skill file path references use different conventions — review/SKILL.md references `.claude/skills/review/greptile-triage.md` (relative) while ship/SKILL.md and triage's remote-slug fallback use `~/.claude/skills/gstack/...` (home-anchored, with a `gstack/` segment)."],"score":2,"reasoning":"REMOTE_SLUG derivation is consistent (identical in both occurrences), /review and /ship correctly delegate to greptile-triage.md and state writes go to both paths, and /retro reads the correct global path. However, greptile-triage.md — the single source of truth for write mechanics — contradicts both itself (per-project path with vs. without `projects/`) and /retro (global path `~/.gstack/history/greptile.md` vs `~/.gstack/greptile-history.md`). This is a genuine data-flow break between writer and reader, not just cosmetic drift."},"latency_ms":17948,"stop_reason":"end_turn","usage":{"input_tokens":2696,"output_tokens":1585},"cost_usd":0.10621}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":["Minor wording difference in the Greptile summary header: review/greptile-triage use '(X valid, Y fixed, Z FP)' while ship uses '({valid_actionable} valid, {already_fixed} already fixed, {false_positive} FP)' — semantically identical, cosmetically different.","review/SKILL.md describes the history line format as 'date | repo | type | file pattern | category' while greptile-triage.md specifies '<YYYY-MM-DD> | <owner/repo> | <type> | <file-pattern> | <category>' — compatible but less precise in review.","retro/SKILL.md depends on a GREPTILE_HISTORY preamble variable whose derivation is not shown in the extracted lines, though it explicitly names the global path so the intent is unambiguous."],"score":5,"reasoning":"All four files implement the intended architecture coherently. greptile-triage.md is the single source of truth: it defines both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths, the REMOTE_SLUG derivation (identical in both occurrences), and the entry format. Both /review (Step 2.5) and /ship (Step 10) explicitly delegate fetch/filter/classify/escalation and reply templates to greptile-triage.md, and both state that entries are saved to both per-project and global history with types fix/fp/already-fixed. /retro reads only the global aggregate, explicitly stating 'never a per-project copy', and computes signal ratio from the same three types defined elsewhere. No contradictions were found; only trivial cosmetic wording differences."},"latency_ms":17153,"stop_reason":"end_turn","usage":{"input_tokens":4110,"output_tokens":1278},"cost_usd":0.105}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md states 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review' — this directly contradicts the intended architecture (both /review and /ship write to BOTH paths) and contradicts greptile-triage.md, which it delegates to and which writes to both the per-project and global files.","review/SKILL.md's global-only claim is also inconsistent with ship/SKILL.md, which explicitly saves to the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md); the two callers of the same shared triage doc now describe different storage behavior.","ship/SKILL.md's inline save instructions mention only the per-project path (and 'save per-project greptile-history (type: fix)') without acknowledging the global write; this is tolerable only because the mechanics are delegated to greptile-triage.md, but it is not self-consistent with the dual-write model as written.","ship/SKILL.md uses $REMOTE_SLUG without deriving it; it relies implicitly on the derivation in greptile-triage.md. REMOTE_SLUG derivation itself is consistent (identical in both occurrences in greptile-triage.md).","retro/SKILL.md reads 'the path GREPTILE_HISTORY printed' rather than naming the global path explicitly; this is likely correct (preamble emits the global path) but is not verifiable from the provided excerpts."],"score":2,"reasoning":"greptile-triage.md and ship/SKILL.md are broadly aligned with the dual-path design (triage writes both; ship names per-project and delegates). However, review/SKILL.md explicitly asserts global-only storage and says per-project history is not used by /review, which is a direct contradiction of both the intended architecture and the shared triage doc it instructs the reader to follow. REMOTE_SLUG derivation is consistent where it appears, and /retro's read-side behavior is plausibly correct, but the review-side contradiction is a real architectural inconsistency rather than a wording nit."},"latency_ms":18252,"stop_reason":"end_turn","usage":{"input_tokens":3745,"output_tokens":1358},"cost_usd":0.10535}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All files agree on the two-path design: greptile-triage.md defines GREPTILE_PROJECT_LOG (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and GREPTILE_GLOBAL_LOG (~/.gstack/greptile-history.md), writes every outcome to both, and reads only the project log for suppressions. /review and /ship both delegate fetch/classify/write to greptile-triage.md and reference both log variables with the same filename. /retro reads only the global path via the exact same literal (~/.gstack/greptile-history.md) and explicitly avoids per-project files, matching the triage doc's comment that the global log is 'read by /retro'. REMOTE_SLUG is derived in exactly one place (greptile-triage.md), so there is no divergence across files. Only non-blocking note: ship/SKILL.md routes through ship/sections/greptile.md before greptile-triage.md, an extra indirection but not a contradiction."},"latency_ms":10378,"stop_reason":"end_turn","usage":{"input_tokens":1352,"output_tokens":716},"cost_usd":0.04932}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["greptile-triage.md defines PROJECT_HISTORY as ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md (and mkdir's that directory) but later documents the per-project path as ~/.gstack/$REMOTE_SLUG/greptile-history.md — internal contradiction within the same file.","greptile-triage.md documents the global aggregate path as ~/.gstack/history/greptile.md, but retro/SKILL.md reads from ~/.gstack/greptile-history.md — the writer and reader disagree on the global path, so /retro would never see entries written by /review or /ship.","The intended global path (~/.gstack/greptile-history.md) does not appear anywhere in greptile-triage.md; only a PROJECT_HISTORY variable is defined, no GLOBAL_HISTORY equivalent, even though review/SKILL.md repeatedly says 'save to both per-project and global greptile-history'.","Reference path inconsistency: review/SKILL.md points to relative `.claude/skills/review/greptile-triage.md` while ship/SKILL.md uses absolute `~/.claude/skills/gstack/ship/sections/greptile.md` and also references greptile-triage.md without a path; ship's actual write mechanics live in an unshown sections/greptile.md so delegation to greptile-triage.md cannot be fully verified."],"score":2,"reasoning":"The high-level intent (review/ship write to both paths, retro reads global, REMOTE_SLUG derived identically) is expressed consistently, and the REMOTE_SLUG derivation is identical where used. However, the concrete file paths — the thing that actually makes the data flow work — are contradictory: greptile-triage.md gives two different per-project paths and a global path (~/.gstack/history/greptile.md) that does not match what /retro reads (~/.gstack/greptile-history.md). This breaks the write→read pipeline for retro aggregation."},"latency_ms":15384,"stop_reason":"end_turn","usage":{"input_tokens":2696,"output_tokens":1343},"cost_usd":0.09411}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md: VALID BUT ALREADY FIXED comments are saved only to 'global greptile-history (type: already-fixed)', whereas review/SKILL.md saves already-fixed to 'both per-project and global greptile-history' and the intended architecture says /ship writes to BOTH paths. This is also internally inconsistent within ship/SKILL.md, where fix and fp types are saved to both per-project and global.","ship/SKILL.md uses slightly varied phrasing for the dual-write ('save per-project/global greptile-history' vs 'save to both per-project and global greptile-history'), which is semantically equivalent but less explicit than review/SKILL.md's wording."],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md defines both paths (per-project and global) with an identical REMOTE_SLUG derivation in both occurrences; /review and /ship both delegate fetch/classify/reply/write mechanics to greptile-triage.md; and /retro explicitly reads only the global ~/.gstack/greptile-history.md aggregate, matching the write types (fix, fp, already-fixed). The one real deviation is that /ship's already-fixed handling writes to the global file only, diverging from /review's already-fixed handling and from /ship's own fix/fp handling, which write to both paths."},"latency_ms":12020,"stop_reason":"end_turn","usage":{"input_tokens":3700,"output_tokens":987},"cost_usd":0.08635}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"old-b","sample":2,"status":"ok","value":{"consistent":true,"issues":["Minor cosmetic: review header template says '(X valid, Y fixed, Z FP)' while ship's says '({valid_actionable} valid, {already_fixed} already fixed, ...)' — same semantics, slightly different label wording","Minor: greptile-triage.md defines a PROJECT_HISTORY variable for the per-project path but no equivalent variable for the global path (global path is only listed as a literal) — not a contradiction, just asymmetric"],"score":5,"reasoning":"All files agree on the two-path model. greptile-triage.md is the single source of truth for both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) and for REMOTE_SLUG derivation, which appears twice with identical logic. /review and /ship both say 'save to both per-project and global greptile-history' and delegate reply templates and write mechanics to greptile-triage.md rather than redefining paths. /retro explicitly reads only the global ~/.gstack/greptile-history.md ('never a per-project copy'). The entry schema (date | repo | type | file pattern | category) and the type vocabulary (fix, fp, already-fixed) match across review, triage, and retro's parsing logic. No contradictions found; only trivial wording differences."},"latency_ms":21714,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1177},"cost_usd":0.09683}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["greptile-triage.md internally contradicts itself on the per-project path: the shell variable PROJECT_HISTORY uses ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md (matching mkdir -p and the intended architecture), but the documentation list below says ~/.gstack/$REMOTE_SLUG/greptile-history.md (missing the projects/ segment).","greptile-triage.md documents the global aggregate path as ~/.gstack/history/greptile.md, but retro/SKILL.md reads ~/.gstack/greptile-history.md (the intended global path). If writes go to history/greptile.md, /retro will never see them and the Greptile signal metric will silently be skipped.","greptile-triage.md defines PROJECT_HISTORY but no corresponding GLOBAL_HISTORY variable is shown; the only global path reference is the incorrect ~/.gstack/history/greptile.md, so the global write mechanics that /review and /ship delegate to are either missing or point to the wrong file.","ship/SKILL.md delegates to an intermediate file (ship/sections/greptile.md) rather than directly to greptile-triage.md as review/SKILL.md does, and uses a different path base (~/.claude/skills/gstack/... vs .claude/skills/review/...); this adds a layer where the paths could diverge, though ship does also reference greptile-triage.md templates.","REMOTE_SLUG derivation is consistent (identical in both occurrences within greptile-triage.md), and review/SKILL.md correctly says 'save to both per-project and global' — these parts align with the intended architecture."],"score":2,"reasoning":"The high-level intent (review/ship write to both paths, retro reads global) is expressed consistently in review/SKILL.md and retro/SKILL.md, and REMOTE_SLUG derivation matches. However greptile-triage.md — the file that actually owns the write mechanics — contradicts both itself and the intended architecture: its documented per-project path drops 'projects/' and its documented global path (~/.gstack/history/greptile.md) does not match what /retro reads (~/.gstack/greptile-history.md). This path mismatch would break the retro aggregation pipeline, so the implementation is not consistent despite surface-level agreement."},"latency_ms":19284,"stop_reason":"end_turn","usage":{"input_tokens":3008,"output_tokens":1452},"cost_usd":0.10268}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the triage doc at `.claude/skills/review/greptile-triage.md` (relative, no `gstack/` segment) while ship/SKILL.md references `~/.claude/skills/gstack/review/greptile-triage.md` — the two paths point to different locations and one may not resolve depending on cwd/install layout","review/SKILL.md's VALID & ACTIONABLE flow only mentions saving to greptile-history for the false-positive (C) choice; it does not explicitly say to save a `fix` entry when the user chooses A, whereas ship/SKILL.md explicitly saves `type: fix`. If /review omits fix entries, /retro's signal ratio ((fix+already-fixed)/(fix+already-fixed+fp)) will be skewed for /review-originated triage","review/SKILL.md never mentions the entry `type` field (fix/fp/already-fixed) that /retro depends on for parsing; ship/SKILL.md does. This is likely fine if greptile-triage.md's write mechanics set the type, but the extracted triage lines don't show the write format/type field explicitly","REMOTE_SLUG derivation is duplicated verbatim inside greptile-triage.md rather than defined once; currently identical so not a contradiction, but a drift risk. Fallback `browse/bin/remote-slug` is a cwd-relative path"],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md is the single place that derives REMOTE_SLUG and defines both the per-project (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and global (~/.gstack/greptile-history.md) paths; both /review and /ship delegate to it and repeatedly state 'save to both per-project and global'; /retro reads only the global path and uses the same type vocabulary (fix/fp/already-fixed) that /ship records. The only real inconsistencies are the differing path used to reference greptile-triage.md between review and ship, and /review's omission of an explicit history write (with type) for fixed comments, which could under-count fixes in /retro. No outright contradictions."},"latency_ms":22645,"stop_reason":"end_turn","usage":{"input_tokens":3701,"output_tokens":1610},"cost_usd":0.11751}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files agree on the two-path architecture. greptile-triage.md is the single source of truth: it derives REMOTE_SLUG once, defines GREPTILE_PROJECT_LOG (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and GREPTILE_GLOBAL_LOG (~/.gstack/greptile-history.md), writes every triage outcome to BOTH, and scopes suppression reads to the per-project log. Both /review (Step 2.5) and /ship (Step 10) delegate to greptile-triage.md and explicitly name the same two variables for appends, so write mechanics are not duplicated or diverged. /retro reads only $HOME/.gstack/greptile-history.md (the global path), labels it GREPTILE_GLOBAL_LOG, and explicitly instructs not to read per-project files, matching the aggregation intent. REMOTE_SLUG is derived in exactly one place and only consumed via greptile-triage.md, so there is no risk of inconsistent slug derivation. /ship's extra indirection through ship/sections/greptile.md still lands on greptile-triage.md and the same paths, so it is not a contradiction."},"latency_ms":10836,"stop_reason":"end_turn","usage":{"input_tokens":1352,"output_tokens":835},"cost_usd":0.05527}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files agree on the architecture. greptile-triage.md is the single owner of write mechanics: it derives REMOTE_SLUG identically in both places it appears (remote-slug binary with basename fallback), defines both the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and the global path (~/.gstack/greptile-history.md), and specifies the line format. /review and /ship both delegate fetch/classify/reply templates to greptile-triage.md and both instruct saving to 'both per-project and global greptile-history' for fix/fp/already-fixed outcomes; /review's documented entry format (date | repo | type | file pattern | category) matches triage's. /retro explicitly reads only the global aggregate ('never a per-project copy'), filters by date, and counts the same three types (fix, fp, already-fixed) that the writers emit. Type names, header summary format ('+ N Greptile comments (X valid, Y fixed, Z FP)'), and skip-silently semantics are also aligned. No contradictions found."},"latency_ms":13182,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":968},"cost_usd":0.08638}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"old-a","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md VALID BUT ALREADY FIXED branch says 'Save to global greptile-history (type: already-fixed)' only, whereas review/SKILL.md's equivalent branch says 'Save to both per-project and global greptile-history' and the intended architecture states /review and /ship write to BOTH paths. The two skills diverge on the already-fixed write path.","Minor wording ambiguity: ship/SKILL.md fix branch uses 'save per-project/global greptile-history' (slash notation) rather than the explicit 'both per-project and global' phrasing used elsewhere; readable as both but not uniformly stated."],"score":4,"reasoning":"The architecture is largely implemented consistently: greptile-triage.md is the single owner of the write mechanics, defines both paths with an identical REMOTE_SLUG derivation in both occurrences, and both /review and /ship delegate to it. /retro correctly reads only the global aggregate and counts fix/fp/already-fixed types from it. The one real inconsistency is the ship already-fixed branch, which writes only to the global path while review writes to both for the same classification. This does not break /retro (which only needs the global write) but contradicts the stated 'write to BOTH' rule and makes the two skills behave differently for the same comment type."},"latency_ms":13313,"stop_reason":"end_turn","usage":{"input_tokens":3700,"output_tokens":1103},"cost_usd":0.09215}
|
||||
{"config":"cross-skill","item":"a07","split":"heldout","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md VALID BUT ALREADY FIXED branch says 'Save to global greptile-history (type: already-fixed)' only, whereas the stated architecture (and ship's own fix/fp branches, plus review/SKILL.md's already-fixed branch) write to BOTH per-project and global paths. Review and ship diverge on where already-fixed entries are persisted.","review/SKILL.md and ship/SKILL.md both correctly delegate write mechanics to greptile-triage.md, but neither explicitly says the already-fixed entry should flow through the same dual-write path in triage — the single-path wording in ship could lead an executor to bypass the mkdir/PROJECT_HISTORY logic defined in greptile-triage.md."],"score":4,"reasoning":"REMOTE_SLUG derivation is identical in both occurrences in greptile-triage.md, and the two canonical paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md) are defined once and referenced consistently. /retro reads only the global aggregate and explicitly excludes per-project copies, matching the architecture. /review saves all classification types to both paths and /ship saves fix and fp to both paths. The sole inconsistency is /ship's already-fixed branch, which writes only to the global file, contradicting both the intended 'write to BOTH' rule and /review's handling of the same case."},"latency_ms":14432,"stop_reason":"end_turn","usage":{"input_tokens":3700,"output_tokens":1130},"cost_usd":0.0935}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["greptile-triage.md documents the global aggregate path as `~/.gstack/history/greptile.md`, but the intended architecture and retro/SKILL.md both use `~/.gstack/greptile-history.md`. If writes follow the triage doc, /retro will never find the data.","greptile-triage.md is internally inconsistent on the per-project path: the code defines `PROJECT_HISTORY=\"$HOME/.gstack/projects/$REMOTE_SLUG/greptile-history.md\"` and `mkdir -p \"$HOME/.gstack/projects/$REMOTE_SLUG\"`, but the summary bullet lists `~/.gstack/$REMOTE_SLUG/greptile-history.md` (missing the `projects/` segment).","greptile-triage.md shows no explicit GLOBAL_HISTORY variable/write command in the extracted lines, only the (incorrect) prose path, so the global write mechanism that /review and /ship delegate to is under-specified relative to the per-project write.","ship/SKILL.md delegates write mechanics to `ship/sections/greptile.md` (not shown) rather than directly to greptile-triage.md, while greptile-triage.md claims /ship Step 10 references it directly; ship only cites it for reply templates. This indirection is a potential drift point.","Minor: review/SKILL.md references `.claude/skills/review/greptile-triage.md` (relative) while ship/SKILL.md uses `~/.claude/skills/gstack/ship/sections/greptile.md` (absolute, different tree), suggesting inconsistent install-path assumptions."],"score":2,"reasoning":"REMOTE_SLUG derivation is identical across uses and /review and /retro each match the intended architecture at a high level, but the shared greptile-triage.md — which is the single source of truth for write mechanics — states the global path as `~/.gstack/history/greptile.md` and a per-project path without `projects/`, contradicting both its own code and retro's read path. This breaks the core write→read contract for /retro's Greptile signal metric."},"latency_ms":16350,"stop_reason":"end_turn","usage":{"input_tokens":2696,"output_tokens":1424},"cost_usd":0.09816}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["Path to greptile-triage.md differs: ship/SKILL.md uses `~/.claude/skills/gstack/review/greptile-triage.md` while review/SKILL.md uses relative `.claude/skills/review/greptile-triage.md` (missing `gstack/` segment and home-anchored path).","review/SKILL.md's VALID & ACTIONABLE 'A: Fix' branch only says to reply with the Fix template and does not explicitly say to save to per-project/global greptile-history (type: fix), whereas ship/SKILL.md does; if not covered by greptile-triage.md, /retro's `fix` counts from /review runs would be incomplete.","review/SKILL.md does not specify entry types (fix/fp/already-fixed) when saving history, while ship/SKILL.md does; retro depends on these types being written consistently (likely delegated to greptile-triage.md, but not stated)."],"score":4,"reasoning":"The core data architecture is implemented consistently: greptile-triage.md defines the two paths and derives REMOTE_SLUG identically in both places; /review and /ship both delegate to greptile-triage.md and instruct saving to both per-project and global history for fp and already-fixed cases; /retro reads only the global path and expects the same entry types (fix, fp, already-fixed) that /ship writes. Remaining issues are minor: an inconsistent file path reference to greptile-triage.md between review and ship, and review's fix branch omitting an explicit history-save instruction that ship includes."},"latency_ms":17389,"stop_reason":"end_turn","usage":{"input_tokens":3389,"output_tokens":1368},"cost_usd":0.10229}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"old-a","sample":0,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `ship/sections/greptile.md` rather than referencing `review/greptile-triage.md` directly; greptile-triage.md claims /ship (Step 10) references it, but that link goes through an intermediate file not shown here, so the ship write-to-both-paths behavior cannot be fully verified from these excerpts.","greptile-triage.md hardcodes `$HOME/.gstack/...` for both the per-project and global paths, while bin/gstack-retro-metrics reads from `$_gstack_sr_root` (described as '~/.gstack by default'). If the state root is ever overridden, writes and retro reads would diverge; the default case is consistent."],"score":4,"reasoning":"The architecture is implemented coherently: greptile-triage.md defines both paths (per-project via REMOTE_SLUG, global aggregate) and derives REMOTE_SLUG identically in both places it appears; review/SKILL.md delegates fetch/classify/reply/write mechanics to greptile-triage.md and explicitly says to save to both per-project and global history; retro/SKILL.md reads only the path printed by gstack-retro-metrics, which is explicitly the state root (`~/.gstack/greptile-history.md`, never a projects/<slug> dir), matching the 'global only' read requirement. The only deductions are the unverifiable ship indirection and the hardcoded $HOME/.gstack vs. configurable state-root variable, neither of which is a contradiction in the default configuration."},"latency_ms":18954,"stop_reason":"end_turn","usage":{"input_tokens":3123,"output_tokens":1538},"cost_usd":0.10813}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"new","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it 'does not read review/greptile-triage.md' and uses 'its own lightweight Greptile pass', directly contradicting the intended architecture (delegate write mechanics to greptile-triage.md) and greptile-triage.md's own claim that 'Both /review (Step 2.5) and /ship (Step 10) reference this document.'","ship/SKILL.md records Greptile outcomes to a third path, `~/.gstack/ship-greptile-history.md`, instead of writing to both the per-project (`~/.gstack/projects/{slug}/greptile-history.md`) and global (`~/.gstack/greptile-history.md`) paths. As a result, /ship outcomes never reach the global aggregate that /retro reads, and /ship suppressions never reach the per-project file that /review's triage checks.","ship/SKILL.md fetches comments via `gh pr view --comments` and classifies inline, bypassing the shared fetch/filter/issue-guard pipeline in greptile-triage.md, so classification and REMOTE_SLUG derivation are not applied consistently for /ship.","ship/SKILL.md routes Step 10 to `sections/greptile.md` rather than `review/greptile-triage.md`, so the two skills point at different reference documents for the same feature."],"score":2,"reasoning":"review/SKILL.md, review/greptile-triage.md, and retro/SKILL.md are mutually consistent: review delegates to the triage doc, the triage doc derives REMOTE_SLUG identically in both places and writes to both per-project and global paths, and retro reads only the global path. However, ship/SKILL.md contradicts the architecture on nearly every point — it disclaims the shared triage doc (which itself claims /ship references it), writes to a separate non-architected file instead of the two canonical paths, and uses a different fetch/classify mechanism. This breaks the retro aggregation and per-project suppression flows for anything /ship handles, so the set is not consistent."},"latency_ms":14202,"stop_reason":"end_turn","usage":{"input_tokens":3396,"output_tokens":1097},"cost_usd":0.08881}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["greptile-triage.md states the global aggregate path as `~/.gstack/history/greptile.md`, but retro/SKILL.md reads from `~/.gstack/greptile-history.md` (the intended global path). If triage writes where it documents, /retro will never see the data — this breaks the retro aggregation pipeline.","greptile-triage.md is internally inconsistent on the per-project path: it defines `PROJECT_HISTORY=\"$HOME/.gstack/projects/$REMOTE_SLUG/greptile-history.md\"` and runs `mkdir -p \"$HOME/.gstack/projects/$REMOTE_SLUG\"`, but later documents the per-project file as `~/.gstack/$REMOTE_SLUG/greptile-history.md` (missing the `projects/` segment).","greptile-triage.md shows a PROJECT_HISTORY variable but no corresponding correct GLOBAL_HISTORY variable pointing to `~/.gstack/greptile-history.md`; the only global path mentioned is the wrong one.","ship/SKILL.md delegates to `sections/greptile.md` (not shown) rather than directly to greptile-triage.md; while it also references greptile-triage.md templates, the actual write-path delegation chain for /ship cannot be verified from the provided excerpts.","REMOTE_SLUG derivation is duplicated verbatim in greptile-triage.md (consistent), but it is not visible in review/ship/retro, so cross-file consistency of slug derivation cannot be fully confirmed — though retro doesn't need it since it reads only the global file."],"score":2,"reasoning":"review/SKILL.md and retro/SKILL.md align with the intended architecture (review writes to both paths via greptile-triage.md; retro reads only the global path at ~/.gstack/greptile-history.md). However, greptile-triage.md — the shared source of truth for write mechanics — documents a different global path (~/.gstack/history/greptile.md) than the one retro reads, and contradicts its own PROJECT_HISTORY variable with a per-project path lacking the `projects/` segment. The global-path mismatch is a functional contradiction that would cause /retro to find no Greptile history, so the files are not consistently implementing the architecture."},"latency_ms":16943,"stop_reason":"end_turn","usage":{"input_tokens":3008,"output_tokens":1367},"cost_usd":0.09843}
|
||||
{"config":"cross-skill","item":"p07","split":"heldout","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":["ship/SKILL.md delegates to `sections/greptile.md` rather than directly to `review/greptile-triage.md`; greptile-triage.md claims /ship Step 10 references it directly. The intermediate file is not shown, so the write-to-both behavior for /ship can only be inferred, not verified.","Minor path-root mismatch risk: greptile-triage.md hardcodes `$HOME/.gstack/` for both write paths, while gstack-retro-metrics reads from `$_gstack_sr_root` (described as '~/.gstack by default'). If the state root is ever overridden, /retro would read a different global file than /review and /ship write to."],"score":4,"reasoning":"The core architecture holds: greptile-triage.md derives REMOTE_SLUG identically in both places and writes to both the per-project and global paths; review/SKILL.md explicitly delegates to greptile-triage.md and says 'Save to both per-project and global'; retro/SKILL.md reads only the path printed by gstack-retro-metrics, which is explicitly the state-root global file (never a projects/<slug> dir). The only gaps are an unverifiable indirection for /ship through sections/greptile.md and a hardcoded `$HOME/.gstack` vs configurable state-root difference that could diverge under non-default configuration."},"latency_ms":27805,"stop_reason":"end_turn","usage":{"input_tokens":3123,"output_tokens":1161},"cost_usd":0.08928}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"new","sample":2,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files agree on the intended architecture. greptile-triage.md is the single source of truth defining both paths (GREPTILE_PROJECT_LOG at ~/.gstack/projects/$REMOTE_SLUG/greptile-history.md for suppressions, GREPTILE_GLOBAL_LOG at ~/.gstack/greptile-history.md for /retro) and the REMOTE_SLUG derivation. Both /review (Step 2.5) and /ship (Step 10) delegate fetch/classify/write mechanics to greptile-triage.md and explicitly state they append to BOTH logs, matching the triage doc's 'Append... to BOTH' instruction. /retro reads only the hardcoded global path, explicitly refuses to read per-project files, and its comment correctly maps to GREPTILE_GLOBAL_LOG; since it never needs the slug, there is no REMOTE_SLUG divergence. The only file deriving REMOTE_SLUG is greptile-triage.md, so derivation is trivially consistent. /ship's extra indirection through ship/sections/greptile.md before reaching greptile-triage.md is an added layer but not a contradiction."},"latency_ms":12593,"stop_reason":"end_turn","usage":{"input_tokens":1664,"output_tokens":927},"cost_usd":0.06299}
|
||||
{"config":"cross-skill","item":"p06","split":"heldout","phase":"old-b","sample":0,"status":"ok","value":{"consistent":true,"issues":["review/SKILL.md references the triage doc as `.claude/skills/review/greptile-triage.md` (relative, no gstack segment) while ship/SKILL.md uses `~/.claude/skills/gstack/review/greptile-triage.md` — two different resolution paths for the same shared file","review/SKILL.md's VALID & ACTIONABLE flow says to reply with the Fix template when the user chooses A but does not instruct saving a `fix` entry to per-project/global history, whereas ship/SKILL.md explicitly saves (type: fix); retro's signal ratio depends on `fix` entries, so /review-originated fixes may be under-counted","review/SKILL.md never states the entry type (`fix`/`fp`/`already-fixed`) when saving, while ship/SKILL.md does; this is only consistent if greptile-triage.md's write mechanics fully determine the type field"],"score":4,"reasoning":"The core architecture is implemented consistently: greptile-triage.md owns the write mechanics with a single REMOTE_SLUG derivation (identical in both occurrences) and defines both the per-project and global paths; /ship and /review both delegate to it and save to both paths for FP and already-fixed cases; /retro reads only the global path and uses the same three entry types (fix, fp, already-fixed) that /ship writes. Deviations are minor: an inconsistent reference path to greptile-triage.md between /review and /ship, and /review omitting an explicit history save (and type) for user-approved fixes, which could skew retro aggregation."},"latency_ms":15116,"stop_reason":"end_turn","usage":{"input_tokens":3389,"output_tokens":1242},"cost_usd":0.09599}
|
||||
{"config":"cross-skill","item":"a08","split":"heldout","phase":"old-a","sample":1,"status":"ok","value":{"consistent":true,"issues":["Cosmetic only: /ship's header summary label says '{already_fixed} already fixed' while greptile-triage.md and /review say 'Y fixed' — same data, slightly different wording.","Cosmetic only: /ship once phrases the write as 'save per-project/global greptile-history' rather than 'save to both per-project and global' — same semantics."],"score":5,"reasoning":"All files implement the intended architecture coherently. greptile-triage.md is the single source of truth: it defines both paths (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md and ~/.gstack/greptile-history.md), derives REMOTE_SLUG identically in both places it appears, and specifies the entry format. /review and /ship both delegate fetch/classify/reply/write mechanics to greptile-triage.md and explicitly instruct saving to both per-project and global history for fix, fp, and already-fixed outcomes. The entry format quoted in /review (date | repo | type | file pattern | category) matches triage.md's format, and the type vocabulary (fix, fp, already-fixed) is identical across review, ship, and retro. /retro reads only the global path, explicitly stating 'never a per-project copy', and its signal-ratio computation uses the same three types. REMOTE_SLUG is only derived in triage.md, so there is no divergence risk. No contradictions found; only trivial wording differences."},"latency_ms":17511,"stop_reason":"end_turn","usage":{"input_tokens":3798,"output_tokens":1385},"cost_usd":0.10723}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"old-a","sample":2,"status":"ok","value":{"consistent":true,"issues":["Minor: ship/SKILL.md introduces an extra indirection (ship/sections/greptile.md) before greptile-triage.md; its contents are not shown, so the chain cannot be fully verified from the excerpt (not a contradiction).","Minor: retro/SKILL.md hardcodes ~/.gstack/greptile-history.md rather than sourcing GREPTILE_GLOBAL_LOG; the literal path matches triage's definition, so this is a maintenance concern rather than an inconsistency."],"score":5,"reasoning":"All four files agree with the intended architecture. greptile-triage.md is the single source of truth: it derives REMOTE_SLUG once, defines both GREPTILE_PROJECT_LOG (~/.gstack/projects/{slug}/greptile-history.md) and GREPTILE_GLOBAL_LOG (~/.gstack/greptile-history.md), creates the project dir, and specifies appending to BOTH. review/SKILL.md and ship/SKILL.md both delegate to greptile-triage.md and reference writing to both logs using the same variable names. retro/SKILL.md reads only the global path, explicitly forbids reading per-project files, and labels it with the matching variable name. Suppressions correctly read only the per-project log. REMOTE_SLUG is derived in exactly one place, so there is no risk of divergent slug logic."},"latency_ms":13964,"stop_reason":"end_turn","usage":{"input_tokens":1352,"output_tokens":1148},"cost_usd":0.07092}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"old-a","sample":1,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md states 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review' — this directly contradicts the intended architecture (write to BOTH paths) and greptile-triage.md, which writes to both the per-project and global files. It also breaks per-project suppression for /review.","ship/SKILL.md only ever names the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) for fix/fp/already-fixed saves and never mentions the global aggregate; while it may implicitly rely on greptile-triage.md's write step, it reads as single-path, the mirror-image inconsistency of review/SKILL.md.","review/SKILL.md and ship/SKILL.md describe different write targets for the same classification outcomes (review: global only; ship: per-project), so the two skills are inconsistent with each other, not just with the shared reference.","retro/SKILL.md reads from whatever path the GREPTILE_HISTORY preamble line prints rather than explicitly naming the global path; it is not verifiable from the excerpt that this resolves to ~/.gstack/greptile-history.md, though it is likely intended to.","ship/SKILL.md references $REMOTE_SLUG without deriving it, depending on greptile-triage.md's derivation — acceptable delegation, but the per-project path only works if the triage doc's REMOTE_SLUG block is executed first in /ship's flow (which the dispatched 'report only' sub-task may not do)."],"score":2,"reasoning":"greptile-triage.md correctly implements the dual-path architecture (per-project + global) with consistent REMOTE_SLUG derivation, and retro correctly reads a single aggregate path. However review/SKILL.md explicitly asserts global-only writes with per-project 'not used', directly contradicting both the intended design and the shared triage doc, while ship/SKILL.md names only the per-project path. The two consuming skills thus disagree with each other and at least one contradicts the reference doc, which is a substantive architectural inconsistency rather than a wording nit."},"latency_ms":18079,"stop_reason":"end_turn","usage":{"input_tokens":3745,"output_tokens":1288},"cost_usd":0.10185}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it 'does not read review/greptile-triage.md' and uses its own lightweight inline pass, contradicting both the intended architecture (ship delegates to greptile-triage.md) and greptile-triage.md itself, which says 'Both /review (Step 2.5) and /ship (Step 10) reference this document.'","ship/SKILL.md records Greptile outcomes to a third path, `~/.gstack/ship-greptile-history.md`, instead of the per-project and global paths. This means /ship writes to neither of the two intended locations, so /ship outcomes never reach `~/.gstack/greptile-history.md` and are invisible to /retro's cross-project aggregation.","ship/SKILL.md's section table points Step 10 at `sections/greptile.md` while the step text says it does its own inline classification and does not use the triage doc — an internal inconsistency about where ship's Greptile mechanics live.","ship/SKILL.md does not use REMOTE_SLUG or any per-project path, so suppression history for a project is only populated by /review, not /ship, undermining the per-project suppression purpose."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: review delegates to triage, triage derives REMOTE_SLUG identically in both occurrences and writes to both per-project and global paths, and retro reads only the global aggregate. However, ship/SKILL.md directly contradicts the architecture and the triage doc: it disclaims using greptile-triage.md, invents a separate `ship-greptile-history.md` file, and writes to neither intended path, breaking retro aggregation and per-project suppression for ship-time triage. This is a substantive contradiction rather than a minor wording drift."},"latency_ms":12216,"stop_reason":"end_turn","usage":{"input_tokens":3084,"output_tokens":1007},"cost_usd":0.08119}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"old-b","sample":2,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md records Greptile outcomes to a third path `~/.gstack/ship-greptile-history.md`, not to the per-project `~/.gstack/projects/{slug}/greptile-history.md` nor the global `~/.gstack/greptile-history.md` required by the architecture","ship/SKILL.md explicitly states it 'does not read review/greptile-triage.md' and uses its own inline classification, contradicting both the intended delegation architecture and greptile-triage.md's own claim that 'Both /review (Step 2.5) and /ship (Step 10) reference this document'","Because /ship never writes to the global `~/.gstack/greptile-history.md`, /retro (which reads only the global path) will silently miss all /ship Greptile outcomes, breaking cross-project aggregation","ship/SKILL.md's section table points to `sections/greptile.md` rather than `review/greptile-triage.md`, a different reference document than the one /review uses","ship/SKILL.md never derives REMOTE_SLUG at all (since it uses a single flat file), so slug consistency cannot be verified for /ship"],"score":2,"reasoning":"review/SKILL.md, review/greptile-triage.md, and retro/SKILL.md are mutually consistent: triage defines both paths with an identical REMOTE_SLUG derivation (used twice, identically), review delegates to triage and saves to both paths, and retro reads only the global aggregate. However, ship/SKILL.md directly contradicts the architecture and the triage doc on three counts — it disclaims using greptile-triage.md, it writes to an unrelated `ship-greptile-history.md` file instead of the per-project + global pair, and its data therefore never reaches /retro. This is a direct contradiction (triage says ship references it; ship says it does not), not merely an omission."},"latency_ms":13509,"stop_reason":"end_turn","usage":{"input_tokens":3084,"output_tokens":1160},"cost_usd":0.08884}
|
||||
{"config":"cross-skill","item":"f08","split":"heldout","phase":"old-a","sample":0,"status":"ok","value":{"consistent":false,"issues":["ship/SKILL.md explicitly states it does NOT read review/greptile-triage.md ('its templates and escalation rules are for /review only'), directly contradicting greptile-triage.md which says 'Both /review (Step 2.5) and /ship (Step 10) reference this document' and the intended architecture that /ship delegates write mechanics to greptile-triage.md.","ship/SKILL.md writes Greptile outcomes to a third, unsanctioned path `~/.gstack/ship-greptile-history.md` instead of the per-project `~/.gstack/projects/{slug}/greptile-history.md` and global `~/.gstack/greptile-history.md` paths. This breaks the two-path architecture.","Because /ship never writes to the global `~/.gstack/greptile-history.md`, /retro (which reads global only) will silently miss all /ship Greptile outcomes, undermining the cross-project aggregation the global file exists for; /ship outcomes also never reach per-project suppressions.","ship/SKILL.md references a `sections/greptile.md` file for Step 10 while the shared reference is review/greptile-triage.md — a divergent/duplicated source of truth for fetch/classify logic.","ship/SKILL.md fetches via `gh pr view --comments` with inline classification, diverging from greptile-triage.md's two-endpoint `gh api` fetch with issue-guard sanitization, so /ship's Greptile pass lacks the guard protections and consistent REMOTE_SLUG derivation."],"score":2,"reasoning":"review/SKILL.md, greptile-triage.md, and retro/SKILL.md are mutually consistent: review delegates to triage, triage writes to both per-project and global paths with a consistently derived REMOTE_SLUG, and retro reads only the global path. However, ship/SKILL.md directly contradicts the architecture and the triage doc: it disclaims using greptile-triage.md, uses a different reference file and fetch method, and writes to a separate `ship-greptile-history.md` path that neither retro nor the per-project suppression flow ever reads. This is a substantive contradiction, not a cosmetic drift."},"latency_ms":13991,"stop_reason":"end_turn","usage":{"input_tokens":3084,"output_tokens":1133},"cost_usd":0.08749}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"new","sample":0,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files implement the intended architecture coherently. greptile-triage.md is the single source of truth: it derives REMOTE_SLUG once, defines GREPTILE_PROJECT_LOG (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and GREPTILE_GLOBAL_LOG (~/.gstack/greptile-history.md), appends to BOTH, and restricts the suppressions check to the per-project log. review/SKILL.md (Step 2.5) and ship/SKILL.md (Step 10) both delegate to greptile-triage.md and reference the same two variables for writes, matching the step numbers cited in greptile-triage.md. retro/SKILL.md reads only the global path with the exact same literal path and explicitly instructs not to read per-project files, matching the 'global aggregate, read by /retro' comment in greptile-triage.md. No file derives REMOTE_SLUG independently, so there is no divergence risk. The only unverifiable element is ship/sections/greptile.md (not provided), but the extracted ship lines show it still routes through greptile-triage.md and writes to both logs, so no contradiction is evident."},"latency_ms":12341,"stop_reason":"end_turn","usage":{"input_tokens":1664,"output_tokens":921},"cost_usd":0.06269}
|
||||
{"config":"cross-skill","item":"p08","split":"heldout","phase":"old-b","sample":1,"status":"ok","value":{"consistent":true,"issues":[],"score":5,"reasoning":"All four files agree on the two-path architecture. greptile-triage.md is the single source of truth: it derives REMOTE_SLUG once, defines GREPTILE_PROJECT_LOG (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) and GREPTILE_GLOBAL_LOG (~/.gstack/greptile-history.md), creates the project dir, appends every outcome to BOTH logs, and restricts the Suppressions Check to the project log. review/SKILL.md and ship/SKILL.md both delegate fetch/filter/classify/escalation to greptile-triage.md and both state they record to $GREPTILE_PROJECT_LOG and $GREPTILE_GLOBAL_LOG via the triage writer, with no independent path or slug definitions that could drift. retro/SKILL.md reads only the global ~/.gstack/greptile-history.md and explicitly says not to read per-project files, matching the 'global aggregate for retro' intent and the comment in greptile-triage.md. REMOTE_SLUG is derived in exactly one place, so there is no cross-file divergence. Minor non-architectural notes: ship additionally routes through ship/sections/greptile.md (not shown) before the shared triage doc, and the REMOTE_SLUG fallback to basename could differ from the remote-slug script output, but neither contradicts the intended design."},"latency_ms":13277,"stop_reason":"end_turn","usage":{"input_tokens":1352,"output_tokens":1091},"cost_usd":0.06807}
|
||||
{"config":"cross-skill","item":"f07","split":"heldout","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["greptile-triage.md documents the per-project path as `~/.gstack/$REMOTE_SLUG/greptile-history.md`, contradicting its own PROJECT_HISTORY variable and mkdir (`$HOME/.gstack/projects/$REMOTE_SLUG/...`) and the intended architecture (missing `projects/` segment).","greptile-triage.md documents the global aggregate path as `~/.gstack/history/greptile.md`, but retro/SKILL.md reads `~/.gstack/greptile-history.md` (the intended global path). If writers follow triage.md, /retro will never find the aggregated history.","greptile-triage.md defines PROJECT_HISTORY but no corresponding GLOBAL_HISTORY variable/write target is shown, so the 'write to BOTH paths' mechanic is only half-specified in the delegated file while review/SKILL.md repeatedly instructs 'save to both per-project and global'.","Path references to the shared doc are inconsistent: review/SKILL.md uses relative `.claude/skills/review/greptile-triage.md` while ship/SKILL.md uses absolute `~/.claude/skills/gstack/ship/sections/greptile.md`; ship delegates to sections/greptile.md rather than directly to greptile-triage.md (indirect but not contradictory)."],"score":2,"reasoning":"REMOTE_SLUG derivation is identical in both occurrences, retro correctly reads only the global path, and review/ship correctly delegate write mechanics and say 'both paths'. However, greptile-triage.md — the file that actually owns the write mechanics — contains two wrong path strings: a per-project path missing `projects/` (contradicting its own variable) and a global path (`~/.gstack/history/greptile.md`) that does not match what /retro reads (`~/.gstack/greptile-history.md`). This is a real contradiction that would break the retro aggregation flow."},"latency_ms":16113,"stop_reason":"end_turn","usage":{"input_tokens":2696,"output_tokens":1442},"cost_usd":0.09906}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"old-b","sample":0,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md states 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review' — this directly contradicts the intended architecture (write to BOTH paths) and contradicts greptile-triage.md, which lists both the per-project and global paths as write targets.","ship/SKILL.md only ever references the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) for fix/fp/already-fixed saves and never mentions the global aggregate path; while it delegates to greptile-triage.md, its explicit single-path instructions risk the global path being skipped, which would starve /retro of data.","review/SKILL.md and ship/SKILL.md diverge from each other: /review says 'global only', /ship says per-project only — the two skills that are supposed to share identical write mechanics via greptile-triage.md give opposite guidance.","retro/SKILL.md reads 'the greptile-history.md path that GREPTILE_HISTORY printed' without specifying that this must be the GLOBAL path; the intended architecture (global-only read) is implied but not stated, leaving ambiguity about which path the preflight resolves."],"score":2,"reasoning":"greptile-triage.md correctly defines both paths and derives REMOTE_SLUG consistently, and /ship correctly delegates to it and uses $REMOTE_SLUG consistently. However, review/SKILL.md explicitly contradicts the shared architecture by declaring a global-only write policy, and ship/SKILL.md inconsistently names only the per-project path. The two consumers of the shared triage doc therefore give conflicting, partial instructions, and retro's read path is underspecified. This is a real contradiction rather than mere wording drift."},"latency_ms":13475,"stop_reason":"end_turn","usage":{"input_tokens":3745,"output_tokens":991},"cost_usd":0.087}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"old-b","sample":1,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md explicitly says 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review' — this directly contradicts the intended architecture (write to BOTH) and greptile-triage.md, which lists both the per-project and global paths as write targets","ship/SKILL.md explicitly names only the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md) for fix/fp/already-fixed saves and never mentions the global aggregate path; unless the 'save' step is understood as fully delegated to greptile-triage.md's dual-write, /ship entries would never reach the global file that /retro reads","review and ship therefore disagree with each other on write targets (review: global only; ship: per-project only), so neither alone satisfies the dual-write contract, and the retro aggregation would miss /ship data while /review's suppression lookups would miss per-project data","retro/SKILL.md reads whatever path the GREPTILE_HISTORY preflight line prints, but the extracted lines never pin it to the global path ~/.gstack/greptile-history.md — the global-read contract is implicit rather than stated","ship/SKILL.md uses $REMOTE_SLUG without showing its derivation; it is only defined in greptile-triage.md, so correctness depends on the reader having run that block first (consistent in spirit, but implicit)"],"score":2,"reasoning":"greptile-triage.md correctly defines both paths and a consistent REMOTE_SLUG derivation, but the two writers disagree with it and with each other: /review states it writes to the global file only and explicitly disclaims per-project history, while /ship names only the per-project file. This is a substantive contradiction of the 'write to BOTH' architecture, not just an omission, and it would break /review suppression lookups and /retro aggregation of /ship data."},"latency_ms":16544,"stop_reason":"end_turn","usage":{"input_tokens":3745,"output_tokens":1138},"cost_usd":0.09435}
|
||||
{"config":"cross-skill","item":"f06","split":"heldout","phase":"new","sample":1,"status":"ok","value":{"consistent":false,"issues":["review/SKILL.md states 'Save to the global greptile-history only (~/.gstack/greptile-history.md); per-project history is not used by /review' — this directly contradicts the intended architecture (both paths) and contradicts greptile-triage.md, which writes to both per-project and global paths. Skipping per-project writes breaks the SUPPRESSED classification for /review since suppressions are keyed off per-project history.","ship/SKILL.md explicitly saves only to the per-project path (~/.gstack/projects/$REMOTE_SLUG/greptile-history.md, type fix/fp/already-fixed) and never mentions the global path, so /ship findings would not feed /retro aggregation — contradicting the 'write to BOTH' intent.","review and ship contradict each other: /review says global-only, /ship says per-project-only. Neither delegates write mechanics to greptile-triage.md as intended; both inline their own (and different) path choices instead of saying 'append per greptile-triage.md' which already writes to both.","ship/SKILL.md uses $REMOTE_SLUG inline without showing its derivation; it implicitly depends on greptile-triage.md having been run in the same shell context, which is fragile given ship dispatches triage as a report-only subagent ('Do NOT fix code, do NOT reply... report only'). The slug derivation in greptile-triage.md itself is consistent (identical in both occurrences).","retro/SKILL.md reads whatever path GREPTILE_HISTORY printed rather than explicitly the global ~/.gstack/greptile-history.md; the extracted lines do not confirm it resolves to the global path, so global-only reading cannot be verified from the file itself."],"score":2,"reasoning":"greptile-triage.md correctly implements the dual-path write and consistent REMOTE_SLUG derivation, but the two callers diverge in opposite directions: /review explicitly writes global-only and disclaims per-project use, while /ship explicitly writes per-project-only with no global write. This is a direct contradiction between files and with the intended architecture, and it defeats both purposes (suppression tracking for review, retro aggregation for ship). The retro reader is plausibly correct but only indirectly specified."},"latency_ms":26301,"stop_reason":"end_turn","usage":{"input_tokens":4057,"output_tokens":1606},"cost_usd":0.12087}
|
||||
@@ -0,0 +1 @@
|
||||
{"stopped":null}
|
||||
@@ -14,7 +14,7 @@ import { afterAll, expect } from 'bun:test';
|
||||
import { JUDGE_MS } from './helpers/eval-budgets';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import { callJudge, judge, JudgeRefusalError, JUDGE_SCORE_SCHEMA, QA_ANTI_REFUSAL_JUDGE_SCHEMA, VOICE_DIRECTIVE_JUDGE_SCHEMA, buildQaWorkflowJudgePrompt, buildQaHealthRubricJudgePrompt, buildQaAntiRefusalJudgePrompt, buildCrossSkillConsistencyJudgePrompt, buildVoiceDirectiveJudgePrompt, DEFAULT_JUDGE_MAX_TOKENS, judgePanel, judgePanelMean, judgePanelMajority, judgePanelReasoning, JUDGE_SCORE_DIMENSIONS } from './helpers/llm-judge';
|
||||
import { callJudge, judge, JudgeRefusalError, JUDGE_SCORE_SCHEMA, QA_ANTI_REFUSAL_JUDGE_SCHEMA, VOICE_DIRECTIVE_JUDGE_SCHEMA, CROSS_SKILL_CONSISTENCY_JUDGE_SCHEMA, buildQaWorkflowJudgePrompt, buildQaHealthRubricJudgePrompt, buildQaAntiRefusalJudgePrompt, buildCrossSkillConsistencyJudgePrompt, buildVoiceDirectiveJudgePrompt, DEFAULT_JUDGE_MAX_TOKENS, judgePanel, judgePanelMean, judgePanelMajority, judgePanelReasoning, JUDGE_SCORE_DIMENSIONS } from './helpers/llm-judge';
|
||||
import { ASK_QUESTIONS_HEADING, ENG_REVIEW_EXCERPT } from './helpers/workflow-excerpt';
|
||||
import type { JudgeScore } from './helpers/llm-judge';
|
||||
import { readWorkflowJudgeInput, buildWorkflowJudgePrompt, QA_DISCOVERY_REFERENCES, WORKFLOW_JUDGE_RESPONSE_SCHEMA, type WorkflowJudgeInput } from './helpers/workflow-judge-input';
|
||||
@@ -307,7 +307,7 @@ describeIfSelected('Cross-skill consistency evals', ['cross-skill greptile consi
|
||||
extractGrepLines(retroContent, 'retro/SKILL.md'),
|
||||
].join('\n\n');
|
||||
|
||||
const samples = await judgePanel(() => callJudge<{ consistent: boolean; issues: string[]; score: number; reasoning: string }>(buildCrossSkillConsistencyJudgePrompt(collected)));
|
||||
const samples = await judgePanel(() => callJudge<{ consistent: boolean; issues: string[]; score: number; reasoning: string }>(buildCrossSkillConsistencyJudgePrompt(collected), undefined, { jsonSchema: CROSS_SKILL_CONSISTENCY_JUDGE_SCHEMA }));
|
||||
const result = { consistent: judgePanelMajority(samples, 'consistent'), ...judgePanelMean(samples, ['score'] as const) };
|
||||
|
||||
console.log('Cross-skill consistency panel:', JSON.stringify({ result, samples }, null, 2));
|
||||
|
||||
Reference in new issue
Block a user