Skip to content

Commit 8b75365

Browse files
committed
docs(security): record gitleaks enforcement evidence
1 parent be36bb8 commit 8b75365

2 files changed

Lines changed: 32 additions & 26 deletions

File tree

dev/plans/0.5.15/10-gitleaks-ci-secret-scan-plan.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# 0.5.15 Slice 10 — Gitleaks secret-scan implementation plan
22

3-
**Status:** repository-controlled implementation complete locally — updated
4-
2026-08-15. External GitHub merge-blocking enforcement remains pending; see
5-
`10-gitleaks-ci-secret-scan-status.md` for the exact evidence and limitation.
3+
**Status:** implemented and externally enforced — updated 2026-08-15. `main`
4+
now requires the stable Gitleaks check and CODEOWNERS review; the feature PR
5+
remains subject to that review and ordinary CI. See
6+
`10-gitleaks-ci-secret-scan-status.md` for exact evidence and limitations.
67

78
## Admission check
89

dev/plans/0.5.15/10-gitleaks-ci-secret-scan-status.md

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# 0.5.15 Slice 10 — Gitleaks secret-scan status
22

3-
**Status:** repository-controlled implementation complete locally — 2026-08-15.
4-
GitHub branch-protection and code-owner enforcement are **not active yet**;
5-
authenticated external verification and enforcement are in progress.
3+
**Status:** implemented and externally enforced — 2026-08-15. GitHub `main`
4+
now requires `gitleaks / scan` and one CODEOWNERS approval. PR #49 remains
5+
properly blocked pending that review and its ordinary CI completion.
66

77
## Ratified contract and changed controls
88

@@ -52,26 +52,31 @@ metadata and scanned zero commits. Re-running with that metadata mounted
5252
read-only produced the 686-commit clean result above; this was a test-topology
5353
correction, not a scanner suppression.
5454

55-
## Outstanding external acceptance criteria
56-
57-
The local/repository-control portion is ready for focused commit and push. The
58-
following remains incomplete and must not be represented as active:
59-
60-
1. A GitHub administrator must configure `main` to require the stable
61-
`gitleaks / scan` check and code-owner review for the three scanner-control
62-
files.
63-
2. A disposable PR must show a redacted CI failure for the synthetic fixture,
64-
then a green result after removal; manual-dispatch, main-push, and fork-PR
65-
behavior must be evidenced without repository secrets or elevated token.
66-
3. The branch rule must prove that a scanner/baseline change cannot merge
67-
without its designated owner.
68-
69-
Authenticated `gh` inspection confirms that `main` currently has no legacy
70-
branch-protection rule. The only `protect-main` ruleset is disabled and covers
71-
deletion/non-fast-forward only. Apply the narrow required-check/code-owner rule
72-
only after the feature PR has produced the stable `gitleaks / scan` check, then
73-
record the resulting PR/run URLs and branch-rule response before closing Slice
74-
10 as merge-blocking.
55+
## External enforcement evidence
56+
57+
| Acceptance boundary | Evidence |
58+
| --- | --- |
59+
| Green PR scan | [PR #49](https://github.com/coreyt/airlock/pull/49) completed its `gitleaks / scan` job successfully: [run 31917799169](https://github.com/coreyt/airlock/actions/runs/31917799169). |
60+
| Manual dispatch | The same workflow passed from `workflow_dispatch` on the feature branch: [run 31918015039](https://github.com/coreyt/airlock/actions/runs/31918015039). |
61+
| Red CI proof | Disposable [PR #50](https://github.com/coreyt/airlock/pull/50) contained only the synthetic non-usable fixture. Its [scan job](https://github.com/coreyt/airlock/actions/runs/31917967497/job/95092956354) failed as expected, while GitHub reported `BLOCKED` and `REVIEW_REQUIRED`. The PR was closed and its remote/local branch and worktree were deleted immediately. |
62+
| Required check | `main` branch protection now requires strict `gitleaks / scan`; the context is explicitly bound to the Gitleaks check. |
63+
| Code-owner enforcement | `main` now requires one approving review and `require_code_owner_reviews=true`; the scanner files are owned by `@coreyt`. |
64+
| Bypass/branch safety | Administrator enforcement is enabled; force pushes and deletion are disabled. The pre-existing disabled deletion/non-fast-forward ruleset was not modified. |
65+
66+
The initial inspection confirmed no active legacy branch-protection rule, so
67+
this is a narrow new protection rather than a replacement of an existing active
68+
policy.
69+
70+
## Remaining release evidence
71+
72+
- PR #49 still requires its designated code-owner approval and its ordinary
73+
Python 3.12 CI completion before merge. The Gitleaks check is already green.
74+
- A protected `main` push will be evidenced after that reviewed merge. The
75+
workflow definition contains the required `push: main` trigger, but this
76+
slice did not bypass protection to manufacture a direct push.
77+
- A separate public-fork PR was not created. The workflow uses `pull_request`,
78+
read-only job permissions, and no repository/deployment secrets; retain that
79+
as a deployment-policy review item if fork execution needs empirical proof.
7580

7681
## Residual risk and rollback
7782

0 commit comments

Comments
 (0)