docs(process): add security-sensitive work lane #82

Merged
pdurlej merged 2 commits from codex/process/security-sensitive-lane into main 2026-05-05 23:24:02 +02:00
Collaborator

Canary status: wait-mode-escalation — current SHA ad24eee4b41c14d38c43ca53c4113c5d05c95bb4 reviewed with PR body; 4/6 OK, Claude CLI reviewers failed

Canary Context Pack

Product story

Security-sensitive platform work should not be optimized for speed. When work touches secrets, identity, auth, SSH, exposure, CI tokens, or trust boundaries, extra review friction protects the operator and the platform.

What changed

  • Added a Charter rule for the security-sensitive work lane.
  • Added AGENTS.md routing rules for class/security-sensitive.
  • Added proactive label protocol: the author should apply it, any reviewer may add it, and when in doubt we default into the lane.
  • Clarified sacred-path rules remain owner-only/break-glass; this lane does not authorize sacred runtime mutations.
  • Added examples contrasting ordinary small docs with small security-sensitive changes.
  • Added an atomic issue template checkbox for the class of service.
  • Created Forgejo label class/security-sensitive via codex identity and applied it to this issue/PR plus the first split issue/PR.

Why it changed

PR #80 showed that access-plane hardening can look locally correct while still carrying security review concerns. Operator ruling: more friction here is a feature. This PR makes that rule explicit for future agents.

Files touched

  • PLATFORM_CHARTER.md
  • AGENTS.md
  • .forgejo/issue_template/atomic_task.md

Relevant context

  • Operator ruling in Codex thread, 2026-05-05.
  • Superseded PR #80 split/rewrite decision.
  • AGENTS.md PR size classes and risk taxonomy.
  • Charter learning patterns.

Runtime evidence

  • Docs/process-only change.
  • git diff --check -> pass.
  • Forgejo label class/security-sensitive exists and was created via codex identity.
  • Applied label to #81/#82/#83/#84 via Forgejo API.
  • After branch update to current main, canary was rerun with --pr-description-file: 4/6 reviewers OK; tech-claude and product-claude failed via Claude CLI exit 1.

Known constraints

This adds process policy and label routing; it does not enforce the lane mechanically in CI yet. Mechanical enforcement is tracked in #86.

Explicit out-of-scope

  • CI enforcement for label/routing; tracked as #86.
  • Rewriting current #79 implementation splits.
  • Changing canary runner behavior.

Requested decision

Wait-mode escalation: operator/orchestrator can retry Claude reviewers when provider is stable, or accept prior full 6/6 approval on the pre-main-update SHA plus current 4/6 OK evidence.

Merge blockers

  • Rule is too vague to apply.
  • Rule conflicts with existing canary/PR-size policy.
  • Rule accidentally permits security work to bypass review.
  • Rule appears to authorize direct sacred-path mutation.

Spec sources read

  • PLATFORM_CHARTER.md Learning patterns / review policy.
  • AGENTS.md PR size classes and risk taxonomy.
  • .forgejo/issue_template/atomic_task.md risk class template.
  • Operator Codex thread context from 2026-05-05, for the explicit ruling.

Closes #81

Canary status: wait-mode-escalation — current SHA `ad24eee4b41c14d38c43ca53c4113c5d05c95bb4` reviewed with PR body; 4/6 OK, Claude CLI reviewers failed ## Canary Context Pack ### Product story Security-sensitive platform work should not be optimized for speed. When work touches secrets, identity, auth, SSH, exposure, CI tokens, or trust boundaries, extra review friction protects the operator and the platform. ### What changed - Added a Charter rule for the security-sensitive work lane. - Added AGENTS.md routing rules for `class/security-sensitive`. - Added proactive label protocol: the author should apply it, any reviewer may add it, and when in doubt we default into the lane. - Clarified sacred-path rules remain owner-only/break-glass; this lane does not authorize sacred runtime mutations. - Added examples contrasting ordinary small docs with small security-sensitive changes. - Added an atomic issue template checkbox for the class of service. - Created Forgejo label `class/security-sensitive` via codex identity and applied it to this issue/PR plus the first split issue/PR. ### Why it changed PR #80 showed that access-plane hardening can look locally correct while still carrying security review concerns. Operator ruling: more friction here is a feature. This PR makes that rule explicit for future agents. ### Files touched - `PLATFORM_CHARTER.md` - `AGENTS.md` - `.forgejo/issue_template/atomic_task.md` ### Relevant context - Operator ruling in Codex thread, 2026-05-05. - Superseded PR #80 split/rewrite decision. - AGENTS.md PR size classes and risk taxonomy. - Charter learning patterns. ### Runtime evidence - Docs/process-only change. - `git diff --check` -> pass. - Forgejo label `class/security-sensitive` exists and was created via codex identity. - Applied label to #81/#82/#83/#84 via Forgejo API. - After branch update to current main, canary was rerun with `--pr-description-file`: 4/6 reviewers OK; `tech-claude` and `product-claude` failed via Claude CLI exit 1. ### Known constraints This adds process policy and label routing; it does not enforce the lane mechanically in CI yet. Mechanical enforcement is tracked in #86. ### Explicit out-of-scope - CI enforcement for label/routing; tracked as #86. - Rewriting current #79 implementation splits. - Changing canary runner behavior. ### Requested decision Wait-mode escalation: operator/orchestrator can retry Claude reviewers when provider is stable, or accept prior full 6/6 approval on the pre-main-update SHA plus current 4/6 OK evidence. ### Merge blockers - Rule is too vague to apply. - Rule conflicts with existing canary/PR-size policy. - Rule accidentally permits security work to bypass review. - Rule appears to authorize direct sacred-path mutation. ## Spec sources read - `PLATFORM_CHARTER.md` Learning patterns / review policy. - `AGENTS.md` PR size classes and risk taxonomy. - `.forgejo/issue_template/atomic_task.md` risk class template. - Operator Codex thread context from 2026-05-05, for the explicit ruling. Closes #81
docs(process): add security-sensitive work lane
Some checks failed
canary-required / collect-diff (pull_request) Successful in 3s
infra-docs-drift / docs-drift (pull_request) Successful in 4s
python-ci / Python 3.11 (pull_request) Successful in 23s
python-ci / Python 3.12 (pull_request) Successful in 23s
python-ci / Python 3.13 (pull_request) Successful in 24s
workflow-lint / lint (pull_request) Successful in 4s
canary-required / canary (pull_request) Failing after 1s
5e78490977
codex force-pushed codex/process/security-sensitive-lane from 5e78490977
Some checks failed
canary-required / collect-diff (pull_request) Successful in 3s
infra-docs-drift / docs-drift (pull_request) Successful in 4s
python-ci / Python 3.11 (pull_request) Successful in 23s
python-ci / Python 3.12 (pull_request) Successful in 23s
python-ci / Python 3.13 (pull_request) Successful in 24s
workflow-lint / lint (pull_request) Successful in 4s
canary-required / canary (pull_request) Failing after 1s
to 54f6f2fec1
Some checks failed
canary-required / collect-diff (pull_request) Successful in 3s
infra-docs-drift / docs-drift (pull_request) Successful in 3s
python-ci / Python 3.11 (pull_request) Successful in 23s
python-ci / Python 3.12 (pull_request) Successful in 25s
python-ci / Python 3.13 (pull_request) Successful in 23s
workflow-lint / lint (pull_request) Successful in 4s
canary-required / canary (pull_request) Failing after 2s
2026-05-05 08:45:12 +02:00
Compare
codex force-pushed codex/process/security-sensitive-lane from 54f6f2fec1
Some checks failed
canary-required / collect-diff (pull_request) Successful in 3s
infra-docs-drift / docs-drift (pull_request) Successful in 3s
python-ci / Python 3.11 (pull_request) Successful in 23s
python-ci / Python 3.12 (pull_request) Successful in 25s
python-ci / Python 3.13 (pull_request) Successful in 23s
workflow-lint / lint (pull_request) Successful in 4s
canary-required / canary (pull_request) Failing after 2s
to 3f6945864f
Some checks failed
canary-required / collect-diff (pull_request) Successful in 4s
infra-docs-drift / docs-drift (pull_request) Successful in 3s
python-ci / Python 3.11 (pull_request) Successful in 22s
python-ci / Python 3.12 (pull_request) Successful in 24s
python-ci / Python 3.13 (pull_request) Successful in 23s
workflow-lint / lint (pull_request) Successful in 4s
canary-required / canary (pull_request) Failing after 1s
2026-05-05 08:48:07 +02:00
Compare
Merge branch 'main' into codex/process/security-sensitive-lane
Some checks failed
canary-required / collect-diff (pull_request) Successful in 3s
infra-docs-drift / docs-drift (pull_request) Successful in 4s
canary-required / canary (pull_request) Failing after 1s
ad24eee4b4
Author
Collaborator

Update after branch refresh

  • Branch #82 is now at ad24eee4b41c14d38c43ca53c4113c5d05c95bb4, merged with current main.
  • Reran canary with --pr-description-file, so reviewer context included the PR body.
  • Result: wait-mode-escalation, not code/process defer: 4/6 reviewers OK; tech-claude and product-claude failed with Claude CLI exit 1.
  • The previous false PR description: none finding disappeared for successful reviewers.
  • Follow-up #86 tracks mechanical enforcement for the class/security-sensitive label.
Update after branch refresh - Branch #82 is now at `ad24eee4b41c14d38c43ca53c4113c5d05c95bb4`, merged with current `main`. - Reran canary with `--pr-description-file`, so reviewer context included the PR body. - Result: `wait-mode-escalation`, not code/process defer: 4/6 reviewers OK; `tech-claude` and `product-claude` failed with Claude CLI exit 1. - The previous false `PR description: none` finding disappeared for successful reviewers. - Follow-up #86 tracks mechanical enforcement for the `class/security-sensitive` label.
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
2 participants
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!82
No description provided.