chore(review): repo-owned Greptile policy and merge-policy documentation for integrations - #10
Conversation
…ntation Integrations has had no repository-owned review policy, so reviewer behavior here has never been governed by this repository's own failure classes. Rules are derived from verified Integrations surfaces and defects, not copied from workspacejson/standard: - proven-root-path-identity, ported-copies-must-not-diverge: META-291 / PR #8 removed a suffix fallback that matched a stored key against a file in an unrelated repository; src/path-match.ts records that a second, drifted matcher is how a deny silently became a warn. extension/src/pathMatch.ts is still a hand-synced port. - unavailable-is-not-approval: hooks/pre-edit-check.mjs routes failures through emitUnavailable and never emits an approval; src/reviewer.ts keeps UNAVAILABLE distinct from PASS. Exercised by the smoke suite. - reader-tolerance-is-not-repair: normalizeWorkspace degrades to empty and never fabricates; no read path holds a write to the artifact. - packed-artifact-must-be-measured: dist/ is gitignored but shipped, and the hook resolves ../dist/* at runtime, so source-only tests do not prove what a consumer receives. - probes-must-not-be-destructive: META-285 records --help running a destructive install into the source repo; the surrounding installer surface is genuinely destructive, so probe versus action has to be explicit. - host-contract-claims-need-a-watched-version: the Codex output contract is recorded as watched on 0.144.1 (2026-07-13) with a single adapter point. - clean-room-public-boundary, consume-standard-do-not-vendor, and the four ecosystem evidence rules. Standard's four-read-paths, negative-fixture, and derived-probability rules are deliberately not carried over; CLI producer/history rules have no equivalent verified failure mode here. .greptile/rules.md records each omission. .sourcery.yaml is path scoping only. Sourcery keeps no semantic authority: a success check from it is not review approval. config/repository-structure.json gains .greptile and .sourcery.yaml via its documented allowlist path; the checker script is untouched. The check was watched failing with 2 violations before the amendment. No product behavior change. No package bytes, exports, or metadata change. Refs META-322
Reviewer's GuideIntroduces repo-owned semantic review policy and merge-policy documentation for File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - I've left some high level feedback:
- The rule scopes described in
.greptile/rules.md(e.g., forpath-match,reader tolerance, host adaptation) should be checked against.greptile/config.jsonto ensure the structured rule targeting matches the prose and doesn’t drift over time. - Since
docs/review/merge-policy.mdencodes specific branch protection and required check settings read from the GitHub API, consider adding an explicit note or lightweight process hook for updating this document when those settings change so it doesn’t become misleading or stale.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The rule scopes described in `.greptile/rules.md` (e.g., for `path-match`, `reader tolerance`, host adaptation) should be checked against `.greptile/config.json` to ensure the structured rule targeting matches the prose and doesn’t drift over time.
- Since `docs/review/merge-policy.md` encodes specific branch protection and required check settings read from the GitHub API, consider adding an explicit note or lightweight process hook for updating this document when those settings change so it doesn’t become misleading or stale.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
| Filename | Overview |
|---|---|
| .greptile/config.json | Adds fourteen structured, repository-specific review rules with explicit scopes and severity metadata. |
| .greptile/rules.md | Documents the repository-specific failure classes, rule rationale, ownership boundaries, and deliberately omitted rules. |
| docs/review/calibration-2026-08.md | Records measured canary results and correctly distinguishes existing matcher coverage from a test suite excluded from deterministic gates. |
| docs/review/merge-policy.md | Defines measured merge eligibility, reviewer authority, conversation-reconciliation requirements, and the limits of review check states. |
| config/repository-structure.json | Allows the new .greptile directory and .sourcery.yaml file through the existing root-structure check. |
Reviews (2): Last reviewed commit: "docs(review): record calibration results..." | Re-trigger Greptile
Reconciling Sourcery finding 1 of 2 — rule-scope drift between
|
| Rule id | config.json scope |
rules.md Scope: |
|---|---|---|
consume-standard-do-not-vendor |
src/**, extension/src/**, hooks/**, scripts/** |
identical |
reader-tolerance-is-not-repair |
src/services/**, src/tools/**, src/evidence.ts, hooks/**, extension/src/** |
identical |
proven-root-path-identity |
src/path-match.ts, src/services/**, src/tools/**, src/evidence.ts, extension/src/pathMatch.ts, extension/src/**, hooks/** |
identical |
ported-copies-must-not-diverge |
src/path-match.ts, extension/src/pathMatch.ts, src/**, extension/src/** |
identical |
unavailable-is-not-approval |
hooks/**, src/reviewer.ts, src/tools/**, src/services/**, src/evidence.ts, extension/src/reviewerVerdict.ts, extension/src/** |
identical |
host-adaptation-stays-descriptive |
src/**, extension/src/**, hooks/**, docs/**, README.md |
identical |
packed-artifact-must-be-measured |
package.json, extension/package.json, scripts/install.mjs, hooks/**, .github/workflows/**, tests/** |
identical |
probes-must-not-be-destructive |
scripts/**, hooks/**, .github/workflows/** |
identical |
host-contract-claims-need-a-watched-version |
hooks/**, scripts/install.mjs, extension/src/**, src/index.ts, docs/** |
identical |
So this is a drift risk over time, not a present defect — worth being precise about, since "should be checked" and "is wrong" are different claims.
Applied: rules.md now states that config.json is authoritative for scope, that the prose restates it and can drift, and which file is the one to correct when they disagree. That gives a drift a defined resolution direction instead of a stalemate.
Deliberately not applied: an executable parity check between the two files. It would be the stronger fix and it is the honest reading of this repository's own evidence must be load-bearing rule — but it adds test machinery outside META-322's declared write-set, and a check that parses prose to compare against JSON has its own vacuity risk. Recorded as a named follow-up rather than smuggled in here; scoping it is the owner's call, not this PR's.
Reconciling Sourcery finding 2 of 2 —
|
Calibration ran on PR #11 (canary, closed unmerged) against this policy. All seven criteria observed. Greptile caught the positive control (P1 on extension/src/pathMatch.ts at e22d6f5) citing the branch-local rule by name, stayed silent on the reverted clean head (447a318, 0 comments), and retriggered on push. Merge eligibility behaved as claimed: PR #10 sat at BLOCKED on one unresolved thread. Two results qualify how a required check should be read, and are recorded rather than smoothed over: - the Greptile check concluded success on the head carrying the P1, so the check encodes review completion, not absence of findings; - GitHub auto-resolved the canary thread when the revert removed its lines, so required_conversation_resolution can be satisfied without anyone answering a finding. Decision: Greptile Review is eligible as a required current-head gate. The required-contexts mutation is deliberately not applied here — PR #6 is BEHIND and predates the policy, so the change costs a PR this issue does not own. Reconciles review findings on #10 individually: - Greptile P2: corrected a false coverage claim. extension/test/intelligence.check.ts does exercise pathsMatch; the real limitation is that no gate runs that suite. Chasing it down found the suite is already red on main against pre-META-291 assertions — filed as META-329, not repaired here. - Sourcery 1: audited rules.md/config.json scope parity, all nine scoped rules match; config.json declared authoritative for scope so drift has a resolution direction. - Sourcery 2: added a refresh procedure and measurement stamp to the branch protection section, which transcribes settings that can change externally. Refs META-322, META-329
|
…TM-45) (#18) The withdrawal record said "emission on this repository is not dependable." That was accurate about the symptom and wrong about the cause, and the difference decides what anyone does next: a flaky app is waited out, an exhausted trial is topped up. Established 2026-08-13. Greptile posts, in place of a review: `qmarcelle` has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan. and emits no check run. That is why the check fired on #10 and #13 and then stopped at #14 — the credits ran out in between, not the app's emission becoming unreliable here. The prediction that follows was confirmed the same day. `workspacejson/standard` kept working only until its own next pull request: #37 reviewed the exact head 4f9e8f6f and emitted zero check runs, against exactly one each on #34, #35 and #36. It hit the identical deadlock and its requirement was withdrawn the same way. So the "next door still works" observation in the original evidence was true but temporary, and reading it as repository-specific would have sent the investigation somewhere there was nothing to find. Restoring the signal is a billing action.



Closes the policy half of META-322. Calibration evidence follows on a separate disposable canary PR; this PR does not change branch protection.
What this is
workspacejson/integrationshas had no repository-owned review policy, so reviewer behavior here has never been governed by this repository's own failure classes. This adds:.greptile/config.json.greptile/rules.md.greptile/files.json.sourcery.yamldocs/review/merge-policy.mddocs/review/calibration-2026-08.mdconfig/repository-structure.jsonRules are derived, not copied
Every Integrations-specific rule names a surface or defect in this repository:
proven-root-path-identity,ported-copies-must-not-diverge— META-291 / PR fix(path-identity): resolve absolute queries against a proven root, drop suffix fallback #8 removed a suffix fallback that matched a storedsrc/a.tsagainst/elsewhere/unrelated-repo/src/a.ts.src/path-match.tsrecords that a second, drifted matcher is how a deny silently became a warn.extension/src/pathMatch.tsis still a hand-synced port with no build-time import.unavailable-is-not-approval—hooks/pre-edit-check.mjsroutes every failure throughemitUnavailable; its no-history branch exits silently "never an approval message".src/reviewer.tskeepsUNAVAILABLEdistinct fromPASS. The smoke suite exercises malformed, wrong-shaped, and missing artifacts.reader-tolerance-is-not-repair—normalizeWorkspacedegrades to empty and never fabricates; no read path anywhere holds a write to the artifact.packed-artifact-must-be-measured—dist/is gitignored but shipped, and the hook resolves../dist/*at runtime, so source-only tests do not prove what a consumer receives.probes-must-not-be-destructive— META-285 records--helprunning a destructive install into the source repo; the surrounding installer surface genuinely installs, uninstalls, and removes a managed root.host-contract-claims-need-a-watched-version— the Codex output contract is recorded as watched on 0.144.1 (2026-07-13), withemitDecision()as the single adapter point.clean-room-public-boundary,consume-standard-do-not-vendor, and the four ecosystem evidence rules.Not carried over, with reasons recorded in
.greptile/rules.md:standard's four-stable-read-paths rule (this repository consumes them, it does not own them), single-defect negative fixtures (no such corpus here), derived-probability emission (no producer here), and CLI producer/commit-history rules (no equivalent verified failure mode).Sourcery
Stays defense-in-depth.
.sourcery.yamlis ignore paths only and grants no rule authority; asuccessSourcery check is explicitly not evidence of semantic approval.Evidence
config/repository-structure.jsonenforces a root allowlist as part of the requiredbuild-and-smokecontexts. Watched red before the amendment, on this exact tree:then green after. The checker script itself is untouched — the policy file documents that adding an entry there is the sanctioned path.
Local gates on this head:
147/147vitest tests across14/14files,43 PASS / 0 FAILsmoke, structure + generator-version + typecheck + lint + build all pass.Scope
No product behavior change. No published package bytes, exports,
files,bin, or metadata change — and this repository has no.changeset/, so no changeset applies.scripts/migration/**is untouched (META-285 owns it) anddocs/migration/**is untouched (PR #6 owns it).Summary by Sourcery
Add repository-owned semantic review policy and merge-contract documentation for workspacejson/integrations, including configuration of automated reviewers and alignment of repo structure allowlists.
Enhancements:
main.