Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
338 commits
Select commit Hold shift + click to select a range
e6e0f21
test(workflow): reject effect start after cancellation
seonghobae Sep 2, 2026
c25e032
fix(workflow): honor cancellation before effect start
seonghobae Sep 2, 2026
ae0ac5a
test(workflow): reject pending state with crossed effect boundary
seonghobae Sep 2, 2026
9360761
test(workflow): reject legacy unknown replay authority
seonghobae Sep 2, 2026
17beb35
fix(workflow): fail closed on ambiguous effect replay state
seonghobae Sep 2, 2026
2715409
test(workflow): align recovery contract with effect-start evidence
seonghobae Sep 2, 2026
8e16612
test(workflow): align exhausted-attempt failure contract
seonghobae Sep 2, 2026
6b774c2
test(workflow): preserve legacy pure recovery authority
seonghobae Sep 2, 2026
4f44657
fix(workflow): scope replay evidence gate to side effects
seonghobae Sep 2, 2026
b976df6
test(workflow): prove bounded admission-order starvation
seonghobae Sep 2, 2026
8061cca
test(workflow): exercise atomic claim on side effects
seonghobae Sep 2, 2026
e83d7f0
test: retain started idempotent claim under cancellation
seonghobae Sep 2, 2026
e2e49d1
fix: preserve started idempotent claim on cancellation
seonghobae Sep 2, 2026
16c896e
docs: record idempotent cancellation reconciliation
seonghobae Sep 2, 2026
a2bdbd4
Merge protected main into workflow state-store candidate
seonghobae Sep 3, 2026
6a0f5c0
fix(workflow): close CAS/validation gaps and coverage found in PR review
claude Sep 3, 2026
b9549e4
test(workflow): close remaining 100%-coverage gaps in the state store
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
9025364
test(workflow): require deployed single-authority Durable Object routing
seonghobae Sep 3, 2026
8f269fb
feat(workflow): bind durable state authority to one execution object
seonghobae Sep 3, 2026
c9bbeff
feat(workflow): export durable workflow state runtime class
seonghobae Sep 3, 2026
7dd4806
feat(workflow): declare workflow state durable object binding
seonghobae Sep 3, 2026
fe2b928
test(workflow): cover durable routing failure contracts
seonghobae Sep 3, 2026
6c727ac
docs(workflow): bind ADR-0013 to deployed durable-object composition
seonghobae Sep 3, 2026
b42206a
docs(workflow): record durable-object routing repair in product baseline
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
81e2e14
test(workflow): require authenticated durable-state commands
seonghobae Sep 3, 2026
f9124e3
revert test: preserve binding-scoped Durable Object authority
seonghobae Sep 3, 2026
bd25823
docs(adr): correct Durable Object RPC and binding authority claims
seonghobae Sep 3, 2026
88e2758
test(workflow): classify malformed durable claims as invalid requests
seonghobae Sep 3, 2026
87a35fc
fix(workflow): reject malformed durable claims as invalid input
seonghobae Sep 3, 2026
f57eb83
test(workflow): forbid parallel plans for one execution
seonghobae Sep 3, 2026
cb19601
fix(workflow): bind one durable plan authority per execution
seonghobae Sep 3, 2026
c3d4d05
test(workflow): assert conflicting execution plan authority
seonghobae Sep 3, 2026
138161b
test(workflow): cover missing execution plan authority
seonghobae Sep 3, 2026
47b2365
test(workflow): reject malformed execution plan authority
seonghobae Sep 3, 2026
d24976d
fix(workflow): fail closed on malformed plan authority
seonghobae Sep 3, 2026
ce7520d
test(workflow): enforce routed single-plan execution authority
seonghobae Sep 3, 2026
3cb93a7
docs(adr): bind one plan authority to each workflow execution
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
284ab47
test(workflow): reject legacy cross-plan authority takeover
seonghobae Sep 3, 2026
f8025d2
fix(workflow): reject legacy cross-plan authority takeover
seonghobae Sep 3, 2026
e138061
test(workflow): model transactional legacy-state listing
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
d7e9dda
test(workflow): model legacy-state listing in atomicity fake
seonghobae Sep 3, 2026
fe4e5a2
test(workflow): model legacy-state listing in cancellation fake
seonghobae Sep 3, 2026
967b714
test(workflow): model legacy-state listing in integrity fake
seonghobae Sep 3, 2026
7066a84
test(workflow): model legacy-state listing in provenance fake
seonghobae Sep 3, 2026
21a509f
test(workflow): model legacy-state listing in recovery fake
seonghobae Sep 3, 2026
a0daaf6
test(workflow): model legacy-state listing in runner fake
seonghobae Sep 3, 2026
1daa3c0
test(workflow): model legacy-state listing in routed authority fake
seonghobae Sep 3, 2026
d8920e8
test(workflow): model legacy-state listing in routing fake
seonghobae Sep 3, 2026
625088f
test(workflow): model legacy-state listing in recovery-claim fake
seonghobae Sep 3, 2026
20170eb
test(workflow): model legacy-state listing in failure-contract fake
seonghobae Sep 3, 2026
2d2343b
fix(reviewer): remove empty exception handler
seonghobae Sep 3, 2026
fc17c70
test(workflow): reject malformed durable claims at command boundary
seonghobae Sep 3, 2026
997ba83
fix(workflow): validate durable claim command shape
seonghobae Sep 3, 2026
646fcf1
test(workflow): reject mismatched transition result receipts
seonghobae Sep 3, 2026
467e575
fix(workflow): bind transition receipts to valid result states
seonghobae Sep 3, 2026
97cecea
test(workflow): reject misrouted durable state commands
seonghobae Sep 3, 2026
4bf919f
fix(workflow): bind durable object to execution identity
seonghobae Sep 3, 2026
1332755
test(workflow): retain routed object identity in plan fixture
seonghobae Sep 3, 2026
c3781b3
test(workflow): reject malformed durable record shapes
seonghobae Sep 3, 2026
eeb7272
fix(workflow): classify malformed durable state as conflict
seonghobae Sep 3, 2026
7d5ac41
docs(adr): bind workflow authority to retained state integrity
seonghobae Sep 3, 2026
f9738c5
test(workflow): reject malformed command scalar fields
seonghobae Sep 3, 2026
3f60c86
fix(workflow): admit command scalar fields before arbitration
seonghobae Sep 3, 2026
a1058ae
test(workflow): reject noncanonical command task identities
seonghobae Sep 3, 2026
6b27f08
fix(workflow): validate command task identity before arbitration
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
52c5724
test(workflow): reject state resurrection after partial durable loss
seonghobae Sep 3, 2026
359e609
fix(workflow): fail closed on missing durable state with retained aut…
seonghobae Sep 3, 2026
bff157c
test(workflow): reject impossible claim attempt at command boundary
seonghobae Sep 3, 2026
cfb9a02
fix(workflow): reject impossible claim attempts before arbitration
seonghobae Sep 3, 2026
0c0c681
test(workflow): require exact effect-start authority before invocation
seonghobae Sep 3, 2026
637da32
fix(workflow): fail closed on unproven effect-start authority
seonghobae Sep 3, 2026
891fa74
test(workflow): require durable terminal authority
seonghobae Sep 3, 2026
3685ce5
fix(workflow): verify durable terminal authority
seonghobae Sep 4, 2026
4f4625d
test(workflow): reject substituted task-effect claim authority
seonghobae Sep 4, 2026
da225d1
fix(workflow): bind runner claims to admitted task authority
seonghobae Sep 4, 2026
c744f9d
test(workflow): reject impossible runner claim attempts
seonghobae Sep 4, 2026
f3a0226
fix(workflow): reject impossible runner claim attempts
seonghobae Sep 4, 2026
3f42df7
test(workflow): reject non-canonical runner claim authority
seonghobae Sep 4, 2026
da3c53c
fix(workflow): enforce canonical runner claim identity
seonghobae Sep 4, 2026
fb54bab
test(workflow): reject malformed claim before state port
seonghobae Sep 4, 2026
eca1e63
fix(workflow): admit claim id before state mutation
seonghobae Sep 4, 2026
a14cbe0
fix(ci): make wheel isolation contract indentation-agnostic
seonghobae Sep 4, 2026
7188da7
Merge remote-tracking branch 'origin/main' into workflow-state-store-…
seonghobae Sep 4, 2026
03f08ed
fix(reviewer): bind failed checks to actionable source evidence
seonghobae Sep 4, 2026
182d63e
test(reviewer): require one RCA per failed check
seonghobae Sep 4, 2026
6ff7954
fix(reviewer): model exact failed-check source binding
seonghobae Sep 4, 2026
2ad138f
fix(reviewer): bind each failed check to its own RCA
seonghobae Sep 4, 2026
bd364a0
test(reviewer): bind actionable RCA to exact check
seonghobae Sep 4, 2026
20c35e7
fix(reviewer): require exact failed-check identity in RCA
seonghobae Sep 4, 2026
2361b76
test(reviewer): cover exact failed-check causal binding
seonghobae Sep 4, 2026
1f7d76d
docs(reviewer): document failed-check causal binding
seonghobae Sep 4, 2026
2238410
docs(reviewer): make failed-check RCA contract code-current
seonghobae Sep 4, 2026
0a6fac8
feat(reviewer): enforce actionable finding contract (#549)
seonghobae Sep 4, 2026
b2d2853
docs(reviewer): align sandbox contract with actionable findings
seonghobae Sep 4, 2026
7d4aa92
docs(reviewer): document actionable finding publication
seonghobae Sep 4, 2026
e924c46
Merge fix/codegraph-smoke-semantic-gate into failed-check RCA
seonghobae Sep 4, 2026
8a30e4a
Merge fix/codegraph-smoke-semantic-gate into failed-check RCA
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
ba480c8
Merge current CodeGraph provenance authority into failed-check RCA
seonghobae Sep 4, 2026
eae8803
Merge current CodeGraph response-classification authority into failed…
seonghobae Sep 4, 2026
dd5c0f0
test(reviewer): inherit lifecycle-prefixed empty-result regression
seonghobae Sep 4, 2026
3e2615f
fix(reviewer): inherit lifecycle-aware CodeGraph classification
seonghobae Sep 4, 2026
ebe554a
style(reviewer): preserve stacked gate structure after restack repair
seonghobae Sep 4, 2026
df7f499
docs(reviewer): inherit semantic empty-result prefix contract
seonghobae Sep 4, 2026
b31de77
merge: restack failed-check RCA on current CodeGraph gate
seonghobae Sep 4, 2026
e4adc92
merge: restack failed-check RCA on reviewer fixture repair
seonghobae Sep 4, 2026
8d0f949
docs(reviewer): carry symbol-seeded recovery contract into failed-che…
seonghobae Sep 4, 2026
39adb66
merge: restack failed-check lane on symbol-seeded reviewer recovery
seonghobae Sep 4, 2026
482e773
merge: restack failed-check lane on unambiguous CodeGraph recovery
seonghobae Sep 4, 2026
97227ab
merge: inherit bounded CodeGraph recovery coverage
seonghobae Sep 4, 2026
1d8fbdf
merge: inherit lifecycle-safe CodeGraph recovery
seonghobae Sep 4, 2026
dd405f1
merge: inherit exact-whitespace CodeGraph recovery
seonghobae Sep 4, 2026
b61daf1
docs(reviewer): preserve exact-whitespace retrieval contract
seonghobae Sep 4, 2026
3d76ab1
merge: inherit code-current CodeGraph recovery docs
seonghobae Sep 4, 2026
ca300fe
fix(reviewer): preserve exact CodeGraph path scope in failed-check lane
seonghobae Sep 4, 2026
39325bd
docs(reviewer): inherit exact CodeGraph path scope contract
seonghobae Sep 4, 2026
fababd1
test(reviewer): inherit long CodeGraph path identity regression
seonghobae Sep 4, 2026
ef046ed
merge: inherit exact CodeGraph path identity prerequisite
seonghobae Sep 4, 2026
1a2ec03
test(reviewer): inherit CodeGraph scope coverage guard
seonghobae Sep 4, 2026
19c24b4
merge: inherit CodeGraph scope coverage prerequisite
seonghobae Sep 4, 2026
3fdfc1c
docs(reviewer): compose exact long-path recovery with actionable find…
seonghobae Sep 4, 2026
f0ed4b2
merge: inherit exact long-path CodeGraph recovery
seonghobae Sep 4, 2026
0663476
fix(runtime): narrow canonical execution identity after admission
seonghobae Sep 4, 2026
32cf314
fix(reviewer): inherit CodeGraph environment isolation
seonghobae Sep 5, 2026
581e5ca
test(reviewer): preserve CodeGraph environment isolation
seonghobae Sep 5, 2026
7c039a8
test(reviewer): inherit ambient CodeGraph authority regression
seonghobae Sep 5, 2026
4df310b
docs(reviewer): retain CodeGraph ambient-authority boundary
seonghobae Sep 5, 2026
99b168e
merge: restack failed-check evidence on CodeGraph isolation
seonghobae Sep 5, 2026
19ebf00
fix(reviewer): preserve actionability while excluding self-check
seonghobae Sep 5, 2026
d3c69c5
test(reviewer): retain self-check cycle regression
seonghobae Sep 5, 2026
70d160e
test(reviewer): retain isolated CodeGraph home regression
seonghobae Sep 5, 2026
a61cc29
fix(reviewer): preserve causal logs with isolated CodeGraph home
seonghobae Sep 5, 2026
491ecad
docs(reviewer): compose actionability with self-check and isolated home
seonghobae Sep 5, 2026
626670d
merge: inherit reviewer self-check and isolated-home prerequisite
seonghobae Sep 5, 2026
61599f8
docs(reviewer): compose complete CodeGraph recovery contract
seonghobae Sep 5, 2026
13749c1
merge: inherit complete CodeGraph recovery boundary
seonghobae Sep 5, 2026
6d9626e
test(reviewer): inherit independent check evidence RED
seonghobae Sep 5, 2026
2c041db
fix(reviewer): compose independent check evidence boundary
seonghobae Sep 5, 2026
1160aca
docs(reviewer): compose independent evidence cycle rule
seonghobae Sep 5, 2026
76c5d70
merge: inherit independent evidence prerequisite
seonghobae Sep 5, 2026
3bc5449
fix(reviewer): preserve distinct deterministic findings
seonghobae Sep 5, 2026
10f4241
test(reviewer): retain distinct deterministic finding evidence
seonghobae Sep 5, 2026
08720c9
merge: compose deterministic finding identity prerequisite
seonghobae Sep 5, 2026
db1b6a6
test(reviewer): inherit CodeGraph probe-budget boundary
seonghobae Sep 5, 2026
5b6bdc8
merge: restack #548 on #546 reviewer prerequisite
seonghobae Sep 5, 2026
5bf6ed6
merge: restack #548 on complete CodeGraph recovery
seonghobae Sep 5, 2026
dcb961a
fix(reviewer): preserve complete CodeGraph primary scope
seonghobae Sep 5, 2026
fed0831
docs(reviewer): retain exact CodeGraph scope in actionable lane
seonghobae Sep 5, 2026
52804b1
merge: restack #548 on complete CodeGraph primary scope
seonghobae Sep 5, 2026
76d20ff
merge(reviewer): compose symlink-safe CodeGraph seed boundary
seonghobae Sep 5, 2026
852fae2
merge(reviewer): inherit symlink-parent recovery regression
seonghobae Sep 5, 2026
a80493d
merge(reviewer): document symlink-free recovery on #548
seonghobae Sep 5, 2026
51b3bf8
merge: restack #548 on symlink-safe CodeGraph seed boundary
seonghobae Sep 5, 2026
0b7b911
merge: restack #548 on review-wait cycle repair
seonghobae Sep 5, 2026
c5ed0cf
merge: restack #548 on complete symbol-map recovery
seonghobae Sep 5, 2026
1b26024
fix(runtime): document durable routing exports
seonghobae Sep 5, 2026
abaf95c
merge: restack #548 on physical CodeGraph checkout provenance
seonghobae Sep 5, 2026
86038ef
merge: restack #548 on exact CodeGraph path identity
seonghobae Sep 5, 2026
0a039bf
merge: restack #548 on Unicode CodeGraph scope parity
seonghobae Sep 5, 2026
7cbdeee
merge: restack #548 on executable CodeGraph retry semantics
seonghobae Sep 5, 2026
fa93ba3
merge: restack #548 on physical Docker checkout provenance
seonghobae Sep 5, 2026
19315d9
merge: restack #548 on complete reviewer context
seonghobae Sep 5, 2026
a7066ea
merge: restack #548 on fail-before-execution reviewer scope
seonghobae Sep 5, 2026
6f57924
fix(reviewer): preserve prompt-data boundary in failed-check lane
seonghobae Sep 5, 2026
7e2522e
merge: restack #548 on JSON-scope reviewer recovery
seonghobae Sep 5, 2026
24c9993
merge: restack #548 on JSON-safe symbol recovery
seonghobae Sep 5, 2026
1209874
docs(reviewer): merge JSON-safe seed contract into #548
seonghobae Sep 5, 2026
bb7aacf
merge: restack #548 on reviewer recovery documentation
seonghobae Sep 5, 2026
f0685c2
test(workflow): cover failure authority boundaries
seonghobae Sep 5, 2026
7e5ff9c
test(workflow): cover both foreign snapshot identities
seonghobae Sep 5, 2026
dd73533
merge: restack #548 on exact Linux path identity prerequisite
seonghobae Sep 5, 2026
19c6fa2
test(workflow): fail on extra durable command payload
seonghobae Sep 5, 2026
10708af
fix(workflow): minimize durable command transport payload
seonghobae Sep 5, 2026
65a256b
test(reviewer): align #548 deterministic identity fixture
seonghobae Sep 5, 2026
bb8fe78
merge: restack #548 on reviewer hosted-RED repair
seonghobae Sep 5, 2026
00e871e
test(workflow): pin command operation during transport
seonghobae Sep 5, 2026
1f7f5b9
fix(workflow): snapshot command operation for transport
seonghobae Sep 5, 2026
e88a379
test(workflow): reject nested claim payload leakage
seonghobae Sep 5, 2026
81abbab
test(workflow): cover nested checkpoint transport minimization
seonghobae Sep 5, 2026
f915d13
test(workflow): preserve fail-closed nested payload validation
seonghobae Sep 5, 2026
037ec4e
fix(workflow): minimize nested durable command payloads
seonghobae Sep 5, 2026
d3b42ac
merge: restack #548 on reviewer docstring repair
seonghobae Sep 5, 2026
74a9493
test(workflow): cover missing durable state authority paths
seonghobae Sep 5, 2026
6793a32
test(workflow): cover unexpected durable state errors
seonghobae Sep 5, 2026
4d8f314
test(reviewer): cover failed-check edge branches
seonghobae Sep 5, 2026
2fa21a1
merge: restack #548 on protected reviewer truth
seonghobae Sep 6, 2026
d4e3f27
merge: restack #542 on protected reviewer truth
seonghobae Sep 6, 2026
f6c6af5
merge: restack #543 on protected reviewer truth
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
a0823f1
merge(context-fabric): restack failed-check evidence on protected con…
seonghobae Sep 6, 2026
6953eaa
merge(context-fabric): restack durable workflow authority on protecte…
seonghobae Sep 6, 2026
6551a86
test(reviewer): expose non-exact finding line admission
seonghobae Sep 6, 2026
5c20453
fix(reviewer): require exact positive finding lines
seonghobae Sep 6, 2026
02ec900
chore(reviewer): keep line-contract repair minimal
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
3cb7261
merge: converge failed-check evidence 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
75f93fd
merge: converge failed-check evidence onto protected #552 truth
seonghobae Sep 6, 2026
93bfa5e
merge: converge durable workflow authority onto protected #552 truth
seonghobae Sep 6, 2026
049a57d
merge: restack reviewer evidence after #527 trust integration
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
9236775
merge: restack durable workflow state after #527 trust integration
seonghobae Sep 6, 2026
8e7e0bb
test(workflow): reject deleted retained transition receipts
seonghobae Sep 6, 2026
35f80f2
fix(workflow): fail closed on deleted retained transition receipts
seonghobae Sep 6, 2026
8afef54
test(workflow): reject explicit empty transition ledger
seonghobae Sep 6, 2026
55194e1
fix(workflow): reject explicit empty transition ledger
seonghobae Sep 6, 2026
4185df2
test(workflow): reject missing initialized provenance root
seonghobae Sep 6, 2026
1909f23
fix(workflow): require initialized provenance root
seonghobae Sep 6, 2026
84a2cd0
fix(workflow): preserve legacy first-claim provenance
seonghobae Sep 6, 2026
2bb6076
test(workflow): cover malformed retained receipt rejection
seonghobae Sep 6, 2026
7f743f4
merge(main): restack durable workflow state after trusted source roll…
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
e24d310
merge(main): restack reviewer evidence after protected trust integration
seonghobae Sep 6, 2026
4616b5e
test(workflow): isolate malformed retained receipt invariant
seonghobae Sep 6, 2026
b14b37c
merge(restack): rebase #543 onto protected main d9b2a95
seonghobae Sep 7, 2026
46439b1
merge(main): non-force restack durable workflow lane after #526
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
6cb43c1
merge(main): non-force restack durable workflow lane after #543
seonghobae Sep 7, 2026
4c1d174
Merge pull request #536 from ContextualWisdomLab/feat/noema-core-shar…
seonghobae Sep 7, 2026
fb44888
chore(restack): merge protected main into #548 branch
seonghobae Sep 7, 2026
5380e91
merge(main): non-force converge durable workflow after #536
seonghobae Sep 7, 2026
9f2b8af
fix(workflow): preserve protected noema-core authority
seonghobae Sep 7, 2026
e6de53a
Merge pull request #548 from ContextualWisdomLab/codex/noema-failed-c…
seonghobae Sep 7, 2026
195fdd7
chore: converge durable workflow after reviewer evidence merge
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
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"
(
cd "$RUNNER_TEMP"
PYTHONPATH='' "$venv_dir/bin/python" -m pip install --no-deps "$wheel"
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 == ""
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/
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Changelog

## Unreleased
- `noema-core` provider-neutral Shared Kernel을 추가하여 이미 해석된 PydanticAI `Model`과 역할별 prompt/schema만 받아 Agent를 구성한다. 문자열 model identifier와 provider discovery·credential·routing·retry·failover는 Shared Kernel 밖에 두고 `Agent(..., retries=0)`으로 repository-local model-attempt authority를 만들지 않는다. Reviewer wheel·sdist·editable 설치는 canonical `packages/noema-core` source를 포함하거나 참조하며 별도 100% coverage·docstring과 clean install smoke로 검증한다. 외부 소비는 immutable versioned publication·exact source identity·SBOM/provenance·licensing/NOTICE·compatibility/rollback evidence 전에는 허용하지 않는다.
- `writeAcquisitionPrivateFile`의 기존 대상 사전-교체 검증 read(`existingDescriptor` open)에 `O_NONBLOCK`을 추가해 fail-closed를 강화한다. 이 open은 이미 필수 filesystem capability로 `O_NONBLOCK`을 검증했지만 실제로는 사용하지 않아, 로컬 권한을 가진 행위자가 사전 `lstatSync` 정규 파일 확인과 이 open 사이에 대상 경로를 FIFO로 교체하면 writer가 나타날 때까지 무한정 블로킹해 writer lease를 계속 점유할 수 있었다. `O_NONBLOCK`은 정규 파일에는 영향이 없고, FIFO에서는 open이 즉시 반환되어 이어지는 descriptor 타입 검증이 그대로 fail-closed로 거부한다. 회귀 테스트(`test/acquisition-private-output-existing-target-nonblocking.test.ts`)와 기존 open-flags 계약 테스트 갱신으로 고정했다.
- `readStableFile`의 close-후 재검증 단계(`afterClosePath` lookup 실패)와 `writeAcquisitionPrivateFile`의 cleanup-시점 `O_NONBLOCK` 소실 분기에 대한 fail-closed 회귀 테스트를 추가해 `scripts/lib/acquisition-data-room-integrity.mjs`/`scripts/lib/acquisition-private-output.mjs`의 100% coverage 게이트를 복구한다. 동작 변화는 없다.
- Noema reviewer의 strict changed-file evidence를 historical 12-file prefix에서 canonical 80-file CodeGraph scope와 일치시켰다. 13–80 file PR은 선택된 모든 current-head file context를 유지하고 81개 이상은 기존처럼 실패-폐쇄하며, local CodeGraph fallback의 `HOME`·`TEMP`·`TMP`·`TMPDIR`은 ambient host path를 상속하지 않고 실행마다 새 private temporary directory로 격리한다.
Expand Down Expand Up @@ -35,7 +36,7 @@
- 비리뷰 LLM 작업인 `hourly-product-development`를 리뷰와 동일한 `contextual-orchestrator` 게이트웨이 계약(`NOEMA_LLM_API_URL` `/v1`, 모델 별칭 `contextual-orchestrator`, 전용 `NOEMA_LLM_API_KEY`)으로 전환한다. Llama Nemotron → Nemotron Super → DeepSeek 순차 NIM 후보 폴백과 `NVIDIA_NIM_API_KEY` 직접 호출을 제거하고, 공유 `scripts/verify-orchestrator-gateway.mjs`가 `/healthz` 신원과 직접 공급자 호스트를 실패-폐쇄한다. 리뷰어의 `NOEMA_FALLBACK_*` / PydanticAI `FallbackModel` 순차 폴백도 제거해 남은 설정은 실패-폐쇄한다. 동일 계약을 `contracts/orchestrator-gateway.json`으로 공개해 `ContextualWisdomLab/naruon` 판단·결정 에이전트가 1급 소비자로 재사용할 수 있게 한다. naruon 배선은 별도 저장소 PR이다. 상위 공급자 키는 오케스트레이터 KV에 남기며 OIDC 토큰 중개·App 신원·3-runner 샌드박스 경계는 유지한다.
- 검증된 active-orphan 워크플로 하나를 운영자가 호출할 수 있는 `operations:workflow-registry-disable` 경로를 추가한다. 저장소와 워크플로 ID를 `NOEMA_MAINTAINER_TOKEN_PATH` 위임 토큰 파일 읽기 전에 검사하고, 신선한 전체 레지스트리 감사·즉시 live refresh·프로세스 로컬 plan·보호된 main/워크플로 재검증·사후 전체 감사 봉투(`schema_version` 1, `PASS`/`FAIL`, `remaining_failure_codes`, `remaining_active_orphan_ids`)를 통과한 뒤에만 영수증을 유지한다. 성공 종료와 `post_audit_status: FAIL`은 해당 ID만 `disabled_manually`가 되었고 레지스트리는 아직 더러울 수 있음을 뜻하므로, 운영자는 영수증의 `remaining_active_orphan_ids`로 다음 단일 호출을 이어간다. 배치 비활성화·자가 수리 워크플로·거버넌스 완화는 추가하지 않으며 호출 계약은 doctoring에 기록한다.
- 읽기 전용 `operations:runner-assignment` audit를 추가해 exact workflow run/source head에 대한 runner assignment를 완전 pagination으로 진단하고, 신선한 unassigned queue는 bounded grace 이후 실패-폐쇄한다. 이 증빙은 runner assignment와 required Check/CI, formal review, merge, release, deployment authority를 분리하며 assigned runner 이후 workflow failure를 성공으로 승격하지 않는다.
- production `operations:runner-assignment` audit는 `NOEMA_MAINTAINER_TOKEN_PATH`의 owner-only capability file만 읽고, ambient `GH_TOKEN`만 있으면 실패-폐쇄한다. `gh` spawn/stderr 진단은 활성 토큰을 exact-match로 `[REDACTED]` 치환하며, 빈 secret에 대해서는 원문 진단을 보존한다. assignment authority는 양의 `runner_id` 또는 비어 있지 않은 `runner_name`만 인정하며 queued `started_at`은 assignment evidence가 아니다. 운영자는 `printf '%s'`로 capability file을 만들고(`echo`/`printf '%s\\n'`는 trailing newline 때문에 실패-폐쇄), Actions workflow-run/job read만 가진 짧은 토큰을 준비한 뒤 PASS를 required Check·formal review·merge 권한으로 해석하지 마십시오.
- production `operations:runner-assignment` audit는 `NOEMA_MAINTAINER_TOKEN_PATH`의 owner-only capability file만 읽고, ambient `GH_TOKEN`만 있으면 실패-폐쇄한다. `gh` spawn/stderr 진단은 활성 토큰을 exact-match로 `[REDACTED]` 치환하며, 빈 secret에 대해서는 원문 진단을 보존한다. assignment authority는 양의 `runner_id` 또는 비어 있지 않은 `runner_name`만 인정하며 queued `started_at`은 assignment evidence가 아니다. 운영자는 `printf '%s'`로 capability file을 만들고(`echo`/`printf '%s\n'`는 trailing newline 때문에 실패-폐쇄), Actions workflow-run/job read만 가진 짧은 토큰을 준비한 뒤 PASS를 required Check·formal review·merge 권한으로 해석하지 마십시오.
- coordinated vulnerability disclosure 정책과 evidence-preserving vulnerability handling lifecycle, read-only private-vulnerability-reporting setting audit를 추가한다. 이 source 변경은 live private reporting 활성화·notification staffing·end-to-end advisory exercise·release/deployment authority를 증명하지 않는다.
- 개발 의존성 체인의 transitive `nanoid` lockfile resolution을 `3.3.17`에서 `3.3.18`로 최소 갱신하여 GHSA-2v37-7h3g-55p8 / CVE-2026-67213 보안 게이트를 복구한다. PostCSS의 선언 범위 `^3.3.16`과 다른 package metadata는 변경하지 않으며 audit waiver·ignore·severity 완화 없이 `npm ci`/`npm audit --audit-level=high`가 exact head에서 재검증되도록 유지한다.
- lockfile 재생성 도구 체인을 Node.js 24.19.0/npm 11.17.0으로 정확히 고정하고, `strict-allow-scripts=true` 아래 승인된 install-script identity만 실행하며 schema v3 exact-base lockfile change control로 package metadata drift를 실패-폐쇄한다. exact package before/after digest에 더해 top-level metadata digest와 대규모 package-set bulk evidence를 결합하며, 선행 `nanoid@3.3.18` 보안 수정과 explicit `npm ci --legacy-peer-deps=false --install-links=false` 계약을 보존한다. package-manager/toolchain·install-script authority·vulnerability audit·review/merge authority는 별도 증거 계층으로 유지한다.
Expand Down
Loading
Loading