Skip to content

chore(pr): add PR template with "New runtime I/O" + online/offline test split - #89

Open
antkawam wants to merge 2 commits into
mainfrom
chore/pr-template-evidence-gate
Open

chore(pr): add PR template with "New runtime I/O" + online/offline test split#89
antkawam wants to merge 2 commits into
mainfrom
chore/pr-template-evidence-gate

Conversation

@antkawam

@antkawam antkawam commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • Introduce .github/pull_request_template.md with mandatory "New runtime I/O" section and offline/online test-plan split.
  • Companion to the in-flight IAM fix (fix(infra): grant bedrock:GetInferenceProfile + AIP resource scope (1.9.1) #86) and the local .claude/-side discipline changes (Release Evidence Gate in .claude/CLAUDE.md, [online]/[offline] criteria in /spec, evidence-capture step in /deploy).

New runtime I/O

  • AWS API calls: none new
  • Env vars: none new
  • External network: none new
  • Schema: none new
  • Background loops: none new
  • Dependencies: none new

Pure documentation / process change.

Why

PR #84 (v1.9.0) shipped a CDK IAM gap that made AIP overrides silently no-op. The bug class: change introduces a new runtime I/O the IaC/config doesn't grant; integration tests mock the boundary; the failure mode is a happy 200 response. Three release gates (CI, staging, prod) passed it through because none observed the new I/O against the deployed environment.

This template forces every PR to enumerate the runtime I/O it introduces and to split tests into offline (mocks) vs online (deployed environment, recorded evidence). The doc-IaC contract becomes a reviewer gate: a permission listed in docs/ but not granted in infra/stack.ts is an automatic block.

Test plan

Offline:

  • Template file created at .github/pull_request_template.md
  • GitHub will pick this up on the next gh pr create (the file path is the documented convention)

Online:

  • N/A — pure docs / process change. No deployed-environment evidence applicable.

antkawam added 2 commits June 8, 2026 13:56
….9.1)

PR #84 (per-endpoint per-model AIP overrides, v1.9.0) shipped with two
gaps in the CDK task role policy:

1. `bedrock:GetInferenceProfile` action was never granted. The action is
   required by the new health-loop union (resolves every AIP override
   per endpoint), the auto-migration on startup (introspects legacy
   `inference_profile_arn` ARNs to derive the foundation model), and the
   compat shim on `POST /admin/endpoints` (same path).

2. The `bedrock:InvokeModel*` resource scope only included system
   inference profiles (`inference-profile/*anthropic.claude*`), not
   user-created AIPs (`application-inference-profile/*`). So even with
   GetInferenceProfile granted, dispatching a request through an AIP
   override would fail with AccessDeniedException at InvokeModel time.

Symptom on prod: adding any AIP override caused that endpoint's
health check to fail (GetInferenceProfile → AccessDenied), the endpoint
got marked unhealthy, and team requests routed to it fell back to the
default routing path — the override silently never applied.

The deployed prod task role was inspected via
`aws iam get-role-policy` to confirm. docs/endpoints.md already lists
GetInferenceProfile in the required-permissions table from PR #84;
the public docs were correct, the CDK was the gap.

Patch bumps the gateway and CLI to 1.9.1.
…st split

PR #84 (v1.9.0) shipped a CDK IAM gap that made AIP overrides silently
no-op — request returned 200, dispatch fell back to CRI. The bug class:
a change introduces new runtime I/O (AWS API call, env var, network
reach, schema) that integration tests can't see because the boundary
is mocked AND the failure mode at the API surface is indistinguishable
from happy path.

This PR template forces every change to enumerate its new runtime I/O
and split the test plan into offline (mocks/CI) vs online (deployed
environment with recorded evidence). The reviewer gate is: if the doc
adds a "Required permissions" entry but `infra/stack.ts` doesn't grant
it (or vice versa), block.

Companion changes (local, in `.claude/`):
- `.claude/CLAUDE.md` — Release Evidence Gate section
- `.claude/skills/spec/SKILL.md` — `[online]` vs `[offline]` criteria
- `.claude/skills/deploy/SKILL.md` — evidence-capture step on --staging,
  gate on --prod-release
- `.claude/deploys/` — evidence ledger directory + format README
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