Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
5261356
security: rebuild audit pseudonymization on current main
seonghobae Aug 5, 2026
28966e6
test(security): require strong policy override keys
seonghobae Aug 5, 2026
2e9c4a2
fix(security): reject weak policy override keys
seonghobae Aug 5, 2026
ac70dd7
docs(security): document policy override key strength
seonghobae Aug 5, 2026
27106a5
fix: trigger CI due to strix timeout
seonghobae Aug 5, 2026
b3ad882
chore: remove stray CI trigger script
seonghobae Aug 5, 2026
0e7770b
test: cover disabled policy signing startup path
seonghobae Aug 5, 2026
a86ab46
docs: consolidate unreleased changelog entries
seonghobae Aug 5, 2026
eb34323
build: enforce zero missed production lines and branches
seonghobae Aug 5, 2026
164aecf
ci: verify exact PR head with coverage gates
seonghobae Aug 5, 2026
294b30b
ci: fuzz the exact pull request head
seonghobae Aug 5, 2026
febb3fd
docs: record exact-head and coverage gates
seonghobae Aug 5, 2026
9cf1ff8
test: add shared security provider fixture
seonghobae Aug 5, 2026
3214bc0
test: cover null policy secret normalization
seonghobae Aug 5, 2026
62dac96
test: cover tenant delete fail-closed branches
seonghobae Aug 5, 2026
0416068
test: cover validation security edge cases
seonghobae Aug 5, 2026
6b61330
test: cover conversion filename boundary
seonghobae Aug 5, 2026
70f3399
test: cover artifact deletion failure
seonghobae Aug 5, 2026
d73571b
test: cover repository delete edge cases
seonghobae Aug 5, 2026
36254ee
test: cover exception log sanitization
seonghobae Aug 5, 2026
a1533de
test: cover download filename and digest edges
seonghobae Aug 5, 2026
31c4b4d
fix: redact rejected parameter values
seonghobae Aug 5, 2026
c0c0c45
docs: record rejected-value redaction
seonghobae Aug 5, 2026
a308f0f
test: cover every override header separator
seonghobae Aug 5, 2026
39dc005
refactor: trust normalized policy secret contract
seonghobae Aug 5, 2026
6e311ed
refactor: remove unreachable blank filename branch
seonghobae Aug 5, 2026
8ca8958
fix(ci): isolate exact-head evidence finalization runs
seonghobae Aug 5, 2026
61ab219
fix(ci): use repository-native evidence verifier
seonghobae Aug 5, 2026
2831bb9
docs(evidence): ingest verified Netty 4.1.136 evidence
github-actions[bot] Aug 5, 2026
fa1659a
fix(security): restore reviewed Netty 4.1.136 remediation
seonghobae Aug 5, 2026
6d9a3d7
test(evidence): verify complete Netty SBOM graph coherence
seonghobae Aug 5, 2026
20513e3
docs(security): record deterministic Netty SBOM provenance
seonghobae Aug 5, 2026
67cd42c
docs(evidence): correct CycloneDX generation contract
seonghobae Aug 5, 2026
06452c3
docs(changelog): record deterministic Netty buyer evidence
seonghobae Aug 5, 2026
1907593
test(security): require auditable policy overrides
seonghobae Aug 5, 2026
0189136
fix(security): fail closed without override audit key
seonghobae Aug 5, 2026
c57af8b
docs(security): require auditable override startup
seonghobae Aug 5, 2026
5073573
docs(changelog): record auditable override gate
seonghobae Aug 5, 2026
ff10462
test(security): require standalone override auditability
seonghobae Aug 5, 2026
f08d789
refactor(security): expose reusable override key validation
seonghobae Aug 5, 2026
9c33db4
fix(security): enforce override auditability in standalone service
seonghobae Aug 5, 2026
10bfb26
test(fuzz): use separated override audit keys
seonghobae Aug 5, 2026
162166a
test(web): use separated override audit keys
seonghobae Aug 5, 2026
967fe25
test(service): use separated override audit keys
seonghobae Aug 5, 2026
92ce1c6
test(audit): reject unauditable policy signing
seonghobae Aug 5, 2026
422c465
docs(security): cover standalone override validation
seonghobae Aug 5, 2026
cacd637
docs(changelog): record standalone override guard
seonghobae Aug 5, 2026
08b14b7
test(build): require warning-free public Javadocs
seonghobae Aug 5, 2026
f86581f
build(docs): gate warning-free public Javadocs
seonghobae Aug 5, 2026
c0d2c7b
docs(api): explain tenant context claims
seonghobae Aug 5, 2026
21bbc79
docs(api): explain conversion status payload
seonghobae Aug 5, 2026
648e71b
docs(api): explain admin job list payload
seonghobae Aug 5, 2026
f454056
docs(api): explain conversion acceptance payload
seonghobae Aug 5, 2026
8d3d180
docs(api): explain viewer bootstrap payload
seonghobae Aug 5, 2026
f96d7d4
docs(api): explain error response envelope
seonghobae Aug 5, 2026
4b1f65d
docs(api): complete public Javadocs
seonghobae Aug 5, 2026
e08e0e0
docs(api): finish warning-free Javadoc surface
seonghobae Aug 5, 2026
ecbc0a9
docs(changelog): record executable Javadoc gate
seonghobae Aug 5, 2026
fcc77fd
docs(agents): make verify and Javadocs authoritative
seonghobae Aug 5, 2026
58c9cff
docs(acceptance): make verify evidence authoritative
seonghobae Aug 5, 2026
bf7083d
docs(governance): use current sibling repository names
seonghobae Aug 5, 2026
91091dd
perf(io): remove filesystem TOCTOU prechecks
seonghobae Aug 5, 2026
dca468e
test(ci): require non-skipped Maven report acceptance
seonghobae Aug 5, 2026
231ce19
feat(ci): fail on skipped or empty Maven reports
seonghobae Aug 5, 2026
1e3d6f6
fix(ci): reject skipped or empty Maven test reports
seonghobae Aug 5, 2026
040909f
docs(ci): require zero-skipped Maven report evidence
seonghobae Aug 5, 2026
6ee5c40
docs(changelog): record zero-skipped CI gate
seonghobae Aug 5, 2026
b34b931
test(ci): require bounded entity-free XML reports
seonghobae Aug 5, 2026
eeee286
fix(ci): bound and sanitize Maven XML evidence
seonghobae Aug 5, 2026
fa25f04
docs(ci): define bounded XML report parsing
seonghobae Aug 5, 2026
9a83d0f
docs(changelog): record safe Maven report parsing
seonghobae Aug 5, 2026
7b6f60a
fix(ci): eliminate report size-check race
seonghobae Aug 5, 2026
98870b0
test(ci): reject encoded XML declaration bypasses
seonghobae Aug 5, 2026
72b30b6
fix(ci): enforce UTF-8 Maven report evidence
seonghobae Aug 5, 2026
08b31c1
docs(ci): require UTF-8 Maven XML evidence
seonghobae Aug 5, 2026
95b046a
docs(changelog): record encoded XML rejection
seonghobae Aug 5, 2026
a93127b
test(ci): reject failing Maven report evidence
seonghobae Aug 5, 2026
5d1040e
fix(ci): reject failing Maven report evidence
seonghobae Aug 5, 2026
fff6161
docs(ci): reject contradictory Maven outcomes
seonghobae Aug 5, 2026
3c9bea3
docs(changelog): record report outcome checks
seonghobae Aug 5, 2026
d089e6b
test(ci): assert singular Maven outcome diagnostics
seonghobae Aug 5, 2026
e3104fc
test: require complete Maven report counts
seonghobae Aug 5, 2026
260d98f
fix: reject incomplete Maven report counts
seonghobae Aug 5, 2026
6e7e864
docs: record fail-closed report attributes
seonghobae Aug 5, 2026
2656321
docs: define complete Maven report evidence
seonghobae Aug 5, 2026
c792fa3
feat(automation): rebuild hourly protected loops on authoritative parent
seonghobae Aug 6, 2026
106bedf
docs(changelog): reconcile protected hourly loops
seonghobae Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 79 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,86 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Verify exact checked-out revision
env:
EXPECTED_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: test "$(git rev-parse HEAD)" = "$EXPECTED_SHA"
- name: Use preinstalled Temurin JDK 21
# Uses the runner image's bundled JDK instead of actions/setup-java to
# keep every workflow dependency hash-pinned (Scorecard Pinned-Dependencies).
run: |
echo "JAVA_HOME=$JAVA_HOME_21_X64" >> "$GITHUB_ENV"
echo "$JAVA_HOME_21_X64/bin" >> "$GITHUB_PATH"
- name: Run tests
run: mvn -B --no-transfer-progress test
- name: Run tests and coverage acceptance gates
shell: bash
run: |
if ! mvn -B --no-transfer-progress verify; then
if [[ -f target/site/jacoco/jacoco.csv ]]; then
echo "::group::JaCoCo CSV diagnostics"
cat target/site/jacoco/jacoco.csv
echo "::endgroup::"
fi
if [[ -f target/site/jacoco/jacoco.xml ]]; then
echo "::group::JaCoCo uncovered line diagnostics"
python3 - <<'PY'
import xml.etree.ElementTree as ET
from pathlib import Path

report = Path("target/site/jacoco/jacoco.xml")
root = ET.parse(report).getroot()
gaps = []
for package in root.findall("package"):
package_name = package.get("name", "")
for source_file in package.findall("sourcefile"):
source_name = source_file.get("name", "")
source_path = f"{package_name}/{source_name}" if package_name else source_name
for line in source_file.findall("line"):
missed_instructions = int(line.get("mi", "0"))
missed_branches = int(line.get("mb", "0"))
if missed_instructions or missed_branches:
gaps.append(
(
source_path,
int(line.get("nr", "0")),
missed_instructions,
missed_branches,
)
)

for source_path, line_number, missed_instructions, missed_branches in gaps:
print(
f"{source_path}:{line_number}: "
f"missed_instructions={missed_instructions} "
f"missed_branches={missed_branches}"
)
PY
echo "::endgroup::"
fi
exit 1
fi
python3 scripts/verify_maven_test_reports.py

merge-compatibility:
name: Maven merge compatibility
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Verify merge revision
env:
EXPECTED_SHA: ${{ github.sha }}
run: test "$(git rev-parse HEAD)" = "$EXPECTED_SHA"
- name: Use preinstalled Temurin JDK 21
run: |
echo "JAVA_HOME=$JAVA_HOME_21_X64" >> "$GITHUB_ENV"
echo "$JAVA_HOME_21_X64/bin" >> "$GITHUB_PATH"
- name: Verify merged result
run: |
mvn -B --no-transfer-progress verify
python3 scripts/verify_maven_test_reports.py

script-checks:
name: Buyer-readiness script tests
Expand All @@ -33,6 +105,11 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Verify exact checked-out revision
env:
EXPECTED_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: test "$(git rev-parse HEAD)" = "$EXPECTED_SHA"
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.12'
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/fuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ jobs:
- TenantClaimsFuzzTest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Verify exact checked-out revision
env:
EXPECTED_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: test "$(git rev-parse HEAD)" = "$EXPECTED_SHA"

- name: Set up JDK 21
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961
Expand Down
51 changes: 51 additions & 0 deletions .github/workflows/hourly-pr-maintenance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Hourly PR Maintenance

on:
schedule:
- cron: "7 * * * *"
workflow_dispatch:

concurrency:
group: clearfolio-hourly-pr-maintenance
cancel-in-progress: false

permissions:
contents: read

jobs:
fix-review-feedback:
permissions:
actions: write
contents: read
issues: write
pull-requests: read
statuses: read
uses: ContextualWisdomLab/.github/.github/workflows/pr-review-fix-scheduler.yml@74e54255ec903e3ba5f920859b656fe2defcb057
with:
target_repository: ContextualWisdomLab/clearfolio
base_branch: main
max_prs: "100"
max_dispatches: "100"
retry_hours: "1"
secrets: inherit

review-recheck-and-merge:
needs: fix-review-feedback
if: ${{ always() }}
permissions:
actions: write
checks: read
contents: write
id-token: write
pull-requests: write
uses: ContextualWisdomLab/.github/.github/workflows/pr-review-merge-scheduler.yml@74e54255ec903e3ba5f920859b656fe2defcb057
with:
base_branch: main
max_prs: "100"
trigger_reviews: true
review_dispatch_limit: "-1"
branch_update_limit: "-1"
enable_auto_merge: true
merge_mode: direct_or_auto
update_branches: true
secrets: inherit
Loading
Loading