docs(ci): record Infisical Token Auth runner lessons #275

Merged
pdurlej merged 1 commit from codex/docs/runner-contract-infisical-lessons into main 2026-05-14 09:44:22 +02:00
Collaborator

Canary status: missing - docs-only Lite PR; operator merge after spot-check.

Canary Context Pack

Product story

The Infisical Token Auth recovery burned too much time because the runner token expired silently and the failure looked like an ACL/method problem. This PR records the operational lesson where future agents will look first.

What changed

Added docs/ci/runner-contract.md section Lessons learned - Infisical Token Auth recovery (2026-05-13/14) covering:

  • minimum TTL for persistent runner tokens;
  • Token Auth + scoped ACL conditions;
  • expiry tracking and reminder issue practice;
  • v0.158.x raw-secrets/glob behavior;
  • RS2000 public-edge 403 vs local Infisical endpoint finding.

Why it changed

The 2026-05-14 close-out found that the previous short TTL was the root cause of repeated 403s, and that RS2000 cannot currently use the public Infisical edge path for the runner.

Files touched

  • docs/ci/runner-contract.md

Relevant context

  • #265 - Token Auth migration
  • #272 / #273 - silent direct-PAT fallback blocker and fix
  • #274 - pre-expiry rotation reminder
  • #142 - RS2000 cutover lane

Runtime evidence

No runtime changes in this PR.

Evidence gathered during the dispatch:

  • local token file mode 0600, size 333 bytes;
  • RS2000 token file mode 0600, owner forgejo-deploy:forgejo-deploy, size 333 bytes;
  • same token returns HTTP 200 from Mac and via local Infisical container endpoint on RS2000;
  • public https://infisical.pdurlej.com returns HTTP 403 from RS2000.

Known constraints

The operational smoke passed after #273 merged. This doc records the lesson; #276 tracks the soak start in STATUS_NOW.md.

Explicit out-of-scope

  • No workflow_dispatch smoke.
  • No direct PAT removal.
  • No production apply.
  • No Infisical UI/ACL changes.

Requested decision

Merge after spot-check if the lesson is accurate and useful.

Merge blockers

  • Any claim that soak has started before #273 + smoke.
  • Any secret value or token body.

Spec sources read

  • docs/ci/runner-contract.md - target doc.
  • scripts/forgejo/deploy-runner-install-infisical-token-auth - install behavior.
  • control-plane/platformctl/apply.py - resolver behavior.
  • state/codex-prep/rs2000-closeout-handover-2026-05-12.md - prior failure notes.
Canary status: missing - docs-only Lite PR; operator merge after spot-check. ## Canary Context Pack ### Product story The Infisical Token Auth recovery burned too much time because the runner token expired silently and the failure looked like an ACL/method problem. This PR records the operational lesson where future agents will look first. ### What changed Added `docs/ci/runner-contract.md` section `Lessons learned - Infisical Token Auth recovery (2026-05-13/14)` covering: - minimum TTL for persistent runner tokens; - Token Auth + scoped ACL conditions; - expiry tracking and reminder issue practice; - v0.158.x raw-secrets/glob behavior; - RS2000 public-edge 403 vs local Infisical endpoint finding. ### Why it changed The 2026-05-14 close-out found that the previous short TTL was the root cause of repeated 403s, and that RS2000 cannot currently use the public Infisical edge path for the runner. ### Files touched - `docs/ci/runner-contract.md` ### Relevant context - #265 - Token Auth migration - #272 / #273 - silent direct-PAT fallback blocker and fix - #274 - pre-expiry rotation reminder - #142 - RS2000 cutover lane ### Runtime evidence No runtime changes in this PR. Evidence gathered during the dispatch: - local token file mode `0600`, size `333 bytes`; - RS2000 token file mode `0600`, owner `forgejo-deploy:forgejo-deploy`, size `333 bytes`; - same token returns HTTP 200 from Mac and via local Infisical container endpoint on RS2000; - public `https://infisical.pdurlej.com` returns HTTP 403 from RS2000. ### Known constraints The operational smoke passed after #273 merged. This doc records the lesson; #276 tracks the soak start in STATUS_NOW.md. ### Explicit out-of-scope - No workflow_dispatch smoke. - No direct PAT removal. - No production apply. - No Infisical UI/ACL changes. ### Requested decision Merge after spot-check if the lesson is accurate and useful. ### Merge blockers - Any claim that soak has started before #273 + smoke. - Any secret value or token body. ## Spec sources read - `docs/ci/runner-contract.md` - target doc. - `scripts/forgejo/deploy-runner-install-infisical-token-auth` - install behavior. - `control-plane/platformctl/apply.py` - resolver behavior. - `state/codex-prep/rs2000-closeout-handover-2026-05-12.md` - prior failure notes.
docs(ci): record Infisical Token Auth runner lessons
Some checks failed
canary-required / collect-diff (pull_request) Failing after 3s
infra-docs-drift / docs-drift (pull_request) Successful in 5s
workflow-lint / lint (pull_request) Successful in 4s
base-is-main / guard (pull_request) Successful in 1s
canary-required / canary (pull_request) Has been skipped
92ced784f0
Sign in to join this conversation.
No reviewers
No labels
W6d-automerge-calibration
agent/claude-code
agent/codex
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
automerge-candidate
class/security-sensitive
cutover-gate
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
iterating
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
large-impact
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
meta
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
needs-operator-decision
needs-triage
not-ready
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
operator-emotional
owner-attention
phase/02
phase/03
priority:p0
priority:p1
priority:p2
priority:p3
proposed
ready-for-agent
ready-for-operator
recovery
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
risk/exposure
risk/process
risk/product
risk/runtime
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:operator-needed
status:parked
tier/full
tier/lite
tier/stacked
tier:0-platform-substrate
tier:1-iskra-value-layer
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pdurlej/platform!275
No description provided.