Skip to content
Merged
Show file tree
Hide file tree
Changes from 153 commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
8ce8883
test(acquisition): define fail-closed data-room integrity boundary
seonghobae Aug 6, 2026
4ad83d5
feat(acquisition): recompute bounded data-room evidence integrity
seonghobae Aug 6, 2026
75d8545
feat(acquisition): bind generated manifests to exact source evidence
seonghobae Aug 6, 2026
91c7a02
feat(acquisition): add fail-closed manifest integrity pre-gate
seonghobae Aug 6, 2026
582ae63
refactor(acquisition): route manifest generation through integrity po…
seonghobae Aug 6, 2026
6d53b07
feat(acquisition): require manifest integrity before readiness audit
seonghobae Aug 6, 2026
1f0455e
fix(release): verify generated acquisition evidence integrity
seonghobae Aug 6, 2026
6025af7
docs(acquisition): define authenticated buyer data-room boundary
seonghobae Aug 6, 2026
8d91395
docs(doctoring): ground acquisition evidence integrity in current sta…
seonghobae Aug 6, 2026
ad80bc6
docs(acquisition): make manifest integrity explicit to buyers
seonghobae Aug 6, 2026
6504620
test(acquisition): exercise forged npm gate and evidence substitutions
seonghobae Aug 6, 2026
65302b0
test(acquisition): enforce 100% integrity-module coverage
seonghobae Aug 6, 2026
25ac96d
docs(changelog): record fail-closed acquisition manifest integrity
seonghobae Aug 6, 2026
3a6a8e5
test(acquisition): pin external evidence to reviewed retained path
seonghobae Aug 6, 2026
195b394
fix(acquisition): pin external retained artifact paths
seonghobae Aug 6, 2026
0eb48bd
test(acquisition): bind external evidence fixtures to reviewed paths
seonghobae Aug 6, 2026
89505ca
test(acquisition): cover reviewed external artifact path policy
seonghobae Aug 6, 2026
923fe5b
docs(acquisition): document catalog-pinned external artifacts
seonghobae Aug 6, 2026
2836f59
docs(acquisition): index pinned FigJam export evidence
seonghobae Aug 6, 2026
e76d51a
docs(doctoring): bind external evidence identity to reviewed paths
seonghobae Aug 6, 2026
9abe3be
test(acquisition): keep unsafe catalog fixture type-safe
seonghobae Aug 6, 2026
77f7994
test(acquisition): refuse dirty tracked exact-head evidence
seonghobae Aug 6, 2026
f30c94e
feat(acquisition): authenticate tracked checkout before evidence use
seonghobae Aug 6, 2026
279ba50
fix(acquisition): preflight exact tracked source before manifest load
seonghobae Aug 6, 2026
217c390
fix(acquisition): preflight exact tracked source before integrity audit
seonghobae Aug 6, 2026
8993aa2
test(acquisition): cover isolated exact-Git preflight policy
seonghobae Aug 6, 2026
0756d39
test(acquisition): enforce 100% Git preflight coverage
seonghobae Aug 6, 2026
5a1baac
docs(acquisition): define exact tracked-checkout trust root
seonghobae Aug 6, 2026
110f2db
docs(doctoring): record exact-checkout preflight trust root
seonghobae Aug 6, 2026
87f8e2e
test(acquisition): close Git preflight environment branches
seonghobae Aug 6, 2026
17b1987
docs(changelog): record exact tracked-checkout acquisition preflight
seonghobae Aug 6, 2026
19d45a2
test(acquisition): expose index-flag hidden tracked drift
seonghobae Aug 6, 2026
ed16763
fix(acquisition): reject hidden index-state drift
seonghobae Aug 6, 2026
212c391
test(acquisition): cover bounded index-hint refusal
seonghobae Aug 6, 2026
780b9a3
docs(acquisition): document unsafe Git index-hint refusal
seonghobae Aug 6, 2026
dab40d8
docs(doctoring): ground index-hint refusal in Git semantics
seonghobae Aug 6, 2026
7832a74
docs(changelog): record unsafe Git index-hint refusal
seonghobae Aug 6, 2026
5f13030
test(acquisition): add review regression coverage
seonghobae Aug 6, 2026
a3e82b7
fix(acquisition): fail closed on catalog and empty-file edge cases
seonghobae Aug 6, 2026
b5468d2
fix(acquisition): admit exact CI checkout as safe directory
seonghobae Aug 6, 2026
da159ce
test(acquisition): fix empty-evidence fixture setup
seonghobae Aug 6, 2026
299549d
fix(acquisition): enforce private manifest permissions
seonghobae Aug 6, 2026
b0e50f2
fix(acquisition): enforce private audit permissions
seonghobae Aug 6, 2026
2baabd6
test(acquisition): cover remaining integrity and path regressions
seonghobae Aug 6, 2026
0a02464
fix(acquisition): bind default manifest path to exact head
seonghobae Aug 6, 2026
f7ba213
fix(acquisition): bind integrity audit to shared exact-head path
seonghobae Aug 6, 2026
ef108d9
test(acquisition): make integrity entrypoint test portable
seonghobae Aug 6, 2026
e84802d
test(acquisition): isolate clean-checkout default coverage
seonghobae Aug 6, 2026
ce5f8b8
test(acquisition): isolate Git-binding fixture environment
seonghobae Aug 6, 2026
9e6ff1b
docs(doctoring): correct evidence-integrity standards and path binding
seonghobae Aug 6, 2026
a1e1783
refactor(acquisition): remove unreachable path-normalization branch
seonghobae Aug 6, 2026
18f08ed
docs(acquisition): document exact-head data-room hardening
seonghobae Aug 6, 2026
6b42ee7
docs(acquisition): bind buyer data-room path to exact head
seonghobae Aug 6, 2026
c815c69
fix(acquisition): preserve manifest compatibility contract markers
seonghobae Aug 6, 2026
8f74e7a
test(acquisition): close integrity branch coverage gaps
seonghobae Aug 6, 2026
c6d46cc
test(acquisition): cover fail-closed integrity branches
seonghobae Aug 7, 2026
30ac811
test(acquisition): close remaining branch coverage gaps
seonghobae Aug 7, 2026
e7fc2d1
test(acquisition): fail closed on Git status probe errors
seonghobae Aug 7, 2026
eaf7120
test(acquisition): assert audit exit contracts
seonghobae Aug 7, 2026
5e84f60
test(acquisition): reject symlink output targets
seonghobae Aug 7, 2026
cd749f1
fix(acquisition): add no-follow private output writer
seonghobae Aug 7, 2026
387056f
fix(acquisition): refuse unsafe manifest output targets
seonghobae Aug 7, 2026
3d17eb9
fix(acquisition): refuse unsafe audit output targets
seonghobae Aug 7, 2026
bb2ab1a
test(acquisition): cover private output trust boundary
seonghobae Aug 7, 2026
9815b6f
test(acquisition): enforce private output coverage
seonghobae Aug 7, 2026
dba2365
docs(acquisition): document no-follow output boundary
seonghobae Aug 7, 2026
77acf18
docs(doctoring): justify no-follow evidence outputs
seonghobae Aug 7, 2026
7a76f63
docs(doctoring): keep repository citations portable
seonghobae Aug 7, 2026
7af1ee5
docs(changelog): record safe acquisition output writes
seonghobae Aug 7, 2026
b5fc412
test(acquisition): expose local worktree redirection
seonghobae Aug 7, 2026
9ed61f1
fix(acquisition): bind Git preflight worktree
seonghobae Aug 7, 2026
e6855c5
docs(acquisition): bind audited Git worktree
seonghobae Aug 7, 2026
721d60b
docs(changelog): record Git worktree binding
seonghobae Aug 7, 2026
5c656a5
docs(doctoring): justify Git worktree binding
seonghobae Aug 7, 2026
e7675ef
test(acquisition): expose clean-filter trust bypass
seonghobae Aug 7, 2026
df7498b
fix(acquisition): isolate tracked comparisons from filters
seonghobae Aug 7, 2026
4b2e7bb
test(acquisition): cover split tracked comparisons
seonghobae Aug 7, 2026
397ee32
test(acquisition): reproduce parent symlink output escape
seonghobae Aug 7, 2026
53799ea
docs(acquisition): isolate source checks from clean filters
seonghobae Aug 7, 2026
eb231f4
test(acquisition): cover parent symlink entrypoint escapes
seonghobae Aug 7, 2026
b6658e6
fix(acquisition): reject symbolic-link output parents
seonghobae Aug 7, 2026
26fae39
fix(acquisition): validate manifest output parents before mkdir
seonghobae Aug 7, 2026
ed1eeeb
fix(acquisition): validate audit output parents before mkdir
seonghobae Aug 7, 2026
df1b873
test(acquisition): cover parent-chain validation branches
seonghobae Aug 7, 2026
cac170d
docs(doctoring): localize acquisition worktree binding
seonghobae Aug 7, 2026
26994d2
docs(acquisition): document parent symlink output boundary
seonghobae Aug 7, 2026
e0cb239
docs(doctoring): record output parent path integrity rationale
seonghobae Aug 7, 2026
65eac8d
docs(changelog): record parent symlink output hardening
seonghobae Aug 7, 2026
869a72c
test(acquisition): require permission hardening before content mutation
seonghobae Aug 7, 2026
4b33e1d
fix(acquisition): harden output permissions before content mutation
seonghobae Aug 7, 2026
7c92c05
test(acquisition): preserve content when permission hardening fails
seonghobae Aug 7, 2026
1bfc200
docs(acquisition): harden permissions before output mutation
seonghobae Aug 7, 2026
4bbfe1d
docs(doctoring): bind output mutation to prior permission hardening
seonghobae Aug 7, 2026
fcfcd3f
docs(changelog): record permission-before-mutation output hardening
seonghobae Aug 7, 2026
07e8e91
test(ci): require exact live pull-request head verification
seonghobae Aug 7, 2026
1a663f1
fix(ci): verify the exact live pull-request head
seonghobae Aug 7, 2026
37bbe30
fix(ci): bind reviewer verification to the live PR head
seonghobae Aug 7, 2026
b59a020
docs(ci): define exact-head pull-request verification
seonghobae Aug 7, 2026
491044d
docs(doctoring): justify exact-head CI binding
seonghobae Aug 7, 2026
a750d38
docs(changelog): record exact-head CI binding
seonghobae Aug 7, 2026
1b9f0ec
test(ci): keep PR metadata token out of untrusted test steps
seonghobae Aug 7, 2026
8e2aeb9
fix(ci): scope PR metadata token to stale-head checks
seonghobae Aug 7, 2026
0e323d2
fix(ci): isolate PR metadata token from reviewer execution
seonghobae Aug 7, 2026
a1228ba
docs(ci): keep metadata token out of PR-controlled execution
seonghobae Aug 7, 2026
f58fa99
docs(doctoring): scope metadata token away from PR code
seonghobae Aug 7, 2026
a71c206
test(acquisition): expose repository stat-cache drift bypass
seonghobae Aug 7, 2026
57a1dd8
fix(acquisition): override Git stat-cache trust settings
seonghobae Aug 7, 2026
8b8134b
test(acquisition): require raw tracked-byte authentication
seonghobae Aug 7, 2026
8cab30f
test(acquisition): require strict Git stat policy
seonghobae Aug 7, 2026
bd46741
fix(acquisition): authenticate raw tracked Git blob bytes
seonghobae Aug 7, 2026
834b4ba
test(acquisition): cover tracked-byte index refusal paths
seonghobae Aug 7, 2026
38b59e4
test(acquisition): cover raw tracked-byte verifier
seonghobae Aug 7, 2026
52ec38b
test(acquisition): cover tracked-object hashing failures
seonghobae Aug 7, 2026
89c168f
test(acquisition): enforce byte budget before hashing
seonghobae Aug 7, 2026
5d87c73
fix(acquisition): enforce byte budgets before blob hashing
seonghobae Aug 7, 2026
52cb39b
docs(acquisition): document raw tracked-byte authentication
seonghobae Aug 7, 2026
8dd6c89
docs(doctoring): justify raw Git content authentication
seonghobae Aug 7, 2026
788d79d
test(acquisition): require descriptor-bound raw byte verification
seonghobae Aug 7, 2026
38957d5
fix(acquisition): bind raw Git hashing to no-follow descriptors
seonghobae Aug 7, 2026
29d0a88
test(acquisition): consolidate descriptor-bound blob coverage
seonghobae Aug 7, 2026
5af3fc2
test(acquisition): fold byte budgets into descriptor tests
seonghobae Aug 7, 2026
cde92c5
test(acquisition): consolidate descriptor-bound content coverage
seonghobae Aug 7, 2026
f732327
test(acquisition): reach invalid executable-mode metadata branch
seonghobae Aug 7, 2026
69f2e27
docs(acquisition): align raw-byte authentication with descriptors
seonghobae Aug 7, 2026
38aa07f
docs(doctoring): bind Git content evidence to descriptors
seonghobae Aug 7, 2026
a8f8033
test(acquisition): cover empty path and malformed index header
seonghobae Aug 7, 2026
4148919
docs(changelog): record descriptor-bound Git byte authentication
seonghobae Aug 7, 2026
c0de3ab
test: reject index rewrite against exact acquisition tree
seonghobae Aug 7, 2026
56d8a8c
fix: bind acquisition raw-byte inventory to exact HEAD tree
seonghobae Aug 7, 2026
9c6e593
docs: bind acquisition bytes to immutable exact tree
seonghobae Aug 7, 2026
fe3a12e
docs: doctor immutable exact-tree acquisition authority
seonghobae Aug 7, 2026
e7581cf
test: cover clean and malformed exact-tree identities
seonghobae Aug 7, 2026
6ec5a2c
test: align tracked-source failure contract
seonghobae Aug 7, 2026
55f360f
test: require exact tree for production byte authentication
seonghobae Aug 7, 2026
5c58dae
fix: require immutable tree identity for production byte reads
seonghobae Aug 7, 2026
11cae5b
test: bind racy Git regression to immutable exact tree
seonghobae Aug 7, 2026
b630fbf
test(acquisition): bind changelog to exact-tree authority
seonghobae Aug 7, 2026
3a4500d
docs(acquisition): correct exact-tree byte authority
seonghobae Aug 7, 2026
2077f78
test(docs): require integrity in buyer release gate
seonghobae Aug 7, 2026
bf41d7d
docs(acquisition): include integrity in release gate
seonghobae Aug 7, 2026
9400b2c
test(acquisition): reject unbound transfer rights evidence
seonghobae Aug 9, 2026
478b1b8
fix(acquisition): bind transfer pass to licensing and IP evidence
seonghobae Aug 9, 2026
9355e50
docs(acquisition): define transfer rights evidence schema
seonghobae Aug 9, 2026
eff3a08
test(acquisition): prove transfer rights binding green path
seonghobae Aug 9, 2026
83d77cf
test(acquisition): isolate audit rights fixtures from repository state
seonghobae Aug 9, 2026
5be57fb
test(acquisition): require exact release artifact digest binding
seonghobae Aug 9, 2026
44c7f32
fix(acquisition): authenticate exact release artifact digests
seonghobae Aug 9, 2026
58d75e3
test(acquisition): retain exact release fixture artifacts
seonghobae Aug 9, 2026
4e4c894
test(security): reject symlinked acquisition rights evidence
seonghobae Aug 9, 2026
390f483
fix(security): bind acquisition reads to real repository paths
seonghobae Aug 9, 2026
3e9ff42
test(acquisition): isolate transfer audit environment
seonghobae Aug 9, 2026
5a75250
test(acquisition): isolate readiness audit environment
seonghobae Aug 9, 2026
01e7a7c
test(acquisition): require exact artifact rights metadata
seonghobae Aug 10, 2026
ebd0ea2
fix(acquisition): authenticate release artifact rights metadata
seonghobae Aug 10, 2026
0b61f2f
test(acquisition): add passing artifact rights receipt
seonghobae Aug 10, 2026
497e400
docs(acquisition): require artifact rights receipt binding
seonghobae Aug 10, 2026
b4a9009
docs(acquisition): add artifact rights metadata template
seonghobae Aug 10, 2026
f62a9ac
test(acquisition): cover approved OCI SPDX rights
seonghobae Aug 10, 2026
cfd3e4e
docs(acquisition): index exact artifact rights evidence
seonghobae Aug 10, 2026
86df271
test(acquisition): reject duplicate artifact-rights keys
seonghobae Aug 10, 2026
3acadd1
fix(acquisition): reject ambiguous artifact-rights JSON
seonghobae Aug 10, 2026
4ff607b
test(acquisition): reject duplicate top-level evidence keys
seonghobae Aug 10, 2026
0689fa6
fix(acquisition): reject duplicate top-level JSON evidence
seonghobae Aug 10, 2026
d21af72
merge: reconstruct acquisition data-room integrity on current main
seonghobae Aug 16, 2026
b16fc32
test(acquisition): restore transfer-rights RED contract
seonghobae Aug 16, 2026
af590da
fix(acquisition): bind transfer readiness to retained licensing evidence
seonghobae Aug 16, 2026
7157723
test(acquisition): preserve strict JSON evidence boundaries
seonghobae Aug 16, 2026
afa4741
test(acquisition): restore end-to-end readiness regressions
seonghobae Aug 16, 2026
3dc2a31
docs(acquisition): restore placeholder-safe rights evidence templates
seonghobae Aug 16, 2026
4a4f08f
test(acquisition): retain resolved review regressions
seonghobae Aug 16, 2026
732295b
merge(main): refresh acquisition integrity onto current protected base
seonghobae Aug 16, 2026
91513f0
fix(stack): preserve protected #400 security contract
seonghobae Aug 16, 2026
88a374e
test(acquisition): reject symlinked top-level evidence
seonghobae Aug 16, 2026
09fb39a
fix(acquisition): read top-level JSON evidence fail-closed
seonghobae Aug 16, 2026
820711b
test(acquisition): align unsafe-object evidence classification
seonghobae Aug 16, 2026
a5f7000
test(acquisition): bound full entrypoint integration time
seonghobae Aug 16, 2026
9050194
test(acquisition): bound multi-entrypoint integration time
seonghobae Aug 16, 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
33 changes: 30 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,37 @@ concurrency:
group: noema-ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read
pull-requests: read

jobs:
verify:
name: verify
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
env:
SOURCE_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
PR_NUMBER: ${{ github.event.pull_request.number || '' }}
steps:
- name: checkout
- name: checkout exact source commit
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: ${{ env.SOURCE_SHA }}
persist-credentials: false

- name: verify exact source checkout
run: test "$(git rev-parse HEAD)" = "$SOURCE_SHA"

- name: refuse stale pull-request head before verification
if: env.PR_NUMBER != ''
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
live_head="$(gh api --method GET "repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}" --jq ".head.sha")"
test "$live_head" = "$SOURCE_SHA"

- name: setup node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
Expand All @@ -34,3 +52,12 @@ jobs:

- name: release verify
run: npm run release:verify

- name: refuse stale pull-request head after verification
if: env.PR_NUMBER != ''
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
live_head="$(gh api --method GET "repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}" --jq ".head.sha")"
test "$live_head" = "$SOURCE_SHA"
27 changes: 26 additions & 1 deletion .github/workflows/reviewer-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,39 @@ concurrency:

permissions:
contents: read
pull-requests: read

jobs:
reviewer:
name: reviewer
runs-on: ubuntu-latest
timeout-minutes: 30
env:
SOURCE_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
PR_NUMBER: ${{ github.event.pull_request.number || '' }}
NOEMA_CODEGRAPH_SANDBOX_SOURCE_IMAGE: gcr.io/distroless/nodejs24-debian13:nonroot
defaults:
run:
working-directory: reviewer
steps:
- name: checkout
- name: checkout exact source commit
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: ${{ env.SOURCE_SHA }}
persist-credentials: false

- name: verify exact source checkout
run: test "$(git rev-parse HEAD)" = "$SOURCE_SHA"

- name: refuse stale pull-request head before verification
if: env.PR_NUMBER != ''
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
live_head="$(gh api --method GET "repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}" --jq ".head.sha")"
test "$live_head" = "$SOURCE_SHA"

- name: setup python
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
Expand Down Expand Up @@ -106,3 +122,12 @@ jobs:
raise SystemExit("CodeGraph sandbox smoke output was incomplete")
print(output[:2000])
PY

- name: refuse stale pull-request head after verification
if: env.PR_NUMBER != ''
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
live_head="$(gh api --method GET "repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}" --jq ".head.sha")"
test "$live_head" = "$SOURCE_SHA"
12 changes: 10 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# Changelog

## Unreleased
- acquisition exact-checkout preflight가 Git cached-stat 또는 pathname 재개방을 byte authority로 사용하지 않고, immutable exact `HEAD` tree의 `git ls-tree` inventory에서 mode·path·expected blob object ID를 도출한 뒤 `100644`/`100755` regular file을 `O_NOFOLLOW` descriptor로 열어 bounded bytes를 직접 읽고 `git hash-object --stdin` 결과를 expected object ID와 exact-match하도록 강화한다. Binary/NUL-delimited stage-zero index는 index hygiene와 staged-state 검증에만 사용하며 raw-byte authority로 취급하지 않는다. Path/descriptor device·inode·mode·size·mtime·ctime, executable bit, short read·growth, invalid read count, unsupported symlink/gitlink/unmerged mode, per-file 32 MiB·aggregate 256 MiB·20,000 entry·2 MiB index budget을 fail-closed 검증한다. 실제 racy-Git same-size drift, invalid UTF-8, pathname swap, descriptor growth, executable-mode drift, no-follow 미지원과 100% production coverage 회귀를 test-first로 추가하고 buyer 문서 및 Git/Node.js primary documentation 기반 APA 7th doctoring을 갱신한다.
- `ci`와 `reviewer-ci`가 pull-request의 임시 merge commit이 아니라 exact `github.event.pull_request.head.sha`를 직접 checkout하고, `git rev-parse HEAD`와 검증 전후 live Pulls API `head.sha`를 교차 확인하도록 강화한다. Read-only `contents`/`pull-requests` token, persisted credential 제거, immutable action SHA pin을 유지하며, branch가 검증 도중 이동하면 stale run을 fail-closed로 거부한다. 두 workflow contract의 test-first 회귀, buyer 운영 문서, GitHub primary documentation 기반 APA 7th doctoring을 추가하고 exact-head, merge-result, check run, review, model judgement, governance, provenance evidence plane을 분리한다.
- acquisition manifest/integrity output 경계가 leaf `O_NOFOLLOW`만으로는 막지 못하던 parent-directory symbolic-link redirection을 fail-closed로 차단한다. Private writer는 output parent에서 filesystem root까지 모든 existing component가 실제 directory이고 symlink가 아님을 `lstat`으로 검증하며, manifest/audit entrypoint는 recursive `mkdir` 전후 같은 parent boundary를 재검증한다. Parent symlink를 통한 새 leaf 생성·기존 target overwrite·explicit manifest path·audit output redirect를 실제 filesystem test-first 회귀로 고정하고, 100% production coverage, buyer 운영 문서와 Node.js/CWE-59/NIST 근거의 APA 7th doctoring을 갱신한다.
- acquisition exact-checkout preflight가 audited command `cwd`를 `GIT_WORK_TREE`로 고정하여 repository-local `core.worktree`가 tracked-byte 비교를 별도 clean tree로 redirect하는 우회를 차단한다. 실제 Git repository에서 clean decoy worktree와 tampered audited checkout을 구성한 test-first RED 회귀를 추가했고, production preflight·buyer 문서·Git primary documentation 기반 doctoring을 갱신한다.
- acquisition manifest와 integrity audit의 retained output write를 descriptor-safe boundary로 강화. 새 파일은 `O_CREAT | O_EXCL | O_NOFOLLOW`, 기존 파일은 single-link regular-file `lstat` 뒤 truncate 없이 `O_NOFOLLOW`로 열어 path/descriptor identity를 확인하고 descriptor 자체를 `0600`으로 제한한 뒤에만 `ftruncate`와 write를 수행한다. Permission hardening이 실패하면 기존 content를 변경하지 않고 fail-closed하며, write 후 identity를 다시 검증한다. pre-existing symlink·hard link·non-regular output, open/write 중 path replacement, `O_NOFOLLOW` 미지원도 거부한다. 실제 permission-failure·entrypoint symlink 회귀 테스트와 private-output helper의 production statements·branches·functions·lines 100% coverage gate, buyer 문서, Node.js/CWE-732 primary security 근거의 APA 7th doctoring을 갱신했다.
- acquisition exact-checkout preflight가 `git ls-files -v -z --cached --`의 전체 NUL-delimited index 상태를 2 MiB로 bounded inspection하고 diff 전후 및 evidence verification 후 재검증하도록 강화. `skip-worktree`(`S`)와 `assume-unchanged`(lowercase status tag)를 fail-closed 거부해 수정된 tracked verifier·catalog·policy·evidence bytes가 Git index hint로 숨겨진 채 exact HEAD evidence로 승인되는 경로를 차단한다. 두 hint에 대해 실제 manifest/integrity entrypoint 회귀 테스트를 추가하고 preflight helper의 production statements·branches·functions·lines 100% coverage gate, buyer 문서, Git primary documentation 기반 APA 7th doctoring을 갱신했다.
- acquisition manifest와 integrity audit가 verifier/catalog를 로드하기 전에 configuration-isolated local-only Git preflight로 exact `HEAD^{commit}`과 tracked checkout을 인증하고, evidence read 후 같은 exact head/clean tracked state를 다시 검증하도록 강화. system/global Git config·hooks·fsmonitor·untracked cache·replacement objects·lazy fetch·terminal prompt를 차단하고 bounded Git output/timeout을 적용하며, tracked verifier·catalog·policy·documentation이 HEAD와 달라진 dirty checkout이나 검증 중 source movement를 fail-closed 거부한다. 의도적으로 untracked인 retained acquisition artifacts는 source commit drift로 오인하지 않고 별도의 descriptor-safe evidence 검증을 유지한다. preflight helper도 production 100% statement/branch/function/line coverage gate에 포함하고 dirty tracked source·environment isolation·HEAD movement 회귀 테스트와 buyer 문서·APA 7th doctoring을 갱신했다.
- buyer data-room manifest를 authorization input이 아닌 untrusted evidence index로 강화. schema/repository/objective/exact source commit/optional immutable release를 binding하고, reviewed catalog의 exact entry set을 강제하며, local evidence를 bounded `O_NOFOLLOW` descriptor로 pre/post device·inode·size·mtime·ctime stability와 실제 SHA-256/byte size까지 재검증한다. persisted `passed`/`finalGatePassed`/gap list는 recomputation과 일치할 때만 유효하며 arbitrary HTTPS external entry는 immutable local export와 source URL·collection time·collector·provenance·artifact digest receipt가 없으면 declared/non-verifying으로 유지한다. `npm run acquisition:integrity`를 acquisition/release gate 앞에 추가하고 buyer 문서·APA 7th doctoring·test-first regressions를 갱신한다. 실제 KPI·deployment·governance·revenue·transfer evidence는 독립 gate가 통과하기 전까지 RED/NOT_READY로 유지하며 version/release는 변경하지 않는다.
- `hourly-product-development`가 `NVIDIA_NIM_API_KEY`뿐 아니라 `NOEMA_MAINTAINER_APP_CLIENT_ID`와 `NOEMA_MAINTAINER_APP_PRIVATE_KEY` 존재를 checkout·OpenCode 설치·NVIDIA 호출 전에 검증한다. 게시 경로가 준비되지 않았으면 `maintainer_app_unavailable`로 실패 폐쇄하여 알려진 실패에 추론 비용을 쓰지 않으며, `dry_run`은 credential 없이 queue와 task contract를 검토하는 경로로 유지한다. 기존 reviewer App 및 `NOEMA_LLM_API_KEY`·`contextual-orchestrator` reviewer credential 경계는 변경하지 않는다.
- zero open pull requests일 때만 `NVIDIA_NIM_API_KEY` 전용 OpenCode 1.17.13 세션을 실행하는 proposal-only `hourly-product-development` 루프를 추가. minute-47 schedule·non-cancelling single flight·OpenCode binary SHA-256 pin·NVIDIA NIM model fallback·후보 실패 시 clean reset·GitHub/OIDC credential 제거·reviewer key 비참조·full release verification·40-file/500,000-byte proposal budget·trusted one-PR packaging을 강제한다. 각 후보 실행은 900초와 30초 kill grace로 제한하고, 실패 후 `npm ci --ignore-scripts` 재설치는 별도 60초와 10초 kill grace로 제한한다. 재설치가 실패하거나 시간 초과되면 불완전한 dependency tree로 다음 후보를 실행하지 않고 실패 폐쇄한다. 세 후보의 실행·종료 2,790초, 두 번의 후보 간 재설치 140초, 300초 setup/diagnostic reserve를 합친 3,230초가 55분(3,300초) job budget에 들어가며 70초 여유를 남긴다. 마지막 후보가 실패하면 불필요한 reset·clean·재설치를 생략하고 안정적인 전체 후보 실패 진단으로 곧바로 종료한다. 모델 실행, 제안 코드 검증, publication credential을 각각 별도의 GitHub-hosted runner로 분리하고, immutable artifact의 exact ID·workflow-run ID·archive digest와 patch SHA-256·base SHA·file/byte count를 교차 검증하며 symlink(`120000`)와 gitlink(`160000`)를 세 경계 모두에서 차단한다. 제안 코드를 실행한 runner에는 Maintainer App secret/token을 절대 제공하지 않고, 세 번째 non-executing publisher에서만 late-bound repository-scoped App token을 발급한다. merge/release/deploy authority는 기존 `hourly-commercial-readiness` exact-head governance에 유지하며, 운영 Runbook과 OpenCode/NVIDIA/GitHub Actions/NIST SP 800-218 근거를 APA 7th doctoring에 기록했다. package version은 release·deployment·production KPI evidence를 발행하지 않으므로 유지한다.
- `/health` liveness와 분리된 unauthenticated `GET`/`HEAD /ready` runtime readiness endpoint를 추가. GitHub Actions OIDC issuer·audience·organization/workflow binding·exact workflow ref·GitHub Cloud API origin·GitHub App identifiers·PKCS#8 private key를 외부 호출 없이 검증하며, 불완전한 설정은 secret/config value를 반사하지 않는 deterministic failure codes와 `503 ERR_SERVICE_NOT_READY`, `Retry-After`, no-store/nosniff/trace/latency headers로 실패-폐쇄한다. exact workflow named ref는 Git `check-ref-format`의 모호성·유효성 경계(`..`, `//`, dot-leading/`.lock` component, revision-expression 문자, trailing dot/slash 등)를 만족해야 하므로 GitHub가 실제로 표현할 수 없는 ref에서 false-ready가 발생하지 않는다. 배포 smoke contract가 liveness·runtime readiness·unauthenticated exchange challenge를 모두 요구하도록 확장하고 Kubernetes probe separation, RFC 9110, NIST SSDF, Git ref-format 근거를 APA 7th doctoring에 기록했다.
Expand Down Expand Up @@ -30,8 +38,8 @@
- 중앙 Noema 리뷰를 비신뢰 evidence 수집 job과 secret-bearing verdict publication job으로 분리. target source/CodeGraph 처리는 read-only App token만 사용하고 LLM credential·PR write token을 받지 않으며, publication job은 target checkout 없이 1일 보존 manifest의 SHA-256·repository·PR·current-head binding을 재검증한 뒤에만 리뷰를 게시.
- Noema reviewer와 중앙 대기 게이트가 GitHub Check Runs API를 페이지당 100건으로 끝까지 순회하도록 보강해 기본 30건/기존 100건 이후의 실패·대기 체크가 누락되는 승인 사각지대를 제거.
- 매시간 열린 PR을 완전 pagination으로 점검하고, 신뢰된 check producer·현재 head Noema 승인·리뷰 thread·status·mergeability를 실패-폐쇄 방식으로 재검증한 뒤 SHA-bound squash merge하는 `hourly-commercial-readiness` 운영 루프를 추가. PR이 0개면 판매·인수 준비 감사를 report-only로 갱신하고 JSON artifact를 보존.
- `main`에 적용되는 GitHub active rules를 완전 pagination으로 감사하는 `governance:audit`를 추가. pull request 강제, stale approval 폐기, review thread 해결, strict·integration-pinned 필수 checks, force-push 및 branch deletion 차단이 확인되지 않으면 hourly maintainer의 모든 write action을 중단하고 감사 JSON을 보존.
- 개발 의존성 `postcss`(vitest→vite 경유 transitive)를 `^8.5.18`로 override하여 GHSA-r28c-9q8g-f849(source map 자동 로딩 경로 순회, high) 취약점을 제거. `npm audit --audit-level=high`가 다시 0건으로 통과하여 매일 실패하던 `readiness-audit` 스케줄 및 `release:verify` 게이트를 복구.
- `main`에 적용되는 GitHub active rules를 완전 pagination으로 감사하는 `governance:audit`를 추가. pull request 강제, stale approval 폐기, review thread 해결, strict·integration-pinned 필수 checks, force-push 및 branch deletion 차단이 확인되지 않으면 hourly maintainer의 모든 write action을 중단하고 감사 JSON artifact를 보존.
- 개발 의존성 `postcss`(vitest→vite 경유 transitive)를 `^8.5.18`로 override하여 GHSA-r28c-9q8g-f849(source map 자동 로딩 경로 순회, high) 취약점을 제거. `npm audit --audit-level=high`를 0건으로 복구하고 release gate가 취약 버전에서 실패-폐쇄하도록 유지한다.
- API 응답 스키마를 판매형 표준으로 정비: 성공/실패 공통 구조 및 `trace_id`, `error_code` 추가.
- OIDC 검증/권한 에러를 세분화한 실패 코드로 표준화.
- 구조화 로그(`http_request`) 도입: route, status_code, latency_ms, repository, workflow_ref, oidc_sub, error_code.
Expand Down
Loading
Loading