Skip to content
Merged
Show file tree
Hide file tree
Changes from 52 commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
e525fac
fix(acquisition): bind commercial source records
seonghobae Aug 31, 2026
0f83739
docs(acquisition): align transfer source binding contract
seonghobae Sep 1, 2026
f204a65
docs(acquisition): fix source binding examples
seonghobae Sep 1, 2026
e466a31
docs(acquisition): retain evidence owner requirement
seonghobae Sep 1, 2026
6a1093c
docs(acquisition): complete revenue source binding contract
seonghobae Sep 1, 2026
b183bbb
docs(acquisition): keep evidence freshness examples current
seonghobae Sep 1, 2026
90e58c6
merge(main): converge commercial evidence after #525
seonghobae Sep 1, 2026
1e83376
test(acquisition): reject hardlinked retained evidence
seonghobae Sep 1, 2026
6a9fe82
fix(acquisition): reject hardlinked retained evidence
seonghobae Sep 1, 2026
f4b096a
docs(acquisition): refresh protected readiness snapshot
seonghobae Sep 1, 2026
4e24e00
test(acquisition): reject retained evidence close failure
seonghobae Sep 1, 2026
07aab9a
fix(acquisition): fail closed on retained evidence close
seonghobae Sep 1, 2026
e32755e
test(acquisition): align close failure contract
seonghobae Sep 1, 2026
8747679
test(acquisition): reject post-close retained-path replacement
seonghobae Sep 1, 2026
4db70c2
fix(acquisition): revalidate retained path after close
seonghobae Sep 1, 2026
6f69acc
test(acquisition): preserve concurrent failed-output replacement
seonghobae Sep 1, 2026
428764a
fix(acquisition): avoid pathname-delete race on failed evidence
seonghobae Sep 1, 2026
aa8bc52
test(acquisition): expect descriptor-bound failure neutralization
seonghobae Sep 1, 2026
a0d28d0
test(acquisition): retain failed output instead of pathname delete
seonghobae Sep 1, 2026
61a321e
test(acquisition): bound FIFO cleanup race
seonghobae Sep 1, 2026
22764ce
fix(acquisition): make failed-evidence cleanup nonblocking
seonghobae Sep 1, 2026
7ef8822
test(acquisition): keep FIFO regression hermetic
seonghobae Sep 1, 2026
8777585
test(acquisition): require nonblocking cleanup capability
seonghobae Sep 1, 2026
8fa71e5
fix(acquisition): require nonblocking cleanup capability
seonghobae Sep 1, 2026
e3fea35
test(acquisition): model nonblocking cleanup capability
seonghobae Sep 1, 2026
63372c1
test(acquisition): expose nonblocking adapter capability
seonghobae Sep 1, 2026
253da4f
test(acquisition): carry nonblocking parent-race capability
seonghobae Sep 1, 2026
9d099a5
test(acquisition): preserve nonblocking cleanup semantics
seonghobae Sep 1, 2026
b8cc388
test(acquisition): carry nonblocking staging capability
seonghobae Sep 1, 2026
19db095
test(acquisition): add nonblocking replacement capability
seonghobae Sep 1, 2026
e6da3ed
test(acquisition): provide nonblocking atomic adapter capability
seonghobae Sep 1, 2026
2c5d637
test(operations): expose nonblocking report capability
seonghobae Sep 1, 2026
e10a482
Merge 5aad3e410703faaf52882e2f33fadd25d217bcdd into 2c5d6378f4842008e…
seonghobae Sep 1, 2026
8b67a93
test(acquisition): align atomic-failure cleanup with descriptor-bound…
seonghobae Sep 1, 2026
eaebeec
fix(test): keep descriptor-bound failure evidence non-authoritative
seonghobae Sep 1, 2026
545c247
Merge main into fix/526-continue: combine commercial-evidence PR #526…
claude Sep 2, 2026
0f2db85
feat: extract shared Agent-construction wiring into noema-core
seonghobae Sep 2, 2026
2528854
test: expose noema-core packaging and CI gaps
seonghobae Sep 2, 2026
a8ea139
test: reproduce reviewer evidence import without noema-core path
seonghobae Sep 2, 2026
66e6a5d
fix: decouple evidence imports from noema-core runtime
seonghobae Sep 2, 2026
32b78b7
test: cover lazy reviewer runtime exports
seonghobae Sep 2, 2026
c9e22f5
fix(packaging): bundle shared core into reviewer wheel
seonghobae Sep 2, 2026
2d52b10
fix(core): require lock-validated PydanticAI API floor
seonghobae Sep 2, 2026
682f9f0
fix(ci): enforce shared-core gates and installed-wheel smoke
seonghobae Sep 2, 2026
37375a6
fix(deps): align reviewer input with validated PydanticAI floor
seonghobae Sep 2, 2026
e94ba8e
docs(adr): align shared-core rollout with installable packaging
seonghobae Sep 2, 2026
2d727ec
docs(reviewer): document installable shared-core packaging
seonghobae Sep 2, 2026
6bd8184
docs(core): align package status with wheel and CI contract
seonghobae Sep 2, 2026
656aeef
test(ci): reproduce invalid reviewer wheel smoke import
seonghobae Sep 2, 2026
49e8f8b
fix(ci): smoke the exported reviewer CLI parser
seonghobae Sep 2, 2026
e60f1dd
test(ddd): keep provider SDK wiring out of noema-core
seonghobae Sep 2, 2026
eed7cf1
fix(ddd): remove provider transport from noema-core
seonghobae Sep 2, 2026
07fb3dd
fix(ddd): narrow noema-core public surface
seonghobae Sep 2, 2026
708d55b
fix(ddd): keep orchestrator transport in reviewer adapter
seonghobae Sep 2, 2026
f66f9f3
test(ddd): verify injected-model agent construction
seonghobae Sep 2, 2026
f8ae2d9
fix(ddd): remove provider extra from noema-core
seonghobae Sep 2, 2026
0d9bd5f
test(ddd): keep provider extra at reviewer adapter
seonghobae Sep 2, 2026
aad5d74
docs(ddd): document provider-neutral core boundary
seonghobae Sep 2, 2026
fbed32c
test: cover neutralize-cleanup and afterClosePath fail-closed branches
claude Sep 2, 2026
85f14cd
docs: log coverage-gate regression test additions in CHANGELOG
claude Sep 2, 2026
6b730d4
test(package): expose reviewer sdist gap
seonghobae Sep 2, 2026
6c7c64f
fix(package): stage canonical core for reviewer builds
seonghobae Sep 2, 2026
6bf8313
fix(package): retain reviewer build backend in sdist
seonghobae Sep 2, 2026
aa12283
fix(package): make reviewer sdist self-contained
seonghobae Sep 2, 2026
f899483
fix(package): stage core for all PEP 517 hooks
seonghobae Sep 2, 2026
949da3c
chore(package): ignore reviewer build staging
seonghobae Sep 2, 2026
d4f3261
fix(package): exercise reviewer PEP 517 backend
seonghobae Sep 2, 2026
728ef67
test(package): lock self-contained reviewer sdist contract
seonghobae Sep 2, 2026
c3a1dd9
test(core): reject unresolved model routing strings
seonghobae Sep 2, 2026
5687bb0
fix(core): keep model routing outside shared kernel
seonghobae Sep 2, 2026
364e926
docs(core): require caller-resolved model adapters
seonghobae Sep 2, 2026
939cb8f
test(reviewer): block shared-core site-package leakage
seonghobae Sep 2, 2026
2b9fe6c
test(packaging): require PEP 660 editable hooks
seonghobae Sep 2, 2026
1826bb1
fix(packaging): preserve PEP 660 editable installs
seonghobae Sep 2, 2026
5da998d
test(reviewer): preserve independent-reviewer identity
seonghobae Sep 2, 2026
cb59e9a
fix(reviewer): preserve role identity and resolved-model boundary
seonghobae Sep 2, 2026
5b4201a
test(packaging): exercise clean editable reviewer install
seonghobae Sep 2, 2026
4f3dd33
fix(packaging): keep editable core linked to canonical source
seonghobae Sep 2, 2026
7c72bbe
fix(ci): use explicit empty PYTHONPATH assignment
seonghobae Sep 2, 2026
5363c6e
test(core): require composable role-neutral identity
seonghobae Sep 2, 2026
14891ae
fix(core): make shared Noema identity role-neutral
seonghobae Sep 2, 2026
485739e
fix(reviewer): compose bounded role from shared identity
seonghobae Sep 2, 2026
edd720c
docs(core): document role-neutral identity contract
seonghobae Sep 2, 2026
ab1ec25
test(packaging): reproduce staging races and editable clobbering
seonghobae Sep 2, 2026
a8a762f
test(packaging): require isolated editable installation contract
seonghobae Sep 2, 2026
7391746
fix(packaging): isolate reviewer build staging
seonghobae Sep 2, 2026
27e7ada
fix(packaging): reload staged setuptools context
seonghobae Sep 2, 2026
01f3264
test(packaging): expose isolated backend path loss
seonghobae Sep 2, 2026
1180465
test(packaging): parse editable smoke command tokens
seonghobae Sep 2, 2026
9fa70a3
fix(packaging): preserve isolated backend environment
seonghobae Sep 2, 2026
2dacd1a
Merge 9fa70a39f5a3de822df06afd14c5284ab1017e39 into 1a868c2dc64e7a949…
seonghobae Sep 2, 2026
e4110a1
Merge remote-tracking branch 'origin/main' into fix/acquisition-sourc…
claude Sep 2, 2026
722c06d
fix(acquisition): make existing-target verification read non-blocking
claude Sep 2, 2026
630612c
Merge remote-tracking branch 'origin/main' into HEAD
claude Sep 3, 2026
7d0cc8d
Merge protected main into noema-core shared package
seonghobae Sep 3, 2026
a0c8744
docs(reviewer): align shared-core provider boundary
seonghobae Sep 3, 2026
6429c88
test(core): forbid shared-kernel retry authority
seonghobae Sep 3, 2026
482cb1a
fix(core): remove shared-kernel retry authority
seonghobae Sep 3, 2026
fe6e91f
fix(reviewer): keep retry authority outside noema-core
seonghobae Sep 3, 2026
7f92cee
docs(core): keep retry policy outside shared kernel
seonghobae Sep 3, 2026
6292cc4
fix(ci): skip docs-only changes for ci, reviewer-ci, patch-validator-…
seonghobae Sep 3, 2026
fa4bb2b
test(ci): reject docs-only verification suppression
seonghobae Sep 3, 2026
def52aa
fix(ci): keep application verification mandatory for docs-only changes
seonghobae Sep 3, 2026
6bc6e59
fix(ci): keep reviewer verification mandatory for docs-only changes
seonghobae Sep 3, 2026
60b8333
fix(ci): keep image verification mandatory for docs-only changes
seonghobae Sep 3, 2026
d6c8c5e
fix(reviewer): explain intentional editable-link restaging
seonghobae Sep 3, 2026
02005d0
docs(changelog): record noema-core shared kernel
seonghobae Sep 3, 2026
2d2343b
fix(reviewer): remove empty exception handler
seonghobae Sep 3, 2026
ab74965
test(reviewer): isolate wheel install from source metadata
seonghobae Sep 3, 2026
cb49471
fix(reviewer): isolate wheel smoke installation
seonghobae Sep 3, 2026
a14cbe0
fix(ci): make wheel isolation contract indentation-agnostic
seonghobae Sep 4, 2026
5531a53
Merge protected main into noema-core package lane
seonghobae Sep 4, 2026
83c319b
Merge protected main into docs-gate regression lane
seonghobae Sep 4, 2026
ce40546
Merge protected main into acquisition evidence lane
seonghobae Sep 4, 2026
f6c6af5
merge: restack #543 on protected reviewer truth
seonghobae Sep 6, 2026
e32e7e7
Restack acquisition evidence on protected reviewer foundation
seonghobae Sep 6, 2026
52b66ca
merge(reviewer): restack shared noema-core on protected reviewer foun…
seonghobae Sep 6, 2026
cf5dfa1
merge(context-fabric): restack shared noema-core on protected context…
seonghobae Sep 6, 2026
6f09d16
merge(context-fabric): restack required-gate regression on protected …
seonghobae Sep 6, 2026
81ef8b7
merge(context-fabric): restack acquisition evidence on protected cont…
seonghobae Sep 6, 2026
908d9cc
docs(release): restore noema-core Unreleased note
seonghobae Sep 6, 2026
c9c2d86
merge: converge exact-head gate regression onto protected #533 truth
seonghobae Sep 6, 2026
6d6e0a4
merge: converge noema-core Shared Kernel onto protected #533 truth
seonghobae Sep 6, 2026
a1172fc
merge: converge noema-core Shared Kernel onto protected #552 truth
seonghobae Sep 6, 2026
a6970ca
merge: converge exact-head gate regression onto protected #552 truth
seonghobae Sep 6, 2026
21ead9f
fix(acquisition): converge evidence authority on current main
seonghobae Sep 6, 2026
8415e3c
merge: restack noema-core after #527 trust integration
seonghobae Sep 6, 2026
f07679d
merge: restack exact-head gate regression after #527 trust integration
seonghobae Sep 6, 2026
bd4c907
merge: restack acquisition evidence after #527 trust integration
seonghobae Sep 6, 2026
399d51d
merge(main): restack acquisition evidence after protected trust integ…
seonghobae Sep 6, 2026
e255bf1
merge(main): restack exact-head gate regression after protected trust…
seonghobae Sep 6, 2026
82366b2
merge(main): restack noema-core after protected trust integration
seonghobae Sep 6, 2026
d9b2a95
Merge pull request #526 from ContextualWisdomLab/fix/acquisition-sour…
seonghobae Sep 7, 2026
b14b37c
merge(restack): rebase #543 onto protected main d9b2a95
seonghobae Sep 7, 2026
a5cd666
chore: restack noema-core foundation on protected main
seonghobae Sep 7, 2026
fdf1d8e
docs: preserve noema-core changelog on current main
seonghobae Sep 7, 2026
5cd6341
Merge pull request #543 from ContextualWisdomLab/chore/paths-ignore-fix
seonghobae Sep 7, 2026
4fe6fe8
chore: restack noema-core on protected main
seonghobae Sep 7, 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
2 changes: 1 addition & 1 deletion .github/workflows/central-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ jobs:
- name: Run independent PydanticAI review and publish current-head verdict
env:
GH_TOKEN: ${{ steps.noema_write_app.outputs.token }}
PYTHONPATH: ${{ github.workspace }}/reviewer
PYTHONPATH: ${{ github.workspace }}/reviewer:${{ github.workspace }}/packages/noema-core/src
Comment thread
seonghobae marked this conversation as resolved.
Resolved
NOEMA_REVIEW_TOKEN_SOURCE: noema-github-app
NOEMA_LLM_API_URL: ${{ vars.NOEMA_LLM_API_URL }}
NOEMA_LLM_MODEL: ${{ vars.NOEMA_LLM_MODEL }}
Expand Down
89 changes: 88 additions & 1 deletion .github/workflows/reviewer-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ jobs:
timeout-minutes: 30
env:
NOEMA_CODEGRAPH_SANDBOX_SOURCE_IMAGE: gcr.io/distroless/java-base-debian13:nonroot
PYTHONPATH: ${{ github.workspace }}/reviewer:${{ github.workspace }}/packages/noema-core/src
defaults:
run:
working-directory: reviewer
Expand Down Expand Up @@ -50,12 +51,98 @@ jobs:
- name: install (hash-pinned dependencies)
run: pip install --require-hashes --no-deps -r requirements-ci-hashes.txt

- name: test noema-core (100% line+branch coverage gate)
working-directory: packages/noema-core
run: python -m pytest

- name: docstring coverage noema-core (100% gate)
working-directory: packages/noema-core
run: python -m interrogate -c pyproject.toml src/noema_core

- name: test (100% line+branch coverage gate)
run: python -m pytest

- name: docstring coverage (100% gate)
run: python -m interrogate -c pyproject.toml noema_reviewer

- name: smoke-test installed reviewer wheel and sdist-to-wheel path
run: |
set -euo pipefail
wheel_dir="$RUNNER_TEMP/noema-reviewer-wheel"
sdist_dir="$RUNNER_TEMP/noema-reviewer-sdist"
sdist_wheel_dir="$RUNNER_TEMP/noema-reviewer-sdist-wheel"
direct_venv="$RUNNER_TEMP/noema-reviewer-install-smoke"
sdist_venv="$RUNNER_TEMP/noema-reviewer-sdist-install-smoke"
mkdir -p "$wheel_dir" "$sdist_dir" "$sdist_wheel_dir"

python -m pip wheel . --no-deps --no-build-isolation --wheel-dir "$wheel_dir"
direct_wheel="$(find "$wheel_dir" -maxdepth 1 -type f -name 'noema_reviewer-*.whl' -print -quit)"
test -n "$direct_wheel"

SDIST_DIR="$sdist_dir" SDIST_NAME_FILE="$RUNNER_TEMP/noema-reviewer-sdist-name" python - <<'PY'
import os
from pathlib import Path
from build_backend import build_sdist

sdist_name = build_sdist(os.environ["SDIST_DIR"])
Path(os.environ["SDIST_NAME_FILE"]).write_text(sdist_name, encoding="utf-8")
PY
sdist="$sdist_dir/$(cat "$RUNNER_TEMP/noema-reviewer-sdist-name")"
test -f "$sdist"
python -m pip wheel "$sdist" --no-deps --no-build-isolation --wheel-dir "$sdist_wheel_dir"
sdist_wheel="$(find "$sdist_wheel_dir" -maxdepth 1 -type f -name 'noema_reviewer-*.whl' -print -quit)"
test -n "$sdist_wheel"

for contract in direct sdist; do
if [ "$contract" = direct ]; then
wheel="$direct_wheel"
venv_dir="$direct_venv"
else
wheel="$sdist_wheel"
venv_dir="$sdist_venv"
fi
python -m venv --system-site-packages "$venv_dir"
"$venv_dir/bin/python" -m pip install --no-deps "$wheel"
(
cd "$RUNNER_TEMP"
PYTHONPATH='' "$venv_dir/bin/python" - <<'PY'
import hashlib
import os
from pathlib import Path

import noema_core
import noema_core.agent
import noema_reviewer
from noema_reviewer.cli import parse_args

canonical_agent = Path(os.environ["GITHUB_WORKSPACE"]) / "packages" / "noema-core" / "src" / "noema_core" / "agent.py"
installed_agent = Path(noema_core.agent.__file__)
assert hashlib.sha256(installed_agent.read_bytes()).digest() == hashlib.sha256(canonical_agent.read_bytes()).digest()
assert noema_core.NOEMA_PERSONA
assert noema_reviewer.build_agent is not None
assert parse_args([]).repo == ""
Comment thread
seonghobae marked this conversation as resolved.
Resolved
PY
)
done

- name: smoke-test isolated editable reviewer with locked runtime dependencies
run: |
set -euo pipefail
editable_venv="$RUNNER_TEMP/noema-reviewer-editable-smoke"
python -m venv "$editable_venv"
"$editable_venv/bin/python" -m pip install --require-hashes --no-deps -r requirements-ci-hashes.txt
"$editable_venv/bin/python" -m pip install --no-deps -e .
(
cd "$RUNNER_TEMP"
PYTHONPATH='' "$editable_venv/bin/python" - <<'PY'
import noema_core
import noema_reviewer

assert noema_core.build_agent is not None
assert noema_reviewer.build_agent is not None
PY
)

- name: install lock-pinned CodeGraph tooling for sandbox smoke test
env:
NPM_CONFIG_IGNORE_SCRIPTS: "true"
Expand Down Expand Up @@ -98,7 +185,7 @@ jobs:
source_root="$RUNNER_TEMP/noema-codegraph-smoke"
mkdir -p "$source_root"
printf 'export const commercialReadiness = true;\n' >"$source_root/example.ts"
PYTHONPATH=. python - <<'PY'
python - <<'PY'
import os
from noema_reviewer.sandbox import DockerCodeGraphRunner

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ exchange-30d.ndjson
exchange-30d.ndjson.provenance.json
noema-kpi-evidence.json
noema-smoke-evidence.json
reviewer/_build_include/
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Changelog

## Unreleased
- `reviewer/noema_reviewer`의 PydanticAI `Agent` 구성 배선(`AsyncOpenAI` → `OpenAIChatModel` → `OpenAIProvider` → `Agent(...)`)을 신규 `packages/noema-core` 서브패키지로 추출한다(`docs/adr/0012-shared-noema-core-package.md`). 이 배선은 naruon의 `noema_agent.py:build_noema_agent`에도 독립적으로 존재하는 실제 중복이며, `noema-core`는 그 중복만 제거한다 — verdict 스키마, gating, tool/deps 기계, 자격 증명 해석 정책은 각 소비자에 그대로 남는다. `reviewer/`는 이번 PR에서 유일한 소비자이며(self-consumption only), 동작 변화 없이 기존 100% coverage/docstring 테스트 스위트가 그대로 통과한다. `noema-core`는 아직 게시되지 않아 CI/로컬 테스트 모두 `PYTHONPATH`로만 제공되며(기존에 `noema_reviewer` 자체를 제공하던 방식과 동일), PyPI 게시와 naruon 쪽 채택은 별도 후속 PR이다.
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
Resolved
- Noema의 필수 PR 워크플로 `ci`, `reviewer-ci`, `patch-validator-image`를 부동 `ubuntu-latest` 대신 명시적 `ubuntu-24.04` GitHub-hosted runner에 고정하고, 인용 여부와 무관하게 `ubuntu-latest` 회귀를 탐지하는 계약 테스트를 추가해 pre-checkout runner-assignment stall의 repository-owned selector 원인을 제거한다. 중앙 `Security Scan`의 runner/control-plane 권한은 별도 `.github` owner 경계에 유지한다.
- 비공개 취약점 보고 감사가 16 KiB 응답 상한, bounded stream 취소, canonical repository/source identity의 독립 검증, SHA-1/SHA-256 exact revision, symlink·retained-path 보호를 실패-폐쇄로 강제한다. 이 감사 결과는 live private reporting 활성화, notification staffing, 실제 advisory 대응 또는 release/deployment 완료 증거를 대신하지 않는다.
- External scheduler evidence audits now retain source authority through final report publication: reports are owner-only, no-follow, exclusive one-shot receipts, so a concurrent rename cannot move the accepted source inode onto the report pathname and have it replaced. Source/report path and inode alias checks, single-link retained-source validation, and Unicode control sanitization remain fail closed.
Expand Down
Loading
Loading