Skip to content

ORB-261: canonicalize the API pr-review contract - #463

Merged
thomasluizon merged 14 commits into
mainfrom
chore/pr-review-canonical-parity
Aug 8, 2026
Merged

ORB-261: canonicalize the API pr-review contract#463
thomasluizon merged 14 commits into
mainfrom
chore/pr-review-canonical-parity

Conversation

@thomasluizon

@thomasluizon thomasluizon commented Aug 7, 2026

Copy link
Copy Markdown
Owner

DEGRADED: same-vendor review

Summary

Makes the API pr-review skill and rubric byte-identical to the UI canonical contract so API reviews cannot silently load an obsolete or weaker workflow. Linked Linear issue: ORB-261. Harness implementation and parity enforcement: thomasluizon/orbit-ui-mobile#694 (ORB-262).

The branch was updated from API main with a normal merge after base advancement. The PR diff against current main remains the two canonical review files. No product/API runtime code is changed by this PR.

Observed failure -> fix -> red-capable regression

Observed failure Fix Regression evidence
UI and API loaded different pr-review contracts, so repository choice changed the review. API installs the exact UI canonical skill and rubric; UI reviewer launch hashes both and refuses drift. API-primary-cwd test plus a deliberately changed API fixture that fails with pr-review parity failed.
The canonical rubric did not require evidence for external fields/flags/response shapes, allowing an invented field and matching fixture to review cleanly. Dimension 13 requires complete selected key/type or compared enum evidence from a live invocation/installed source, exact reproduction, redaction, and fixture comparison. Missing or guessed correctness-path evidence is High and Blocking. UI hook asserts the dimension, complete-shape clause, and Blocking severity.
Diff-only inputs prevented an API contract review from checking the shipped client in UI. Rule 4 permits one bounded exception: targeted shipped consumer/provider evidence from the sibling primary main checkout and a linked paired contract PR. It explicitly forbids unrelated browsing. UI hook asserts the targeted sibling-primary contract clause.
A new Blocking defect admitted on a round-two-touched line could be omitted from the verdict once the frozen round-one list closed. Every admitted round-two blocker is appended with status: OPEN, included in the open list, and prevents CLEAN. No round three is added. UI hook asserts both the admitted-open and verdict clauses.
A round-two receipt could erase the frozen round-one blocker list by rewriting findings: []. Round 1 now persists exact ordered frozenFindingIds; round 2 never changes it, and UI readiness mechanically validates the list. UI red-capable receipt tests reject absent/empty/dropped frozen IDs and accept the preserved CLOSED list.
API diffs use repository-relative src/ and tests/ paths, so the prior orbit-api/src/ classifier could skip backend-only dimensions. Classification now interprets paths against the selected target repository. UI hook asserts API-relative source/test classification as backend.
The API repository permits P0/P1 review findings only, but the shared rubric defines lower severities. Medium/Low/Info candidates are discarded before receipts or follow-up tickets; Critical/High map to P0/P1. UI hook asserts the API floor before receipt/ticket creation.
The receipt required head/base OIDs while the prescribed query did not request them. The query now requests baseRefOid and headRefOid, and the receipt carries the reviewed head/base. Complete live selected response evidence below plus the canonical contract regression.
A mutable main-checkout rubric could change between review rounds. Round 1 materializes the rubric blob from the captured baseRefOid; the receipt stores its OID/path, round 2 reuses it, and a head/base change starts a fresh round 1. UI hook asserts the base-pinned blob command and no mutable round-2 reload.
The normal round-one fixer push was described as invalidating the frozen review, making round two unreachable. Only the single prescribed fixer transition preserves round one, and only when the frozen receipt plus both exact head OIDs are supplied; base or unexpected head changes restart. UI hook asserts the bounded transition and no unqualified head-change preservation.
The public argument hint advertised blank/current-branch scope while repository inference was intentionally forbidden. The public selector now accepts only ui#N, api#N, or a full PR URL; blank and bare-number scope remain refused. UI hook asserts the public hint and refusal prose agree.
Round two assumed both reviewed head objects existed in the main checkout. The procedure fetches and verifies both exact head OIDs before computing git diff r1..r2. UI hook asserts both-head materialization before the diff.
Backend review could miss per-user timezone defects in background schedules, cutoffs, and streak calculations. The rubric now requires per-user today plus a boundary-hour unit test and classifies server-local/global-timezone behavior as P1. UI hook asserts the background-job and boundary-hour clauses.

Verification

  • UI/API SKILL.md SHA-256: 3FBF6D133B4A7BAFBE8DA8345EA10D45FF96AC6B83D6C78F348651FA3C830059 in both worktrees.
  • UI/API rubric.md SHA-256: 672F14194F2BC7834828D434BABDAD152D5B361B2059B75F34F5B0D370BE72B6 in both worktrees.
  • git diff origin/main...HEAD --check: pass.
  • Companion UI node .claude/hooks/test-hooks.mjs: pass, including all canonical-contract regressions.
  • Companion UI node tools/test-tools.mjs: pass, including API-primary-cwd and deliberate parity drift.

Reproduce byte parity:

Get-FileHash <UI_ROOT>\.claude\skills\pr-review\SKILL.md,<API_ROOT>\.claude\skills\pr-review\SKILL.md -Algorithm SHA256
Get-FileHash <UI_ROOT>\.claude\skills\pr-review\rubric.md,<API_ROOT>\.claude\skills\pr-review\rubric.md -Algorithm SHA256

External-interface evidence

The updated skill reads this complete selected gh pr view response. Values are redacted while literal formats and every selected key/type are retained:

{
  "baseRefName": "<string>",
  "baseRefOid": "<40-character lowercase hexadecimal SHA>",
  "body": "<string>",
  "files": [{"additions": 29, "changeType": "<string; observed MODIFIED>", "deletions": 15, "path": "<string>"}],
  "headRefName": "<string>",
  "headRefOid": "<40-character lowercase hexadecimal SHA>",
  "labels": [],
  "number": 463,
  "title": "<string>"
}

Reproduce with a process-scoped credential:

$env:GH_TOKEN = gh auth token --user <TARGET_OWNER>
gh pr view 463 --repo <OWNER/REPO> --json number,title,body,baseRefName,baseRefOid,headRefName,headRefOid,files,labels
Remove-Item Env:GH_TOKEN

Observed top-level types are string,string,string,array,string,string,array,number,string in the key order above; each files[] object has the complete key set additions:number,changeType:string,deletions:number,path:string. No response field is inferred from a fixture.

Because PR #463 has no labels, a second live invocation used API PR #448 with the same selected query.
Its nonempty labels[] item has the complete key set
color:string,description:string,id:string,name:string; two items were observed and no key was
elided. Reproduce by substituting 448 in the command above.

The review's sole diff input was also confirmed from a live invocation rather than inferred from
--help:

$env:GH_TOKEN = gh auth token --user <TARGET_OWNER>
gh pr diff 463 --repo <OWNER/REPO>
Remove-Item Env:GH_TOKEN

The complete redacted structural response is one UTF-8 unified-diff string with exactly these
headers and hunk coordinates; only source/content lines are replaced:

diff --git a/.claude/skills/pr-review/SKILL.md b/.claude/skills/pr-review/SKILL.md
index ba53df5d..e2ffb378 100644
--- a/.claude/skills/pr-review/SKILL.md
+++ b/.claude/skills/pr-review/SKILL.md
@@ -1,363 +1,212 @@
<363 old/content lines and 212 new/content lines redacted>
diff --git a/.claude/skills/pr-review/rubric.md b/.claude/skills/pr-review/rubric.md
index c8935985..fe958891 100644
--- a/.claude/skills/pr-review/rubric.md
+++ b/.claude/skills/pr-review/rubric.md
@@ -1,405 +1,284 @@
<405 old/content lines and 284 new/content lines redacted>

Observed whole stdout: 1,201 lines, two diff --git file headers, two hunks, 369 added lines,
477 removed lines, and 73 space-prefixed context lines. The tool consumes the response as opaque
unified-diff text; it reads no JSON field from gh pr diff.

Round two depends only on these Git commands' exit status and diff text, not an inferred response field:

git fetch origin <R1_HEAD_OID> <R2_HEAD_OID>
git cat-file -e '<R1_HEAD_OID>^{commit}'
git cat-file -e '<R2_HEAD_OID>^{commit}'
git diff <R1_HEAD_OID>..<R2_HEAD_OID> --unified=0

Real invocation from the API primary main checkout used R1 76cbc8930bc0789218e0d709bcdbd940fa770adc and R2 6a01b6f70ca836a35c4fcc3036f632401f32bea2. git fetch origin <R1> <R2> exited 0 and its complete output contained exactly the remote URL plus one <OID> -> FETCH_HEAD line for each OID. Each quoted git cat-file -e '<OID>^{commit}' invocation exited 0 with empty stdout and stderr, confirming both the subcommand's consumed success status and that both objects are commits. The quoted form is the exact PowerShell reproduction; credentials are supplied by the configured Git remote and none are printed.

The exact round-one rubric command git show '50b187835f2d0f98b3b0b0ebf8b435610c8c0678:.claude/skills/pr-review/rubric.md' was run from the API primary main checkout and exited 0. Its complete stdout was the 22,813-byte rubric blob c893598592eae90743f6d5b2d8885c1faeeef531, beginning # Orbit Review Rubric and ending with the Self-review note; stderr was empty. git rev-parse '<base>:<path>' and git cat-file -s '<base>:<path>' independently returned that exact blob OID and 22813. The round-one artifact at C:/Users/thoma/AppData/Local/Temp/orbit-api-pr-review-463-7f0cfcb2/pr-463-rubric.md is the preserved response.

The independent reviewer then ran the prescribed process-scoped gh pr comment 463 --repo <OWNER/REPO> --body-file <REPORT_PATH> posting interface. It exited 0 and its complete stdout was the single URL https://github.com/thomasluizon/orbit-api/pull/463#issuecomment-5224015621; the comment contains the exact BLOCKING receipt and remains live. No response field is parsed: exit 0 plus the returned URL proves the report was posted.

Cross-repo round-one registration is invoked from the canonical UI primary checkout as node <UI_PRIMARY_MAIN>/tools/record-readiness.mjs --repo api --pr 463 --review <ROUND_ONE_PATH> --register-round-one. The real initial invocation and an identical idempotency recheck both exited 0. The complete redacted returned key/type shape is {verdict:string,idempotent?:boolean,ledgerPath:string,repositoryKey:string,prNumber:number,baseSha:string,reviewedHeadOid:string,artifactPath:string,artifactSha256:string,frozenFindingIds:string[]}; observed verdict is ROUND_ONE_REGISTERED, repository key api, PR 463, and one frozen ID. The exact response builder is companion UI tools/record-readiness.mjs:128-133; the live ledger is under API repository Git state and its stored artifact hash is the round-one receipt SHA-256 already recorded above.

Complete zero-context diff structure observed from installed Git 2.52.0 for the actual
ed16d40b..1457c0dd skill change (content values redacted, structural lines retained):

diff --git a/<path> b/<path>
index <8-hex>..<8-hex> 100644
--- a/<path>
+++ b/<path>
@@ -4 +4 @@ <context>
-<one removed line>
+<one added line>
@@ -40,3 +40,5 @@ <context>
-<three removed lines>
+<five added lines>
@@ -139 +141,3 @@ <context>
-<one removed line>
+<three added lines>

The touched-line set reads only the @@ -old[,count] +new[,count] @@ hunk coordinates; it does not
infer line ranges from file content.

Codex findings addressed

  • Restore external-interface evidence checks: fixed in cd09d70e; replied with hook/hash evidence and resolved.
  • Permit shipped-client lookup during contract review: fixed in cd09d70e; replied with bounded-scope evidence and resolved.
  • Keep new round-two blockers in the verdict: fixed in cd09d70e; replied with open-list/verdict evidence and resolved.
  • Recognize repository-relative API source paths: fixed in 41b38e06; replied with parity-test evidence and resolved.
  • Suppress findings below the repository review floor: fixed in 41b38e06; replied with the P0/P1-floor regression and resolved.
  • Request and evidence the OIDs required by the receipt: fixed in 41b38e06; replied with the selected live query evidence and resolved.
  • Load the rubric snapshot from PR-open time: fixed in 41b38e06 by replacing the unmechanized promise with a captured-base blob snapshot; replied and resolved.
  • Preserve round one across the fixer head update: fixed in 1457c0dd with a single receipt-and-two-OID transition; replied and resolved.
  • Support the advertised blank PR selector: fixed in 1457c0dd by removing ambiguous blank/bare-number scope from the public contract; replied and resolved.
  • Fetch both reviewed heads before diffing round two: fixed in 1457c0dd; replied with hook evidence and resolved.
  • Restore background-job timezone review: fixed in 1457c0dd; replied with rubric/hook evidence and resolved.
  • Preserve the frozen blocker list in round two: fixed in companion UI commit d9bb423e and API parity commit 76cbc893; the canonical receipt now persists exact frozen IDs and UI readiness rejects their removal.
  • Keep the round-one blocker list independently verifiable: fixed in 6a01b6f7; round one is immutable, round two writes a new artifact that points to the original artifact and SHA-256, and readiness compares the exact ordered Blocking IDs. Companion UI red tests reject a changed hash or a dropped blocker.
  • Prove gh pr diff response shape: this body now records the complete observed unified-diff structural output, exact redacted reproduction command, line/header/hunk counts, and the fact that the skill parses no JSON field from the command.
  • Preserve the immutable round-one receipt: fixed in 7f0cfcb2; every round-two instruction now consistently requires a separate receipt and explicitly keeps the round-one file byte-for-byte immutable.
  • Cover every external-interface read in the blocking rule: fixed in 7f0cfcb2; the canonical rubric now specifies proof formats and High/Blocking treatment for fields, shapes, enums, values, flags, subcommands, exit codes, and event arguments, matching the repository gate without narrowing it.
  • Verify the Git commands before relying on their exit status: fixed in this body and 7f0cfcb2; the real primary-checkout fetch/cat-file invocations, exact OIDs, exit statuses, and complete consumed output are recorded above.
  • Independent API F1 Prove review command interfaces: fixed in this body on 773bea2d; the exact live git show blob identity/size/output contract and the successful gh pr comment --body-file invocation/URL are recorded above.
  • Connector Require fleet-safe proof before exempting removed fields: fixed in 773bea2d; optional response-field removal is exempt only with version-indexed proof across every still-supported shipped client build. A current-main grep alone is explicitly insufficient.
  • Register round one before the fixer: fixed in canonical parity commit 773bea2d and UI implementation 6627da40; the orchestrator stores the exact immutable receipt identity in repository Git state before round two and final readiness refuses caller-only replacement hashes.
  • Capped-review F2 / connector Prove and locate readiness registration: fixed in 45a1c1e5 and this body; the API contract names the UI-primary executable, while the complete real response shape, invocation, success result, and response-builder lines are recorded above.
  • Connector Bind the downloaded diff to captured OIDs: fixed in 45a1c1e5; the reviewer rereads base/head immediately after gh pr diff, compares both byte-for-byte to the first capture, and discards/restarts on any change.

The current head after synchronizing the updated canonical review contract is 45a1c1e58602ccfba1801b01216088c588388014; the current base is 50b187835f2d0f98b3b0b0ebf8b435610c8c0678. All earlier CI, connector, and independent-review receipts are stale and are reacquired on this exact pair.

Deliberately deferred

  • Enforcement code and the rest of the readiness lifecycle live in UI harness PR #694 because they cannot belong in an API-only PR.
  • No product/API behavior change is part of this parity companion.
  • No merge is performed by this work.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7208afb882

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/SKILL.md Outdated
Comment thread .claude/skills/pr-review/SKILL.md Outdated
Comment thread .claude/skills/pr-review/SKILL.md Outdated
@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Independent pr-review: CLEAN

  • Reviewed head: 7208afb8828787d0ca22ae561ffa9d7a4a9ab02a
  • Base SHA: 4d2050a2bc705681f477a73818007e2de3c4cc6d
  • Rounds: 1 of 2
  • Blocking findings: none
  • Non-blocking findings and follow-up tickets: none

This review ran in a separate session that did not write the change. It is same-vendor review; the bias direction is known and its magnitude in this PR loop is unmeasured.

Evidence

The complete diff changes only .claude/skills/pr-review/SKILL.md and .claude/skills/pr-review/rubric.md. The target API blobs exactly match the current canonical UI blobs:

  • Skill blob: 8602707e6eb21745263c01fdeafe19825676dd4f
  • Rubric blob: 406e48f6feb41871b2651185a4715cfd31219442

No API runtime, product contract, dependency, feature, or data surface changes.

Rubric dimensions

  • Correctness: PASS. Both target files are byte-identical to the canonical UI files and match ORB-261's stated intent.
  • Dead / stale code: PASS. The obsolete divergent review workflow is replaced without introducing executable residue.
  • SOLID / clean architecture: N/A. Documentation-only skill and rubric replacement.
  • No-workaround / root cause: PASS. Repository-specific review divergence is removed at its source.
  • Test quality: PASS. The paired UI harness owns the red-capable SHA drift regression; this companion supplies only the canonical bytes.
  • Security: N/A. No runtime, authentication, data, configuration, or dependency surface changed.
  • Contract alignment and backward compatibility: N/A. No product DTO, route, schema, enum, or client contract changed.
  • Cross-platform parity: N/A. No web or mobile product files changed.
  • i18n: N/A. No user-facing product copy changed.
  • Design: N/A. No UI file changed.
  • Backend hard rules: N/A. No API source or test code changed.
  • FEATURES.md gating: N/A. No user-facing feature surface changed.

Artifact: C:\Users\thoma\orca\reviews\api-pr-463-7208afb-findings.json

A machine never merges.

@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Independent pr-review: CLEAN

  • Reviewed head: 2a4cfa065e25fd775d79be2821804774c155803c
  • Base SHA: 56da2b9d1f0950f12c7c50c587ece8937edaa911
  • Rounds: 1 of 2
  • Blocking findings: none
  • Non-blocking findings and follow-up tickets: none

This review ran independently from the session that wrote the change. It is same-vendor review; the bias direction is known and its magnitude in this PR loop is unmeasured.

Evidence

The complete current-main diff changes only .claude/skills/pr-review/SKILL.md and .claude/skills/pr-review/rubric.md. The target API blobs exactly match the updated canonical UI blobs:

  • Skill blob: fd6ea846344cddc82250e09cc5d2967688f9697e
  • Skill SHA-256: 743DB9073D49FC234EDF048CDC6882A4FD72E33DC33ADE7A2C0E5832852B63F8
  • Rubric blob: a360e94a50b963d83ec6d5b376f6ec6f069696e0
  • Rubric SHA-256: 6428ED6528BC0B30D7A6FD890BDB941D6EC7D7E49416A715F289F6A0E3852D72

The three Codex-thread fixes were inspected directly. Dimension 13 now requires complete live or installed-source evidence and makes guessed correctness-path fields Blocking. The sibling-repository exception is limited to dimension 7, cited contract symbols, the sibling primary main, and linked paired contract diffs. Every newly admitted round-two blocker is appended as OPEN and remains in the verdict calculation, so it cannot disappear when the frozen round-one list closes.

No API runtime, product contract, dependency, feature, or data surface changes.

Rubric dimensions

  • Correctness: PASS. Both target files match the updated canonical UI contract exactly, and the three Codex fixes are internally complete.
  • Dead / stale code: PASS. The obsolete divergent review workflow is replaced without executable residue.
  • SOLID / clean architecture: N/A. Documentation-only skill and rubric replacement.
  • No-workaround / root cause: PASS. Repository-specific review divergence is removed at its source.
  • Test quality: PASS. The linked UI harness owns the red-capable contract-clause and SHA-drift regressions; this API companion supplies the byte-identical files.
  • Security: N/A. No runtime, authentication, data, configuration, or dependency surface changed.
  • Contract alignment and backward compatibility: N/A. No product DTO, route, schema, enum, or shipped-client contract changed.
  • Cross-platform parity: N/A. No web or mobile product files changed.
  • i18n: N/A. No user-facing product copy changed.
  • Design: N/A. No UI file changed.
  • Backend hard rules: N/A. No API source or test code changed.
  • FEATURES.md gating: N/A. No user-facing feature surface changed.
  • External-interface evidence: PASS. The PR adds no executable external-interface read; the new rubric dimension requires complete live or installed-source proof for future reads.

Artifact: C:\Users\thoma\orca\reviews\api-pr-463-2a4cfa0-findings.json

A machine never merges.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

Reviewed commit: 2a4cfa065e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Independent pr-review: CLEAN

  • Reviewed head: 47b49a3ef28032f184dcc851163ec6dda1d01d13
  • Base SHA: f243dfc5bafb65e5e4fe6fd53138bbb796edd249
  • Rounds: 1 of 2
  • Blocking findings: none
  • Non-blocking findings and follow-up tickets: none

This review ran independently from the session that wrote the change. It is same-vendor review; the bias direction is known and its magnitude in this PR loop is unmeasured.

Evidence

The complete live current-main diff changes only .claude/skills/pr-review/SKILL.md and .claude/skills/pr-review/rubric.md. Its stable patch ID is 1e2871f3fe0cb2d63c61be972b7301cd681e7dda, identical to the prior fully reviewed patch. The target API blobs exactly match the canonical UI blobs:

  • Skill blob: fd6ea846344cddc82250e09cc5d2967688f9697e
  • Skill SHA-256: 743DB9073D49FC234EDF048CDC6882A4FD72E33DC33ADE7A2C0E5832852B63F8
  • Rubric blob: a360e94a50b963d83ec6d5b376f6ec6f069696e0
  • Rubric SHA-256: 6428ED6528BC0B30D7A6FD890BDB941D6EC7D7E49416A715F289F6A0E3852D72

The bounded sibling-contract evidence rule, round-two admitted-blocker retention, and external-interface evidence dimension remain present and internally complete. No API runtime, product contract, dependency, feature, or data surface changes.

Rubric dimensions

  • Correctness: PASS. Both target files match the canonical UI contract exactly and the current-base patch is unchanged.
  • Dead / stale code: PASS. The obsolete divergent review workflow is replaced without executable residue.
  • SOLID / clean architecture: N/A. Documentation-only skill and rubric replacement.
  • No-workaround / root cause: PASS. Repository-specific review divergence is removed at its source.
  • Test quality: PASS. The linked UI harness owns the red-capable contract-clause and SHA-drift regressions; this API companion supplies the byte-identical files.
  • Security: N/A. No runtime, authentication, data, configuration, or dependency surface changed.
  • Contract alignment and backward compatibility: N/A. No product DTO, route, schema, enum, or shipped-client contract changed.
  • Cross-platform parity: N/A. No web or mobile product files changed.
  • i18n: N/A. No user-facing product copy changed.
  • Design: N/A. No UI file changed.
  • Backend hard rules: N/A. No API source or test code changed.
  • FEATURES.md gating: N/A. No user-facing feature surface changed.
  • External-interface evidence: PASS. The PR adds no executable external-interface read; the rubric requires complete live or installed-source proof for future reads.

Artifact: C:\Users\thoma\orca\reviews\api-pr-463-47b49a3-findings.json

A machine never merges.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 47b49a3ef2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/SKILL.md Outdated
Comment thread .claude/skills/pr-review/SKILL.md
Comment thread .claude/skills/pr-review/SKILL.md
Comment thread .claude/skills/pr-review/SKILL.md Outdated
@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 225f5348cf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/SKILL.md Outdated
Comment thread .claude/skills/pr-review/SKILL.md
@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Independent pr-review: BLOCKING (round 1)

  • Repository: thomasluizon/orbit-api PR ORB-261: canonicalize the API pr-review contract #463
  • Base: 7c8961bfb8c17ca81d8bab4dbe935a2aa91863e1
  • Reviewed head: 225f5348cf8451c4139a1ebfbd6bff9a2e932041
  • Reviewer kind: independent
  • Receipt: C:\Users\thoma\orca\reviews\api-pr-463-225f534-findings.json
  • Frozen rubric: C:\Users\thoma\orca\reviews\api-pr-463-225f534-rubric.md

Blocking findings

F1, High, .claude/skills/pr-review/SKILL.md:111

gh pr view {N} --repo {OWNER/REPO} --json number,title,body,baseRefName,baseRefOid,headRefName,headRefOid,files,labels

The diff directs reviewers to read GitHub base/head OIDs and the other selected PR fields, while the PR body's External-interface evidence section says the change adds no structured reads and supplies no complete selected key/type shape. That contradicts the root AGENTS.md external-interface proof rule and leaves this new correctness path without the required durable PR-body evidence.

Fix: replace that PR-body claim with the complete redacted selected shape and the exact reproduction command below. Also refresh the stale current-head and canonical-hash statements in the same body-only update.

baseRefName: string
baseRefOid: string (40 lowercase hexadecimal characters)
body: string
files: array<{additions:number, changeType:string (observed MODIFIED), deletions:number, path:string}>
headRefName: string
headRefOid: string (40 lowercase hexadecimal characters)
labels: array (observed empty)
number: number
title: string

Reproduce without exposing a credential:

$env:GH_TOKEN = '<THOMAS_GITHUB_TOKEN>'
gh pr view 463 --repo thomasluizon/orbit-api --json number,title,body,baseRefName,baseRefOid,headRefName,headRefOid,files,labels
Remove-Item Env:GH_TOKEN

Follow-up tickets

None.

N/A dimensions

  • Dead/stale code, SOLID/clean architecture, no-workaround, test quality, security, contract alignment, cross-platform parity, i18n, design, backend hard rules, and FEATURES gating: no executable/product/test/contract/UI surface changed.
  • Correctness and the repository's external-interface review rule were applied to both changed review-contract files; F1 is the only surviving P0/P1 finding.

This review did not modify code and does not merge the PR. Round 2 is limited to closing frozen F1 if the base and head remain exact.

@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Independent pr-review: CLEAN (round 2, final)

  • Repository: thomasluizon/orbit-api PR ORB-261: canonicalize the API pr-review contract #463
  • Base: 7c8961bfb8c17ca81d8bab4dbe935a2aa91863e1
  • Reviewed head: 225f5348cf8451c4139a1ebfbd6bff9a2e932041
  • Reviewer kind: independent
  • Rounds: 2 of 2
  • Receipt: C:\Users\thoma\orca\reviews\api-pr-463-225f534-findings.json
  • Frozen rubric: C:\Users\thoma\orca\reviews\api-pr-463-225f534-rubric.md

Frozen finding disposition

  • F1, .claude/skills/pr-review/SKILL.md:111: CLOSED. The live PR body now records the complete selected gh pr view top-level key/type shape, the complete files[] key set additions:number,changeType:string,deletions:number,path:string, the exact process-scoped reproduction command, the current head/base, and the current canonical hashes. This matches the live response reproduced from the API primary main checkout.

Verdict

No frozen or admitted Blocking finding remains open. No new finding was admitted; the body-only correction did not change the PR diff line set. The final verdict for exact head 225f5348cf8451c4139a1ebfbd6bff9a2e932041 over base 7c8961bfb8c17ca81d8bab4dbe935a2aa91863e1 is CLEAN.

This review did not modify code and does not merge the PR. The same-vendor direction-of-bias risk is acknowledged; its magnitude for this review is unmeasured.

@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Independent pr-review: CLEAN (round 1)

  • Repository: thomasluizon/orbit-api PR ORB-261: canonicalize the API pr-review contract #463
  • Base: 7c8961bfb8c17ca81d8bab4dbe935a2aa91863e1
  • Reviewed head: c9c7b4b043a2c9865e3c4e616be842abb4b8d79c
  • Reviewer kind: independent
  • Rounds: 1
  • Receipt: C:\Users\thoma\orca\reviews\api-pr-463-c9c7b4b-findings.json
  • Frozen rubric: C:\Users\thoma\orca\reviews\api-pr-463-c9c7b4b-rubric.md

Full-diff verdict

Both changed files were reviewed against the base-pinned rubric: .claude/skills/pr-review/SKILL.md and .claude/skills/pr-review/rubric.md. The review contract remains bounded, repository-explicit, base/head pinned, and complete for the P0/P1 floor. The synchronized parity guidance admits only the enumerated layout-shell exceptions while retaining parity for every screen, component, behavior, data flow, and error path beneath the shell; it also replaces the obsolete middleware.ts exemption with proxy.ts.

No Critical or High candidate survived. There are zero Blocking findings and no follow-up tickets.

Evidence checked

  • Live selected gh pr view shape in the PR body includes every top-level key and the complete files[] keys additions, changeType, deletions, and path, with a process-scoped reproduction command.
  • Current canonical hashes: SKILL.md EE4CE92608E409F661E593813009042C24F46A777335D9A1540212BE957648D9; rubric.md AA56F9148ECE8301DC2F7090836E3936C7837A6F7B3E67EE084854A16A4D2D78.
  • git diff --check passed for the exact base/head pair.

N/A dimensions

  • Dead/stale implementation, SOLID/clean architecture, no-workaround, test quality, security, product contract alignment, i18n, design rendering, backend hard rules, and FEATURES gating: no executable/product/test/DTO/endpoint/UI surface changed.
  • Correctness, cross-platform-parity policy, and external-interface evidence were applied to the full documentation/skill diff.

The final verdict for exact head c9c7b4b043a2c9865e3c4e616be842abb4b8d79c over base 7c8961bfb8c17ca81d8bab4dbe935a2aa91863e1 is CLEAN. This review did not modify code and does not merge the PR. The same-vendor direction-of-bias risk is acknowledged; its magnitude for this review is unmeasured.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c9c7b4b043

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/SKILL.md Outdated
@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Independent pr-review: CLEAN (round 1)

  • Repository: thomasluizon/orbit-api PR ORB-261: canonicalize the API pr-review contract #463
  • Base: 50b187835f2d0f98b3b0b0ebf8b435610c8c0678
  • Reviewed head: ed16d40b9bbf56a9eab2faaea669f013f00ba9d8
  • Reviewer kind: independent
  • Rounds: 1
  • Receipt: C:\Users\thoma\orca\reviews\api-pr-463-ed16d40-findings.json
  • Frozen rubric: C:\Users\thoma\orca\reviews\api-pr-463-ed16d40-rubric.md

Full-diff verdict

Both changed files were reviewed against the newly base-pinned rubric: .claude/skills/pr-review/SKILL.md and .claude/skills/pr-review/rubric.md. The merge from current API main does not alter either reviewed file relative to the preceding candidate. The review contract remains bounded, repository-explicit, base/head pinned, and complete for the API P0/P1 floor. The parity guidance admits only the enumerated layout-shell exceptions while retaining parity for every screen, component, behavior, data flow, and error path beneath the shell.

No Critical or High candidate survived. There are zero Blocking findings and no follow-up tickets.

Evidence checked

  • Live selected gh pr view shape in the refreshed PR body includes every top-level key and the complete files[] keys additions, changeType, deletions, and path, with a process-scoped reproduction command.
  • Current canonical hashes: SKILL.md EE4CE92608E409F661E593813009042C24F46A777335D9A1540212BE957648D9; rubric.md AA56F9148ECE8301DC2F7090836E3936C7837A6F7B3E67EE084854A16A4D2D78.
  • git diff --check passed for the exact base/head pair.

N/A dimensions

  • Dead/stale implementation, SOLID/clean architecture, no-workaround, test quality, security, product contract alignment, i18n, design rendering, backend hard rules, and FEATURES gating: no executable/product/test/DTO/endpoint/UI surface changed by this PR diff.
  • Correctness, cross-platform-parity policy, and external-interface evidence were applied to the full documentation/skill diff.

The final verdict for exact head ed16d40b9bbf56a9eab2faaea669f013f00ba9d8 over base 50b187835f2d0f98b3b0b0ebf8b435610c8c0678 is CLEAN. This review did not modify code and does not merge the PR. The same-vendor direction-of-bias risk is acknowledged; its magnitude for this review is unmeasured.

@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ed16d40b9b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/rubric.md
@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1457c0dde5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/SKILL.md
Comment thread .claude/skills/pr-review/SKILL.md
@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Independent pr-review: CLEAN (round 1)

  • Repository: thomasluizon/orbit-api PR ORB-261: canonicalize the API pr-review contract #463
  • Base: 50b187835f2d0f98b3b0b0ebf8b435610c8c0678
  • Reviewed head: 1457c0dde5ede519c6eed1d095ec9a8e08c16b0a
  • Reviewer kind: independent
  • Rounds: 1
  • Receipt: C:\Users\thoma\orca\reviews\api-pr-463-1457c0dd-findings.json
  • Frozen rubric: C:\Users\thoma\orca\reviews\api-pr-463-1457c0dd-rubric.md

Full-diff verdict

Both changed files were reviewed against the rubric materialized from the exact captured base: .claude/skills/pr-review/SKILL.md and .claude/skills/pr-review/rubric.md. The change satisfies ORB-261: the API skill and rubric are byte-identical to the current UI canonical copies, the review selector is repository-explicit, round-one evidence is pinned to exact base/head OIDs, and the bounded two-round transition retains no unqualified path to a third review round.

No Critical or High candidate survived. There are zero Blocking findings and no follow-up tickets.

Evidence checked

  • The complete live selected gh pr view response has top-level keys baseRefName, baseRefOid, body, files, headRefName, headRefOid, labels, number, and title; each files[] object has the complete keys additions, changeType, deletions, and path.
  • The API and UI current-head Git blob OIDs are identical: SKILL.md is 2376a5b8ed0f091338f8f768cb274549b26048fc; rubric.md is fe958891795d111981f1d46e94a6793cd742c759.
  • The frozen-rubric artifact hashes to the captured base blob c893598592eae90743f6d5b2d8885c1faeeef531.
  • git diff --check 50b187835f2d0f98b3b0b0ebf8b435610c8c0678..1457c0dde5ede519c6eed1d095ec9a8e08c16b0a passed.
  • The advisory diff size is two files, 419 additions and 695 deletions; size did not affect the verdict.

N/A dimensions from the captured-base rubric

  • Dead/stale executable code, SOLID/clean architecture, no-workaround, type safety, and production logging: no executable implementation changed.
  • Comment policy: the diff changes Markdown review-contract prose, not source-code comments governed by the analyzers.
  • DESIGN.md, web/mobile parity, i18n, contract drift/backward compatibility, security, backend hard rules, and FEATURES.md: no apps/, packages/, src/, tests/, DTO, endpoint, locale, or product-feature surface changed.
  • Correctness was applied to the complete skill/rubric diff and the linked ORB-261 acceptance criteria.

The final verdict for exact head 1457c0dde5ede519c6eed1d095ec9a8e08c16b0a over base 50b187835f2d0f98b3b0b0ebf8b435610c8c0678 is CLEAN. This review did not modify code and does not merge the PR. The same-vendor direction-of-bias risk is acknowledged; its magnitude for this review is unmeasured.

@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 76cbc8930b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/SKILL.md
@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6a01b6f70c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/SKILL.md Outdated
Comment thread .claude/skills/pr-review/rubric.md Outdated
Comment thread .claude/skills/pr-review/SKILL.md
@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7f0cfcb285

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/rubric.md Outdated
Comment thread .claude/skills/pr-review/SKILL.md
Comment thread .claude/skills/pr-review/SKILL.md
@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Verdict: BLOCKING

Blocking findings

  • F1 — .claude/skills/pr-review/SKILL.md:115 — High: The procedure newly depends on git show for the frozen rubric and on gh pr comment --body-file at line 193 for the receipt, but the PR body supplies no live-invocation or installed-source evidence for either command. The body proves the other selected GitHub/Git interactions; zero occurrences of git show, gh pr comment, and --body-file remain. Under the repository's external-interface rule, those correctness-path assumptions must be evidenced before this contract can ship.

Follow-up tickets

  • None.

Dimensions marked N/A

    1. Dead, stale, or contradictory code — no runtime code or generated artifact is changed.
    1. SOLID and architecture — no application module or runtime architecture is changed.
    1. No workaround fixes — no product implementation or workaround is introduced.
    1. Security — no authentication, authorization, secret, input-boundary, or security-sensitive runtime path is changed.
    1. Cross-surface parity — no shared product domain model or web/mobile surface is changed; exact UI/API review-contract byte parity was verified separately.
    1. i18n — no user-facing product copy or locale behavior is changed.
    1. Design-system and layout — no UI component, styling, or layout is changed.
    1. Backend hard rules — no repository-relative src/ or tests/ path is changed.
    1. Feature documentation — no product behavior or shipped feature is changed.

@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Verdict: BLOCKING

Round 2 of 2 — final cap; no round-three path exists.

Frozen Blocking findings

  • F1 — CLOSED — .claude/skills/pr-review/SKILL.md:115: the amended PR body now records the exact git show blob identity, size, output contract, and preserved artifact, plus the successful gh pr comment --body-file invocation and complete returned URL.

Admitted round-two Blocking findings

  • F2 — OPEN — .claude/skills/pr-review/SKILL.md:185 — High: the newly touched registration handoff consumes a ROUND_ONE_REGISTERED result and returned ledger path from record-readiness.mjs --register-round-one, but the API PR body does not provide the command's complete returned key/type shape or cite the installed source line where that result is built. The cited UI PR body also contains neither register-round-one nor ROUND_ONE_REGISTERED evidence. Under the repository's external-interface rule, this correctness-critical pre-fixer ledger handoff remains unverified.

Follow-up tickets

  • None.

Dimensions marked N/A

    1. Dead, stale, or contradictory code — the touched-line set contains contract prose only.
    1. SOLID and architecture — no application module or runtime architecture is touched.
    1. No workaround fixes — no product implementation or workaround is touched.
    1. Tests and test quality — no test line is in the mechanically supplied round-two touched-line set.
    1. Security — no security-sensitive runtime path is touched.
    1. Cross-surface parity — no product domain model or web/mobile surface is touched; exact UI/API contract blob parity was separately reconfirmed.
    1. i18n — no user-facing product copy or locale behavior is touched.
    1. Design-system and layout — no UI component, styling, or layout is touched.
    1. Backend hard rules — no repository-relative src/ or tests/ path is touched.
    1. Feature documentation — no product behavior or shipped feature is touched.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 773bea2d81

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/skills/pr-review/SKILL.md
Comment thread .claude/skills/pr-review/SKILL.md Outdated
@thomasluizon

Copy link
Copy Markdown
Owner Author

@codex review

@sonarqubecloud

sonarqubecloud Bot commented Aug 8, 2026

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 45a1c1e586

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +72 to +73
line the fixer's own round-2 diff touched**. That line set is computed as `git diff <r1>..<r2>
--unified=0` and handed to the reviewer as data it cannot widen.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Include deletions in the round-two carve-out

When a fixer introduces a blocker by deleting a line, the new-side range contains no touched line: a real Git 2.43 zero-context deletion produces @@ -2 +1,0 @@. The reviewer therefore cannot admit a newly removed authorization check, validator, or shipped DTO field because there is no round-two line to satisfy this carve-out, allowing a breaking deletion to be reported CLEAN. Represent deleted old-side ranges explicitly and permit blockers anchored to them.

AGENTS.md reference: AGENTS.md:L93-L95

Useful? React with 👍 / 👎.

Comment on lines +113 to +115
gh pr view {N} --repo {OWNER/REPO} --json number,title,body,baseRefName,baseRefOid,headRefName,headRefOid,files,labels
gh pr diff {N} --repo {OWNER/REPO} > <scratchpad>/pr-{N}.diff
gh pr view {N} --repo {OWNER/REPO} --json baseRefOid,headRefOid

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Bind mutable PR evidence to the receipt

When the author edits the PR body between these calls, the second query still succeeds because it compares only base and head OIDs, which body edits do not change. The review can consequently issue a clean receipt using external-interface evidence that has since been removed or altered, even though the required evidence must be present in the PR body. Capture a digest of the reviewed body in the receipt and revalidate it during posting/readiness, or otherwise restart when it changes.

AGENTS.md reference: AGENTS.md:L104-L108

Useful? React with 👍 / 👎.

@thomasluizon

Copy link
Copy Markdown
Owner Author

DEGRADED: same-vendor review

Verdict: BLOCKING

Blocking findings

  • F1 - CONTESTED - .claude/skills/pr-review/SKILL.md:208 - High: the changed comment-only posting contract reads GitHub branch-protection state by asserting required_approving_review_count is 0 and no review status check exists in either repository, but neither this PR body nor the cited UI PR body supplies the required complete branch-protection key/type evidence and reproduction. Root AGENTS.md Code Review Rule 5 explicitly makes an unevidenced external field a review finding. This is on the correctness path because a nonzero approval requirement or review check would make comment-only posting insufficient. The same unevidenced state has already drifted at line 225: the contract says there are 18 required CI checks, while live complete responses currently contain 15 API contexts and 20 UI contexts. Fix by adding the complete redacted branch-protection evidence and exact reproducer to the PR body, and replace the hard-coded check count with wording that does not go stale.
    • Independent skeptic: finding survived; a live value cannot replace permanent PR-body evidence.
    • Cross-model second opinion: DISAGREE, high confidence. It considers the actual zero value behaviorally correct and views the missing evidence and count drift as documentation or process defects. Per the review contract, this makes F1 contested but does not silently drop the surviving High finding.

Follow-up tickets

  • None.

Changed-file coverage

  • .claude/skills/pr-review/SKILL.md: reviewed completely; F1 above.
  • .claude/skills/pr-review/rubric.md: reviewed completely; no additional P0/P1 finding.
  • Exact current UI/API skill and rubric blobs match, and the linked registration and parity enforcement tests were inspected.

Dimensions marked N/A

    1. Dead or stale code: no runtime export, branch, import, or executable application code is changed.
    1. SOLID or clean architecture: no application module or CQRS architecture is changed.
    1. Comment policy: the diff changes Markdown contract prose, not source-code comments.
    1. No-workaround or root cause: no product workaround or defensive application branch is introduced.
    1. Type safety: no TypeScript or C# type surface is changed.
    1. No console.log: no production executable code is changed.
    1. DESIGN.md or AI-slop: no apps/* UI file is changed.
    1. Parity: no web or mobile product mirror is changed; review-contract byte parity was checked under correctness.
    1. i18n: no user-facing product string or locale file is changed.
    1. Contract drift and backward compatibility: no DTO, endpoint, route, request, or response schema is changed.
    1. Security: no runtime security boundary is changed.
    1. Backend hard rules: no repository-relative src/ or tests/ path is changed.
    1. FEATURES.md parity: no user-facing feature surface is changed.

@thomasluizon
thomasluizon merged commit ea1c356 into main Aug 8, 2026
25 checks passed
@thomasluizon
thomasluizon deleted the chore/pr-review-canonical-parity branch August 8, 2026 03:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant