Skip to content

docs(assurance): plan trusted development baseline - #34

Merged
TheHalfMoon merged 14 commits into
mainfrom
plan/af01-assurance-foundation
Aug 26, 2026
Merged

docs(assurance): plan trusted development baseline#34
TheHalfMoon merged 14 commits into
mainfrom
plan/af01-assurance-foundation

Conversation

@TheHalfMoon

@TheHalfMoon TheHalfMoon commented Aug 26, 2026

Copy link
Copy Markdown
Owner

Scope

Planning-only creation of commandF's cross-cutting Assurance Foundation program after canonical CF-13 closeout.

Canonical base:

main: 8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361
tree: ffaa14fdc7a738a771ac872e566ad1609eedf2cc
CF-13: CLOSED_CANONICAL

Exact planning head at PR creation:

639ca68cbbd601e30c1174f437fda0c5598ed24a
tree: e52b3387be1e82febd55e07aa3948715a79c7aed

Why

The repository audit found a mismatch between strong commandF product proof and weaker uniform development/release enforcement:

  • canonical main currently has no branch protection/ruleset enforcement;
  • general ci.yml still uses mutable Action/tool references and ubuntu-latest, while later proof workflows already use stronger full-SHA/digest-pinned identities;
  • no checked-in cargo-deny/cargo-audit/zizmor/Scorecard assurance layer;
  • no structure-aware fuzz/mutation/coverage/flaky-test program;
  • no Windows/macOS release qualification, SemVer guard, SBOM, or build provenance/signature path;
  • no performance/resource regression program;
  • README capability surface is stale;
  • current HL7 publication truth is R5 5.0.0 published and R6 6.0.0-ballot5 draft (2026-07-17), so future version-readiness evidence must distinguish published vs draft authority.

Plan-set changes

Adds:

  • docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md
  • specs/015-af-01-trusted-development-baseline/spec.md
  • specs/015-af-01-trusted-development-baseline/plan.md
  • specs/015-af-01-trusted-development-baseline/tasks.md
  • specs/015-af-01-trusted-development-baseline/consistency.md

Reconciles:

  • docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md
  • docs/COMMAND_F_PLAN_INDEX.md

Identity / roadmap rule

AF identities are Assurance Foundation units and do not consume or rename CF product identities.

AF-01 Trusted Development Baseline
AF-02 Adversarial Test Strength
AF-03 Portability and Release Evidence
AF-04 Performance and Reliability Evidence

CF-14 remains on-prem aggregate-only source profiler
CF-15 remains verified dry-run recipes
CF-16 remains mapping analysis IR, parse-only

AF-01 is the immediate cross-cutting post-CF-13 prerequisite. CF-14 planning may proceed separately, but a new post-CF-13 product implementation must not merge before AF-01 closes.

AF-01 planned stacks

Stack A

  • repository-owned deterministic GitHub workflow trust audit;
  • full-40-hex external Action references;
  • credentialless checkout by default;
  • least workflow permissions;
  • fixed proof runner labels / retained digest-pinned proof environments;
  • complete workflow path coverage and counterexample tests.

Stack B

  • actual-graph-derived deny.toml policy;
  • pinned cargo-deny;
  • pinned RustSec cargo-audit;
  • pinned zizmor workflow/action audit;
  • explicit waiver schema and finding disposition.

Stack C

  • OpenSSF Scorecard as supplemental per-check posture evidence;
  • deterministic AF-01 proof artifact and AF01_ASSURANCE_SHA256;
  • repository main ruleset requiring PR/review/checks, resolved conversations, and blocking force-push/deletion;
  • live GitHub read-back required before AF-01 closure.

The current GitHub connector exposes ruleset reads but not writes. That limitation is not a waiver: AF-01 remains open until an authorized administrator applies the exact ruleset and live evidence proves it.

Research basis

Primary sources used by the plan include:

  • GitHub Actions secure-use guidance: full-length commit SHA is the immutable Action reference;
  • SLSA v1.2 (current approved specification);
  • Sigstore bundle verification material;
  • Rust Fuzz Book / cargo-fuzz structure-aware and differential fuzzing;
  • cargo-mutants;
  • cargo-nextest flaky-as-failure support;
  • cargo-deny and RustSec cargo-audit;
  • cargo-llvm-cov;
  • zizmor;
  • OpenSSF Scorecard;
  • HL7 FHIR publication directory.

Explicit non-goals

This PR changes no Rust, Cargo dependency, workflow, source-control setting, product semantics, CF-06 production oracle identity, CF-10 frozen corpus, or runtime authority.

AF-02/03/04 implementation is not authorized by this PR; each requires its own future Spec Kit package.

Planning gate

T005 remains incomplete until this exact final planning state has:

  • all path-applicable repository workflows terminal/green;
  • fresh CodeRabbit and Qodo review truth recorded without inventing PASS;
  • zero unresolved substantive planning findings;
  • mergeability against current canonical main.

Any content mutation supersedes prior exact-head qualification.


Summary by cubic

Adds the Assurance Foundation (AF) planning package for AF-01 (Trusted Development Baseline), preserving all CF product-slice identities and leaving product semantics unchanged.

Planning scope

  • The repository audit found product proof is stronger than development enforcement: main lacks branch protection, ci.yml uses mutable Action/tool references and ubuntu-latest, and no dependency or workflow security-gate layer exists.
  • Adds the assurance program document plus the AF-01 spec, plan, tasks, and consistency files under specs/015-af-01-trusted-development-baseline/.
  • Workflow-trust policy now covers action.yml/action.yaml metadata, full-SHA Action references, credentialless checkout, fixed runner labels, machine-checkable least-privilege permissions, and digest-pinned proof containers, with positive and counterexample tests.
  • Required-check design distinguishes skipped workflows from skipped jobs so no required check stays pending on a path-filtered PR.
  • Reconciles the master architecture and plan index docs to sequence AF units without renumbering CF-14/15/16.
  • The PR is planning-only: no Rust code, Cargo dependency, workflow, source-control setting, or product semantics change.
  • AF-01 must close before any new post-CF-13 product implementation merges; CF-14 planning may proceed in parallel.
  • AF-01 closure requires an authorized GitHub administrator to apply the main ruleset; the current connector only reads, not writes, ruleset state.
  • AF-02/03/04 remain retained program units requiring their own future packages before implementation.

Written for commit e2d6a26. Summary will update on new commits.

Review in cubic

@qodo-code-review

Copy link
Copy Markdown

ⓘ Your Qodo trial ends soon. Ask your workspace admin to set up billing to keep reviews running after the trial. Manage billing

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 9 minutes.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7fdf6f75-62fb-4538-9410-f293dc746cc3

📥 Commits

Reviewing files that changed from the base of the PR and between 8a45857 and e2d6a26.

📒 Files selected for processing (7)
  • docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md
  • docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md
  • docs/COMMAND_F_PLAN_INDEX.md
  • specs/015-af-01-trusted-development-baseline/consistency.md
  • specs/015-af-01-trusted-development-baseline/plan.md
  • specs/015-af-01-trusted-development-baseline/spec.md
  • specs/015-af-01-trusted-development-baseline/tasks.md

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Owner Author

@qodo review

Please review exact current planning head 639ca68cbbd601e30c1174f437fda0c5598ed24a. Focus on planning consistency, security/trust completeness, whether AF-01 improperly renumbers or blocks CF product authority, whether any requirement is unprovable or overstated, and whether tasks fully trace the spec/plan. Report substantive planning defects only; do not carry approval from prior PRs.

Copy link
Copy Markdown
Owner Author

@coderabbitai review

Please perform a fresh review of exact current planning head 639ca68cbbd601e30c1174f437fda0c5598ed24a. Focus on factual repository reconciliation, source/CI trust model, task completeness, roadmap identity preservation, external ruleset blocker handling, and any statement that overclaims current or future assurance. Do not carry qualification from prior heads.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Plan AF-01 trusted development baseline

📝 Documentation 🕐 40+ Minutes

Grey Divider

AI Description

• Establishes the four-stage Assurance Foundation roadmap without renumbering CF product slices.
• Defines AF-01 requirements for workflow, dependency, evidence, and branch-policy enforcement.
• Sequences implementation stacks, acceptance tests, closure evidence, and deferred assurance work.
Diagram

graph TD
  CF13["CF-13 Closed"] --> Program["Assurance Program"] --> AF01["AF-01 Planning"] --> StackA["Workflow Trust"] --> StackB["Security Gates"] --> StackC["Proof and Ruleset"] --> Closure["Canonical Closure"]
  Program --> CF14["CF-14 Planning"]
Loading
High-Level Assessment

The separate AF identity family and staged Spec Kit approach are appropriate. Folding assurance into CF-14 would blur product and repository governance authority, while a single implementation stack would make security properties harder to review and qualify independently; the proposed plan preserves product identities and creates explicit closure evidence.

Files changed (7) +1108 / -6

Documentation (7) +1108 / -6
COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.mdDefine the cross-cutting Assurance Foundation roadmap +203/-0

Define the cross-cutting Assurance Foundation roadmap

• Introduces AF-01 through AF-04, records current repository assurance gaps, and establishes ordering constraints relative to CF-13 and CF-14. It also defines evidence principles, external references, and explicit non-authorized work.

docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md

COMMAND_F_MASTER_ARCHITECTURE_V2.mdReconcile Assurance Foundation units with product architecture +37/-1

Reconcile Assurance Foundation units with product architecture

• Adds AF identities to the architecture model, preserves CF-14 through CF-16, and makes AF-01 a prerequisite for new post-CF-13 product implementation. It clarifies that canonical AF gates strengthen rather than replace existing acceptance gates.

docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md

COMMAND_F_PLAN_INDEX.mdAdd Assurance Program planning authority +41/-5

Add Assurance Program planning authority

• Extends the plan index to cover AF Spec Kit units and registers the Assurance Program as roadmap authority. It records AF-01 as the immediate planning unit and preserves later AF and CF sequencing rules.

docs/COMMAND_F_PLAN_INDEX.md

consistency.mdValidate AF-01 planning consistency and traceability +164/-0

Validate AF-01 planning consistency and traceability

• Reconciles AF-01 with architecture, constitution, repository rules, and live GitHub state. It maps requirements to tasks, resolves authority questions, and retains implementation risks and external ruleset dependencies.

specs/015-af-01-trusted-development-baseline/consistency.md

plan.mdDesign staged AF-01 assurance implementation +343/-0

Design staged AF-01 assurance implementation

• Defines three implementation stacks for workflow hardening, dependency and CI security gates, and exact-head proof plus branch enforcement. It specifies trust boundaries, deterministic and external evidence, tests, migration impact, and closure criteria.

specs/015-af-01-trusted-development-baseline/plan.md

spec.mdSpecify trusted development baseline requirements +212/-0

Specify trusted development baseline requirements

• Defines functional and non-functional requirements for immutable workflows, least authority, dependency audits, static analysis, Scorecard evidence, main branch enforcement, and retained exact-head proof. It also freezes product semantics and separates AF-02 through AF-04 non-goals.

specs/015-af-01-trusted-development-baseline/spec.md

tasks.mdSequence AF-01 implementation and convergence tasks +108/-0

Sequence AF-01 implementation and convergence tasks

• Breaks AF-01 into planning, workflow trust, security gates, proof and ruleset enforcement, and convergence phases. Each phase includes exact-head validation, independent review, merge evidence, and explicit handoffs to later assurance units.

specs/015-af-01-trusted-development-baseline/tasks.md

@qodo-code-review

Copy link
Copy Markdown

review

Please review exact current planning head 639ca68cbbd601e30c1174f437fda0c5598ed24a. Focus on planning consistency, security/trust completeness, whether AF-01 improperly renumbers or blocks CF product authority, whether any requirement is unprovable or overstated, and whether tasks fully trace the spec/plan. Report substantive planning defects only; do not carry approval from prior PRs.

I reviewed the planning head 639ca68cbbd601e30c1174f437fda0c5598ed24a as a fresh review. I found three substantive planning defects:

  1. FR-001’s permissions requirement is not implemented or fully traceable. spec.md:42-47 requires detecting overly broad workflow/job permissions, but the Stack A design only enumerates pinning, checkout credentials, runner labels, and workflow coverage (plan.md:71-80). T012/T013 likewise omit permission analysis and permission-specific negative tests (tasks.md:25-31). T010 inventories permissions, but inventory is not enforcement. As written, AF-01 could claim FR-001 complete while never checking this security property. Add an explicit audit rule, policy/documentation format, and positive/negative tests for top-level and job-level permissions.

  2. The bounded-execution requirement is not completely task-traced. spec.md:168-170 requires a timeout for every new CI job and bounded retry/timeout behavior for external checks. The plan only says to add timeouts to touched jobs (plan.md:84-91) and describes bounded CI work generally (plan.md:309-316); T022, T023, T025, T030, and T032 do not require explicit job timeouts or bounded network behavior (tasks.md:42-58). This leaves the new cargo-deny, cargo-audit, zizmor, Scorecard, and proof jobs able to close without proving NFR-003. Add per-job timeout and external retry/timeout acceptance criteria to the relevant tasks.

  3. Scorecard’s trust boundary and acceptance boundary remain underspecified. The spec permits a Scorecard run while retaining provenance (spec.md:98-102), and the plan conditionally mentions id-token: write/security-events: write (plan.md:146-157), but neither defines the event context, fork/untrusted-PR behavior, whether publishing is required, or the exact permission set that must be absent/present. The security section only says fork PRs “must be considered” (plan.md:212-224), and T030-T031 contain no executable test or configuration acceptance for that boundary (tasks.md:55-56). Consequently, “least-authority” and safe handling of untrusted PR code are not objectively provable. Specify the trigger model, fork behavior, exact permissions, and a negative governance test before accepting Scorecard evidence.

The AF/CF identity reconciliation is otherwise consistent: AF-01 does not renumber CF-14/15/16, and the documented post-CF-13 implementation gate is an explicit governance dependency rather than an accidental product-authority change. No approval is carried from prior reviews.

@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== checked-out commit =='
git rev-parse HEAD
git status --short

echo '== changed paths against declared canonical base =='
git diff --name-status 8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361..HEAD

echo '== changed document outline =='
for f in \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  specs/015-af-01-trusted-development-baseline/spec.md \
  specs/015-af-01-trusted-development-baseline/plan.md \
  specs/015-af-01-trusted-development-baseline/tasks.md \
  specs/015-af-01-trusted-development-baseline/consistency.md \
  docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md \
  docs/COMMAND_F_PLAN_INDEX.md
do
  if [ -f "$f" ]; then
    echo "--- $f"
    rg -n '^(#|##|###|####)|\b(AF-0[1-4]|CF-1[3-6]|T00[0-9]|FR-[0-9]+|SC-[0-9]+|MUST|SHALL|CLOSED|PASS|green|ruleset|workflow|SHA256|Scorecard|HL7)' "$f" || true
  else
    echo "MISSING: $f"
  fi
done

echo '== full newly added planning documents =='
for f in \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  specs/015-af-01-trusted-development-baseline/spec.md \
  specs/015-af-01-trusted-development-baseline/plan.md \
  specs/015-af-01-trusted-development-baseline/tasks.md \
  specs/015-af-01-trusted-development-baseline/consistency.md
do
  echo "--- $f"
  cat "$f"
done

echo '== reconciliation diffs =='
git diff --unified=80 8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361..HEAD -- \
  docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md docs/COMMAND_F_PLAN_INDEX.md

echo '== workflow inventory and trust-sensitive fields =='
fd -t f -e yml -e yaml .github 2>/dev/null | sort
rg -n -i -C2 '(^name:|^\s*uses:|runs-on:|permissions:|persist-credentials|pull_request_target|workflow_run|contents:\s*write|id-token:\s*write)' .github 2>/dev/null || true

echo '== baseline planning and repository facts referenced by AF-01 =='
for f in docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md docs/COMMAND_F_PLAN_INDEX.md; do
  echo "--- $f"
  rg -n -C2 '\b(CF-13|CF-14|CF-15|CF-16|AF-01|ruleset|workflow|HL7|R5|R6)\b' "$f" || true
done

echo '== exact diff =='
git diff --check 8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361..HEAD
git diff --unified=20 8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361..HEAD -- \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  specs/015-af-01-trusted-development-baseline/spec.md \
  specs/015-af-01-trusted-development-baseline/plan.md \
  specs/015-af-01-trusted-development-baseline/tasks.md \
  specs/015-af-01-trusted-development-baseline/consistency.md

Length of output: 181810


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== workflow triggers, paths, and job names =='
for f in $(fd -t f -e yml -e yaml .github/workflows | sort); do
  echo "--- $f"
  cat -n "$f"
done

echo '== composite Action metadata and local Action references =='
fd -t f -i 'action.y*ml' . | sort
for f in $(fd -t f -i 'action.y*ml' . | sort); do
  echo "--- $f"
  cat -n "$f"
done
rg -n -C3 '^\s*uses:\s*(\./|[^[:space:]]+/[^[:space:]@]+@)' .github --glob '*.{yml,yaml}' || true

echo '== authority files cited by the consistency analysis =='
for f in AGENTS.md .specify/memory/constitution.md; do
  if [ -f "$f" ]; then
    echo "--- $f"
    rg -n -C3 'independently executable|vertical|workflow|CI|review|Spec Kit|gate|merge|branch' "$f" || cat -n "$f"
  else
    echo "MISSING: $f"
  fi
done

echo '== task references and requirement trace integrity =='
python3 - <<'PY'
import re
from pathlib import Path
tasks = Path("specs/015-af-01-trusted-development-baseline/tasks.md").read_text()
defined = set(re.findall(r'\*\*(T\d{3})\*\*', tasks))
for name in ["spec.md", "plan.md", "consistency.md"]:
    p = Path("specs/015-af-01-trusted-development-baseline") / name
    text = p.read_text()
    refs = set(re.findall(r'\b(T\d{3})\b', text))
    missing = sorted(refs - defined)
    print(f"{p}: referenced={sorted(refs)} missing={missing}")
print(f"tasks defined: {sorted(defined)}")
PY

echo '== live repository rulesets and main protection =='
gh api repos/TheHalfMoon/commandF/branches/main/protection 2>&1 || true
gh api repos/TheHalfMoon/commandF/rulesets 2>&1 || true
gh api repos/TheHalfMoon/commandF/rules/branches/main 2>&1 || true

echo '== PR `#34` state, head, checks, and reviews =='
gh pr view 34 --repo TheHalfMoon/commandF --json number,state,headRefOid,baseRefOid,mergeable,reviewDecision,statusCheckRollup,reviews 2>&1 || true

Length of output: 15731


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== exact workflow files =='
fd -t f . .github/workflows -e yml -e yaml | sort

echo '== trigger, path-filter, and job-name sections =='
for f in $(fd -t f . .github/workflows -e yml -e yaml | sort); do
  echo "--- $f"
  rg -n -C4 '^(name:|on:)|^\s{2}(pull_request|push|workflow_dispatch|workflow_call):|^\s{4}(paths|paths-ignore|branches|branches-ignore):|^\s{6}- |^\s{2}[A-Za-z0-9_-]+:|^\s{4}name:' "$f" || true
done

echo '== all workflow uses forms, runner labels, and permissions =='
rg -n -C2 '^\s*(uses:|runs-on:|permissions:|persist-credentials:|container:|image:)' .github/workflows --glob '*.{yml,yaml}' || true

echo '== path-sensitive files named by the planning package =='
rg -n -C3 'paths:|paths-ignore:|\.github/workflows|docs/|specs/|Cargo\.toml|Cargo\.lock|action\.yml|action\.yaml|AGENTS\.md|constitution' \
  .github/workflows --glob '*.{yml,yaml}' || true

Length of output: 46431


🤖 web_search executed:

GitHub Actions metadata syntax composite action file name action.yml action.yaml official documentation

Length of output: 15056


@TheHalfMoon, I reviewed exact head 639ca68cbbd601e30c1174f437fda0c5598ed24a.

I found two substantive planning defects.

  1. Composite Action audit scope is incomplete.
    plan.md Line 73 and tasks.md Line 25 define the inventory as action.yml only. GitHub accepts both action.yml and action.yaml metadata files. A new composite Action in action.yaml can contain external uses: steps but evade T010, T012, T016, and AF-01 path coverage. Expand every scope definition, test fixture, and path filter to include both metadata names. GitHub documents both supported names in its metadata syntax reference.

  2. The ruleset plan does not guarantee terminal required-check results for skipped paths.
    plan.md Lines 161-169 requires path coverage for the AF-01 proof workflow. Lines 204-208 then require AF-01-selected checks on main. The existing proof workflows use pull_request.paths filters. If the new AF-01 proof check is required but its workflow is skipped for an unrelated change, GitHub has no successful terminal result for that check and can block the pull request. Add an explicit requirement and task that every check selected by T035/T036 reports a terminal result on every protected-branch pull request. The implementation can use an always-triggered lightweight gate with conditional heavy jobs, or it can select only checks that always run.

The review found no substantive defect in CF identity preservation, AF-01’s external ruleset blocker, or the stated limits on future assurance claims.

At the time of review, ci, oracle-self-smoke, and oracle-changed-profile were still in progress. The branch-protection endpoint was not available to this integration. Therefore, T005 cannot yet be qualified as complete.

You are interacting with an AI system.

@qodo-code-review

qodo-code-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Permissions audit is untasked ✓ Resolved 🐞 Bug ⛨ Security
Description
FR-001 requires the repository-owned audit to detect workflow/job permissions broader than
documented need, but T012 omits permission enforcement and T013 omits overbroad-permission
counterexamples. Stack A can therefore complete while future workflow permission escalation remains
undetected by the planned trust gate.
Code

specs/015-af-01-trusted-development-baseline/tasks.md[R27-28]

+- [ ] **T012** Implement repository-owned deterministic workflow-trust audit with complete tracked-workflow discovery, local-action allowance, full-40-hex external action requirement, checkout credential check, and proof-runner policy.
+- [ ] **T013** Add positive and counterexample tests for T012, including tag/branch/short-SHA rejection, missing `persist-credentials: false`, new-workflow coverage, malformed input fail-closed behavior, and deterministic repeat output.
Relevance

●●● Strong

Explicit FR-001 least-permission requirement is omitted from T012/T013; recent accepted CI hardening
precedents support enforcing security gaps.

PR-#12
PR-#18

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The specification makes excessive-permission detection part of FR-001, while the plan's audit
responsibility list and T012/T013 cover action refs, checkout credentials, runner policy, and
discovery but never implement or test that permission rule.

specs/015-af-01-trusted-development-baseline/spec.md[38-49]
specs/015-af-01-trusted-development-baseline/plan.md[71-80]
specs/015-af-01-trusted-development-baseline/tasks.md[25-31]
AGENTS.md[13-14]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The implementation and regression tasks for the workflow-trust audit omit FR-001's required workflow/job permission enforcement, allowing Stack A to close without a gate against future permission escalation.

## Issue Context
T010 only inventories permissions; the audit implementation and negative-test tasks must define how documented permission needs are represented and fail on broader permissions.

## Fix Focus Areas
- specs/015-af-01-trusted-development-baseline/tasks.md[25-31]
- specs/015-af-01-trusted-development-baseline/plan.md[71-80]
- specs/015-af-01-trusted-development-baseline/spec.md[42-47]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Mutable containers escape audit ✓ Resolved 🐞 Bug ⛨ Security
Description
The plan states that mutable image tags are not valid proof identities, but T012/T013 never require
the repository audit to inspect container.image or reject non-digest references. A newly added
proof workflow can therefore execute in a mutable tagged container while passing the planned
repository-wide trust audit.
Code

specs/015-af-01-trusted-development-baseline/tasks.md[R27-28]

+- [ ] **T012** Implement repository-owned deterministic workflow-trust audit with complete tracked-workflow discovery, local-action allowance, full-40-hex external action requirement, checkout credential check, and proof-runner policy.
+- [ ] **T013** Add positive and counterexample tests for T012, including tag/branch/short-SHA rejection, missing `persist-credentials: false`, new-workflow coverage, malformed input fail-closed behavior, and deterministic repeat output.
Relevance

●●● Strong

Spec explicitly rejects mutable container tags, and recent accepted review required fully qualified
digest-pinned container identity.

PR-#23
PR-#12

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The repository already relies on digest-pinned containers for proof execution, and the new spec
explicitly rejects mutable tags as proof identity; however, neither the audit responsibilities nor
its implementation/tests include container image references.

specs/015-af-01-trusted-development-baseline/spec.md[191-196]
specs/015-af-01-trusted-development-baseline/plan.md[71-80]
specs/015-af-01-trusted-development-baseline/tasks.md[25-31]
.github/workflows/cf13-quality-gate-proof.yml[35-40]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The planned workflow-trust audit does not inspect workflow container images, so mutable tagged execution environments can bypass the intended proof-identity policy.

## Issue Context
Existing proof workflows use digest-pinned containers, and the spec says mutable image tags alone are not proof identity. Add implementation and counterexample coverage for job/service container image references, scoped according to the documented proof-critical policy.

## Fix Focus Areas
- specs/015-af-01-trusted-development-baseline/tasks.md[25-31]
- specs/015-af-01-trusted-development-baseline/plan.md[71-80]
- specs/015-af-01-trusted-development-baseline/spec.md[191-196]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 13 rules
Review mode: ⚖️ Balanced

Grey Divider

Tip of the day
💡 Did you know, you can start a comment with 'qodo' or '@qodo' to chat about any finding

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread specs/015-af-01-trusted-development-baseline/tasks.md Outdated
Comment thread specs/015-af-01-trusted-development-baseline/tasks.md Outdated

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

Copy link
Copy Markdown
Owner Author

@qodo review

Please re-review exact current planning head 9db486b7f78f9d688d15745ccabdc10adcfafd6c. The prior permission-audit and mutable-container findings were accepted and remediated in spec.md, plan.md, and tasks.md. Verify the new machine-checkable permission model, effective/inherited permission fail-closed behavior, job/service container digest policy, task trace completeness, and overall planning consistency. Do not carry approval from 639ca68....

Copy link
Copy Markdown
Owner Author

@coderabbitai review

Please perform a fresh review of exact current planning head 9db486b7f78f9d688d15745ccabdc10adcfafd6c. Prior Qodo findings caused a planning-head mutation, so earlier CI/review state is superseded. Focus on factual reconciliation, permission/container trust policy, task completeness, roadmap preservation, external ruleset blocker handling, and overclaims.

@qodo-code-review

Copy link
Copy Markdown

review

Please re-review exact current planning head 9db486b7f78f9d688d15745ccabdc10adcfafd6c. The prior permission-audit and mutable-container findings were accepted and remediated in spec.md, plan.md, and tasks.md. Verify the new machine-checkable permission model, effective/inherited permission fail-closed behavior, job/service container digest policy, task trace completeness, and overall planning consistency. Do not carry approval from 639ca68....

Re-review completed against the stated planning head 9db486b7f78f9d688d15745ccabdc10adcfafd6c; I did not carry approval from 639ca68....

  • Permission model: The remediation is present. spec.md:45, spec.md:58, and spec.md:168 require checked-in, machine-checkable workflow/job permission needs rather than prose-only review. plan.md:78 and plan.md:84 require effective permission normalization and fail-closed handling of inherited/default authority.
  • Inherited permissions: The requirement is explicitly covered in spec.md:201 and tested in spec.md:186; tasks.md:27-28 also assigns implementation and negative-test work for normalization, overbroad permissions, and unresolved inherited/default state.
  • Container policy: Job and service containers are both covered by spec.md:46, spec.md:60, spec.md:187-199 and plan.md:79, plan.md:177. The task trace includes implementation, regression, and proof testing through T012-T016 and T032-T034.
  • Task trace: FR-001 through FR-010 and NFR-001 through NFR-005 are mapped in consistency.md:128-144; the former permission-audit and mutable-container gaps are represented in the relevant task ranges and no longer appear as unassigned requirements.
  • Planning consistency: The package consistently preserves CF-14/15/16 identities, keeps CF-06/CF-10 authority unchanged, separates live ruleset evidence from checked-in policy, and leaves implementation authority ungranted (consistency.md:155-164).

One minor traceability improvement remains: NFR-002 is mapped only to T014-T015, T030-T032 in consistency.md:141, although the core machine-checkable permission model and fail-closed normalization are designed in T011-T012 and tested in T013. That mapping should include T011-T013 for complete trace precision.

Conclusion: The previously reported permission-audit and mutable-container issues are remediated at the planning level. I find no new substantive planning contradiction; the package remains PLANNING_CANDIDATE, not an implementation approval. The NFR-002 trace should be corrected before calling the planning package fully consistent.

@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

expected='9db486b7f78f9d688d15745ccabdc10adcfafd6c'
actual="$(git rev-parse HEAD)"
echo "HEAD=$actual"
if [ "$actual" != "$expected" ]; then
  echo "ERROR: expected $expected" >&2
  exit 2
fi

base='8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361'
echo '== changed paths =='
git diff --name-status "$base..HEAD"

echo '== planning document outlines =='
for f in \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  specs/015-af-01-trusted-development-baseline/spec.md \
  specs/015-af-01-trusted-development-baseline/plan.md \
  specs/015-af-01-trusted-development-baseline/tasks.md \
  specs/015-af-01-trusted-development-baseline/consistency.md \
  docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md \
  docs/COMMAND_F_PLAN_INDEX.md
do
  echo "--- $f"
  if [ -f "$f" ]; then
    rg -n '^(#|##|###|####)|\b(AF-0[1-4]|CF-1[3-6]|T0[0-9]{2}|FR-[0-9]+|SC-[0-9]+|MUST|SHALL|ruleset|permissions|container|digest|SHA256|PASS|green|HL7|R5|R6)\b' "$f" || true
  else
    echo "MISSING"
  fi
done

echo '== planning document content =='
for f in \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  specs/015-af-01-trusted-development-baseline/spec.md \
  specs/015-af-01-trusted-development-baseline/plan.md \
  specs/015-af-01-trusted-development-baseline/tasks.md \
  specs/015-af-01-trusted-development-baseline/consistency.md
do
  echo "--- $f"
  cat -n "$f"
done

echo '== reconciliation diff =='
git diff --unified=60 "$base..HEAD" -- \
  docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md docs/COMMAND_F_PLAN_INDEX.md

echo '== workflow inventory and security-relevant syntax =='
fd -t f -e yml -e yaml .github 2>/dev/null | sort
rg -n -i -C3 '(^name:|^\s*uses:|runs-on:|permissions:|persist-credentials:|pull_request_target:|workflow_run:|contents:\s*write|id-token:\s*write|container:|image:|services:)' \
  .github --glob '*.{yml,yaml}' 2>/dev/null || true

echo '== task reference integrity =='
python3 - <<'PY'
import re
from pathlib import Path
root=Path('specs/015-af-01-trusted-development-baseline')
tasks=(root/'tasks.md').read_text()
defined=set(re.findall(r'\*\*(T\d{3})\*\*',tasks))
for p in [root/'spec.md',root/'plan.md',root/'consistency.md']:
    refs=set(re.findall(r'\bT\d{3}\b',p.read_text()))
    print(f'{p}: missing task definitions: {sorted(refs-defined)}')
print(f'defined tasks: {sorted(defined)}')
PY

echo '== diff whitespace check =='
git diff --check "$base..HEAD"

echo '== live ruleset and PR state =='
gh api repos/TheHalfMoon/commandF/rulesets 2>&1 || true
gh api repos/TheHalfMoon/commandF/branches/main/protection 2>&1 || true
gh pr view 34 --repo TheHalfMoon/commandF \
  --json headRefOid,baseRefOid,mergeable,reviewDecision,statusCheckRollup,reviews 2>&1 || true

Length of output: 143500


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== Action metadata files, including both supported metadata extensions =='
fd -t f -i 'action.y*ml' . | sort | while IFS= read -r f; do
  echo "--- $f"
  cat -n "$f"
done

echo '== all workflow triggers, filters, and job names =='
fd -t f -e yml -e yaml .github/workflows | sort | while IFS= read -r f; do
  echo "--- $f"
  cat -n "$f"
done

echo '== plan/task changes since the earlier reviewed planning head =='
git diff --unified=30 639ca68cbbd601e30c1174f437fda0c5598ed24a..HEAD -- \
  specs/015-af-01-trusted-development-baseline/spec.md \
  specs/015-af-01-trusted-development-baseline/plan.md \
  specs/015-af-01-trusted-development-baseline/tasks.md \
  specs/015-af-01-trusted-development-baseline/consistency.md

echo '== action metadata and required-check coverage references =='
rg -n -i -C3 \
  'action\.ya?ml|composite action|required status|status check|terminal result|always-trigger|paths:|paths-ignore:|pull_request:' \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  specs/015-af-01-trusted-development-baseline \
  .github/workflows --glob '*.{md,yml,yaml}'

echo '== complete permissions and container requirement-to-task trace =='
python3 - <<'PY'
from pathlib import Path
for name in ('spec.md', 'plan.md', 'tasks.md', 'consistency.md'):
    p=Path('specs/015-af-01-trusted-development-baseline')/name
    print(f'--- {p}')
    for n, line in enumerate(p.read_text().splitlines(),1):
        if any(s in line.lower() for s in ('permission','container','inherit','default','status check','path coverage','action.yml','action.yaml')):
            print(f'{n}: {line}')
PY

Length of output: 5328


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== all workflow triggers, filters, and job names =='
fd -t f -e yml -e yaml . .github/workflows | sort | while IFS= read -r f; do
  echo "--- $f"
  cat -n "$f"
done

echo '== exact changes from the earlier reviewed planning head =='
git diff --unified=30 639ca68cbbd601e30c1174f437fda0c5598ed24a..HEAD -- \
  specs/015-af-01-trusted-development-baseline/spec.md \
  specs/015-af-01-trusted-development-baseline/plan.md \
  specs/015-af-01-trusted-development-baseline/tasks.md \
  specs/015-af-01-trusted-development-baseline/consistency.md

echo '== action metadata and required-check coverage references =='
rg -n -i -C3 \
  'action\.ya?ml|composite action|required status|status check|terminal result|always-trigger|paths:|paths-ignore:|pull_request:' \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  specs/015-af-01-trusted-development-baseline \
  .github/workflows --glob '*.{md,yml,yaml}' || true

echo '== permission/container requirement-to-task trace =='
python3 - <<'PY'
from pathlib import Path
for name in ('spec.md', 'plan.md', 'tasks.md', 'consistency.md'):
    p=Path('specs/015-af-01-trusted-development-baseline')/name
    print(f'--- {p}')
    for n, line in enumerate(p.read_text().splitlines(), 1):
        if any(s in line.lower() for s in (
            'permission', 'container', 'inherit', 'default',
            'status check', 'path coverage', 'action.yml', 'action.yaml'
        )):
            print(f'{n}: {line}')
PY

Length of output: 118161


@TheHalfMoon, I reviewed exact head 9db486b7f78f9d688d15745ccabdc10adcfafd6c.

I found two substantive planning defects.

  1. Composite Action coverage excludes action.yaml.
    plan.md Line 73 limits the audit inventory to repository composite action.yml files. Line 172 also limits AF-01 proof path coverage to action.yml. GitHub supports both action.yml and action.yaml for Action metadata. A future composite Action in action.yaml could contain external uses: references and bypass the workflow-trust audit, regressions, and AF-01 proof trigger. Require both metadata filenames in all inventory, audit, regression-fixture, and path-coverage definitions.

  2. The required-check plan still permits skipped checks to block protected pull requests.
    plan.md Line 210 and tasks.md Lines 60-61 require AF-01-selected checks on main. However, the current proof workflows use pull_request.paths filters. The planned AF-01 proof workflow also has path coverage. If T035/T036 selects a path-filtered check, an unrelated pull request can skip that workflow and never receive its terminal result. GitHub can then block the pull request on the required check. Add a requirement, task, and counterexample proving that every check selected by the ruleset reports a terminal result on every protected-branch pull request. An always-triggered lightweight gate can conditionally depend on heavier path-filtered jobs.

The new machine-checkable permission model is consistent across the specification, plan, tasks, and test plan. It includes effective/inherited permission fail-closed behavior. The job/service container digest policy is also consistently specified and traced.

I found no substantive defect in CF identity preservation, the CF-14 planning exception, the external ruleset blocker, or the stated limits on AF-01 assurance claims.

The live ruleset read returned no rulesets. The branch-protection endpoint was unavailable to this integration with HTTP 403. The branch was mergeable, but ci, oracle-self-smoke, and oracle-changed-profile were still in progress at inspection time. Therefore, T005 cannot yet be qualified as complete.

You are interacting with an AI system.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

Copy link
Copy Markdown
Owner Author

@qodo review

Please re-review exact current planning head e2d6a26188e9c375aac8006d672e131c9859bbef. The second review findings were accepted: both action.yml and action.yaml are now recursively governed, and required-check topology now forbids selecting whole workflows that can remain pending due to path/branch/commit-message skips. Verify these remediations, task trace, and that no new substantive planning gap remains. Do not carry approval from earlier heads.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

Copy link
Copy Markdown
Owner Author

@coderabbitai review

Please review exact current planning head e2d6a26188e9c375aac8006d672e131c9859bbef. Prior attempts were rate-limited; no CodeRabbit PASS is claimed. Focus on the final action metadata discovery, universally terminal required-check topology, permission/container policy, task completeness, and any factual/authority overclaim.

@qodo-code-review

Copy link
Copy Markdown

review

Please re-review exact current planning head e2d6a26188e9c375aac8006d672e131c9859bbef. The second review findings were accepted: both action.yml and action.yaml are now recursively governed, and required-check topology now forbids selecting whole workflows that can remain pending due to path/branch/commit-message skips. Verify these remediations, task trace, and that no new substantive planning gap remains. Do not carry approval from earlier heads.

Re-reviewed the planning package as the current candidate, without carrying approval from earlier heads. No new substantive planning gap found.

  • action.yml / action.yaml remediation is complete: recursive discovery of both filenames is required in spec.md:40,48, plan.md:73-82,167-176, and tasks T010, T012, T013, T016, T027, T032, and T034.
  • Required-check topology remediation is complete: spec.md:108-121 prohibits non-universal required checks; plan.md:200-211 distinguishes skipped workflows from skipped jobs and requires an always-triggered aggregation gate where needed; tasks T035-T040 cover determination, regression, ruleset configuration, live verification, and negative governance proof.
  • Traceability is consistent: consistency.md:150-166 maps every FR/NFR to implementation and evidence tasks, including FR-001, FR-007, determinism, least authority, bounded execution, and stackability.
  • Earlier findings are addressed: the package explicitly records both accepted correction areas in consistency.md:140-146; the findings index shows findings 1 and 2 already implemented.
  • Planning boundaries remain sound: implementation authority is not granted, live main enforcement remains a closure prerequisite, and AF-02/03/04 work is not falsely claimed complete.

This is a clean planning re-review, not implementation or AF-01 closure approval. The authored package still correctly requires exact-head CI, independent review, and live GitHub evidence before canonical status.

@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

expected='e2d6a26188e9c375aac8006d672e131c9859bbef'
actual="$(git rev-parse HEAD)"
printf 'HEAD=%s\n' "$actual"
test "$actual" = "$expected"

base='8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361'
root='specs/015-af-01-trusted-development-baseline'

echo '== changed paths from canonical base =='
git diff --name-status "$base..HEAD"

echo '== document outlines =='
for f in \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  "$root/spec.md" "$root/plan.md" "$root/tasks.md" "$root/consistency.md" \
  docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md docs/COMMAND_F_PLAN_INDEX.md
do
  printf '\n--- %s\n' "$f"
  rg -n '^(#|##|###|####)|\b(AF-0[1-4]|CF-1[3-6]|T0[0-9]{2}|FR-[0-9]+|SC-[0-9]+|MUST|SHALL|ruleset|permission|container|digest|action\.ya?ml|required check|terminal|HL7|R5|R6)\b' "$f" || true
done

echo '== AF-01 planning package =='
for f in "$root/spec.md" "$root/plan.md" "$root/tasks.md" "$root/consistency.md"; do
  printf '\n--- %s\n' "$f"
  cat -n "$f"
done

echo '== amendments since prior reviewed head =='
git diff --check 9db486b7f78f9d688d15745ccabdc10adcfafd6c..HEAD
git diff --unified=35 9db486b7f78f9d688d15745ccabdc10adcfafd6c..HEAD -- \
  "$root/spec.md" "$root/plan.md" "$root/tasks.md" "$root/consistency.md"

echo '== workflow and action metadata inventory =='
fd -t f -e yml -e yaml .github | sort
fd -t f -i 'action.y*ml' . | sort

echo '== workflow trust-relevant fields =='
rg -n -i -C3 \
  '(^name:|^\s*uses:|runs-on:|permissions:|persist-credentials:|pull_request_target:|workflow_run:|container:|services:|image:|^\s*on:|pull_request:|paths:|paths-ignore:|branches:|branches-ignore:|if:)' \
  .github --glob '*.{yml,yaml}' || true

echo '== requirement/task trace integrity =='
python3 - <<'PY'
import re
from pathlib import Path
root=Path('specs/015-af-01-trusted-development-baseline')
tasks=(root/'tasks.md').read_text()
defined=set(re.findall(r'\*\*(T\d{3})\*\*', tasks))
print('defined:', sorted(defined))
for name in ('spec.md','plan.md','consistency.md'):
    text=(root/name).read_text()
    refs=set(re.findall(r'\bT\d{3}\b', text))
    print(f'{name}: referenced={sorted(refs)} missing={sorted(refs-defined)}')
for prefix in ('FR-', 'SC-'):
    spec=set(re.findall(rf'\b{prefix}\d+\b',(root/'spec.md').read_text()))
    taskrefs=set(re.findall(rf'\b{prefix}\d+\b',tasks))
    print(f'{prefix}: spec={sorted(spec)} taskrefs={sorted(taskrefs)} untraced={sorted(spec-taskrefs)}')
PY

echo '== reconciliation references =='
rg -n -C3 '\b(AF-0[1-4]|CF-1[3-6]|HL7|R5|R6|ruleset|Assurance Foundation)\b' \
  docs/COMMAND_F_ASSURANCE_PROGRAM_2026-08-26.md \
  docs/COMMAND_F_MASTER_ARCHITECTURE_V2.md \
  docs/COMMAND_F_PLAN_INDEX.md

echo '== current GitHub state =='
gh api repos/TheHalfMoon/commandF/rulesets 2>&1 || true
gh api repos/TheHalfMoon/commandF/branches/main/protection 2>&1 || true
gh pr view 34 --repo TheHalfMoon/commandF \
  --json headRefOid,baseRefOid,mergeable,reviewDecision,statusCheckRollup,reviews 2>&1 || true

Length of output: 214143


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== tracked Action metadata files =='
git ls-files | awk 'BEGIN { IGNORECASE=1 } /(^|\/)action\.ya?ml$/ { print }' | sort

echo '== tracked Action metadata content =='
while IFS= read -r f; do
  printf '\n--- %s\n' "$f"
  cat -n "$f"
done < <(git ls-files | awk 'BEGIN { IGNORECASE=1 } /(^|\/)action\.ya?ml$/ { print }' | sort)

echo '== external or local Action/reusable-workflow references in tracked workflow and metadata files =='
while IFS= read -r f; do
  printf '\n--- %s\n' "$f"
  rg -n -C2 '^\s*uses:\s*' "$f" || true
done < <(
  {
    git ls-files '.github/workflows/*.yml' '.github/workflows/*.yaml'
    git ls-files | awk 'BEGIN { IGNORECASE=1 } /(^|\/)action\.ya?ml$/ { print }'
  } | sort -u
)

echo '== constitution and AGENTS authority text =='
for f in .specify/memory/constitution.md AGENTS.md; do
  printf '\n--- %s\n' "$f"
  rg -n -C3 'independently executable|verification result|vertical|Spec Kit|review|exact.head|merge' "$f" || true
done

echo '== whitespace and planning package status =='
git diff --check 8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361..HEAD
git status --short

echo '== current PR `#34` check state =='
gh pr view 34 --repo TheHalfMoon/commandF \
  --json headRefOid,mergeable,reviewDecision,statusCheckRollup,reviews 2>&1 || true

Length of output: 1748


🏁 Script executed:

#!/bin/bash
set -euo pipefail

tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXIT

git ls-files | awk 'BEGIN { IGNORECASE=1 } /(^|\/)action\.ya?ml$/ { print }' | sort > "$tmp"

echo '== tracked Action metadata files =='
cat "$tmp"

echo '== tracked Action metadata content =='
while IFS= read -r f; do
  [ -n "$f" ] || continue
  printf '\n--- %s\n' "$f"
  cat -n "$f"
done < "$tmp"

echo '== Action/reusable-workflow references in tracked workflow and metadata files =='
{
  git ls-files '.github/workflows/*.yml' '.github/workflows/*.yaml'
  cat "$tmp"
} | sort -u > "${tmp}.inputs"
while IFS= read -r f; do
  [ -n "$f" ] || continue
  printf '\n--- %s\n' "$f"
  rg -n -C2 '^\s*uses:\s*' "$f" || true
done < "${tmp}.inputs"
rm -f "${tmp}.inputs"

echo '== constitution and AGENTS authority text =='
for f in .specify/memory/constitution.md AGENTS.md; do
  printf '\n--- %s\n' "$f"
  rg -n -i -C3 'independently executable|verification result|vertical|Spec Kit|review|exact.head|merge' "$f" || true
done

echo '== whitespace and planning package status =='
git diff --check 8a45857bf31c4acae57fdfb1e3cdde3d0f7d0361..HEAD
git status --short

echo '== current PR `#34` check state =='
gh pr view 34 --repo TheHalfMoon/commandF \
  --json headRefOid,mergeable,reviewDecision,statusCheckRollup,reviews 2>&1 || true

Length of output: 15883


@TheHalfMoon, I reviewed exact head e2d6a26188e9c375aac8006d672e131c9859bbef.

I found no substantive planning defect.

The package now consistently governs both action.yml and action.yaml at any repository depth. The current tracked metadata file is action.yml. It has no external uses: reference.

The required-check design is complete. FR-007, the plan test cases, and T035-T040 require every selected required check to report a terminal result for every protected-branch PR at the current head. They prohibit direct selection of a whole path-filtered workflow that can remain pending. They also require an always-triggered aggregation gate when conditional validation must contribute to merge policy.

The permission and container policy is complete at planning level. The audit must normalize effective permissions, fail closed on unresolved inherited/default authority, compare against machine-checkable policy, and enforce digests for proof-critical job and service containers. T011-T016 and the positive and negative test cases trace these requirements.

The AF identities preserve CF-14, CF-15, and CF-16. AF-01 does not authorize CF-14 implementation. The external ruleset limitation remains a blocker, not a waiver. The documents do not claim immutable GitHub-hosted runner images, universal dependency security, a Scorecard correctness threshold, or AF-02/AF-03/AF-04 completion.

git diff --check reported no whitespace errors. The PR is mergeable.

T005 is still incomplete. At inspection time, rust, oracle-self-smoke, and oracle-changed-profile were in progress. The live ruleset read returned no rulesets, and the branch-protection endpoint returned HTTP 403. The visible Qodo review is for an earlier head, so it cannot qualify this head.

You are interacting with an AI system.

@TheHalfMoon
TheHalfMoon merged commit eeecb0b into main Aug 26, 2026
6 checks passed
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