Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
788 commits
Select commit Hold shift + click to select a range
00576bc
fix(admission): classify global pip client cert authority
seonghobae Sep 12, 2026
4b0e96e
refactor(admission): centralize reviewed pip global options
seonghobae Sep 12, 2026
209ec94
refactor(admission): isolate pip proxy authority matcher
seonghobae Sep 12, 2026
f22329d
refactor(admission): share client-cert selector grammar
seonghobae Sep 12, 2026
11791e9
refactor(admission): normalize reviewed pip global authority
seonghobae Sep 12, 2026
18a5bad
fix(admission): classify global pip client certificates (#350)
seonghobae Sep 12, 2026
0df776f
test(admission): expose global pip certificate-store authority
seonghobae Sep 12, 2026
53ef2b1
style(admission): apply rustfmt to global certificate-store RED
seonghobae Sep 12, 2026
14b9dbf
fix(admission): expose reviewed pip certificate-store prefix matcher
seonghobae Sep 12, 2026
0e6d585
fix(admission): classify global pip certificate-store prefixes
seonghobae Sep 12, 2026
b0d7b31
test(admission): reject certificate-store values as package operands
seonghobae Sep 12, 2026
842456f
style(admission): apply rustfmt to certificate-store operand RED
seonghobae Sep 12, 2026
f7d7639
fix(admission): normalize certificate-store authority values
seonghobae Sep 12, 2026
28595a7
fix(admission): keep certificate paths out of artifact operands
seonghobae Sep 12, 2026
7ae5ba6
style(admission): apply rustfmt to authority normalization
seonghobae Sep 12, 2026
79d3045
Merge pull request #351 from ContextualWisdomLab/fix/pypi-global-cert…
seonghobae Sep 12, 2026
498f035
test(security): expose global pip registry authority gap
seonghobae Sep 12, 2026
eb4c885
test(security): format global pip registry RED
seonghobae Sep 12, 2026
871f72a
fix(security): expose reviewed pip registry selector language
seonghobae Sep 12, 2026
7225490
fix(security): normalize reviewed global pip registry authority
seonghobae Sep 12, 2026
de666dd
fix(security): consume global pip registry values causally
seonghobae Sep 12, 2026
6ef5913
test(security): satisfy strict clippy on global pip RED
seonghobae Sep 12, 2026
55a51cf
test(security): require pip registry trust traceability
seonghobae Sep 12, 2026
25f4cc9
docs(security): ground pip registry trust authority
seonghobae Sep 12, 2026
ad4e03e
Merge PR #353: classify global pip registry authority
seonghobae Sep 12, 2026
6816065
test(security): prove global pip client-cert operand precision
seonghobae Sep 12, 2026
6dfb387
test(security): isolate client-cert operand precision RED
seonghobae Sep 12, 2026
1863bec
fix(security): consume global pip client-cert values
seonghobae Sep 12, 2026
cbb57b1
test(security): bind client-cert normalization audit identity
seonghobae Sep 12, 2026
ccebd88
Merge PR #354: preserve global pip client-cert operand precision
seonghobae Sep 12, 2026
1ad7532
test(admission): expose direct-pip Python interpreter authority
seonghobae Sep 12, 2026
7b8c253
fix(admission): classify direct-pip Python interpreter authority
seonghobae Sep 12, 2026
d668dea
Merge pull request #356 from ContextualWisdomLab/fix/pip-python-inter…
seonghobae Sep 12, 2026
7d876e0
test(admission): expose post-command pip Python operand drift
seonghobae Sep 12, 2026
0fba191
test(admission): correct post-command pip Python parser scope
seonghobae Sep 12, 2026
d6fe73e
test(admission): format corrected post-command Python RED
seonghobae Sep 12, 2026
bf28a60
fix(admission): consume post-command pip Python interpreter value
seonghobae Sep 12, 2026
c3d8499
style(admission): apply rustfmt to Python interpreter normalizer
seonghobae Sep 12, 2026
6df63d8
fix(admission): stop pip Python normalization at option terminator
seonghobae Sep 12, 2026
e59ca43
Merge pull request #358 from ContextualWisdomLab/fix/pip-post-command…
seonghobae Sep 12, 2026
87299e9
test(admission): expose pip interpreter parser-phase evidence drift
seonghobae Sep 12, 2026
0b7838a
style(admission): apply rustfmt to parser-phase RED
seonghobae Sep 12, 2026
3d69019
fix(admission): canonicalize pre-command pip Python authority
seonghobae Sep 12, 2026
cfde651
fix(admission): partition pip Python evidence by parser phase
seonghobae Sep 12, 2026
e01f286
style(admission): apply rustfmt to parser-phase repair
seonghobae Sep 12, 2026
e618f37
Merge pull request #360 from ContextualWisdomLab/fix/pip-interpreter-…
seonghobae Sep 12, 2026
17df038
test(security): expose uv bytecode compilation authority
seonghobae Sep 12, 2026
238418c
fix(security): classify uv bytecode materialization authority
seonghobae Sep 12, 2026
b1639d1
fix(security): bind uv bytecode compilation admission
seonghobae Sep 12, 2026
7326f86
style: apply rustfmt to uv bytecode authority
seonghobae Sep 12, 2026
9f6dc5c
Merge pull request #364 from ContextualWisdomLab/fix/agent-admission-…
seonghobae Sep 12, 2026
597cb3b
test(agent-admission): expose uv exact-sync mutation authority
seonghobae Sep 12, 2026
2c95b5b
fix(agent-admission): reject uv exact-sync mutation
seonghobae Sep 12, 2026
9caf1ce
Merge pull request #367 from ContextualWisdomLab/codex/agent-admissio…
seonghobae Sep 12, 2026
788c745
test(security): prove uv Python-provider authority RED
seonghobae Sep 12, 2026
2b78935
test(security): format uv Python-provider RED contract
seonghobae Sep 12, 2026
1c02040
fix(security): classify uv Python-provider authority
seonghobae Sep 12, 2026
8c61e03
fix(security): enforce uv Python-provider admission
seonghobae Sep 12, 2026
27fcf96
style(rust): apply exact rustfmt output
seonghobae Sep 12, 2026
ab481a0
style(rust): format uv provider admission seam
seonghobae Sep 12, 2026
0dbcd7f
Merge pull request #369 from ContextualWisdomLab/codex/agent-admissio…
seonghobae Sep 12, 2026
9f76688
test(security): expose uv build isolation admission gap
seonghobae Sep 12, 2026
19e95a1
test(security): format uv build isolation RED
seonghobae Sep 12, 2026
3eff885
fix(security): classify uv build isolation authority
seonghobae Sep 12, 2026
1bd12cd
fix(security): normalize uv build isolation selector
seonghobae Sep 12, 2026
367d904
fix(security): bind uv build isolation admission
seonghobae Sep 12, 2026
1900f9b
test(security): type uv normalized argv explicitly
seonghobae Sep 12, 2026
2bf6866
refactor(security): retain canonical artifact-variant owner
seonghobae Sep 12, 2026
68cd326
refactor(security): reuse canonical build-variant policy
seonghobae Sep 12, 2026
7bf773c
test(security): lock existing uv build isolation denial
seonghobae Sep 12, 2026
5a4f9ff
Merge pull request #371 from ContextualWisdomLab/codex/agent-admissio…
seonghobae Sep 12, 2026
b820f75
test(security): require uv hash verification authority
seonghobae Sep 12, 2026
f9109bb
style(test): satisfy rustfmt before hostile RED
seonghobae Sep 12, 2026
ffee54d
fix(security): reject uv hash-verification disable selector
seonghobae Sep 12, 2026
2cedf70
fix(security): bind uv hash-verification authority (#373)
seonghobae Sep 12, 2026
9955446
test(admission): expose uv directory config authority
seonghobae Sep 12, 2026
5dcb623
fix(admission): reject uv directory config authority
seonghobae Sep 12, 2026
77c222e
Merge PR #375: bind uv directory config authority
seonghobae Sep 12, 2026
42dcb41
test(admission): expose uv global directory authority evidence gap
seonghobae Sep 12, 2026
9369292
fix(admission): classify uv global directory authority
seonghobae Sep 12, 2026
447bb7d
style(admission): apply rustfmt to uv directory classifier
seonghobae Sep 12, 2026
3f89f56
security(admission): preserve uv global directory authority evidence …
seonghobae Sep 12, 2026
b693120
test(admission): expose uv global config-file authority evidence gap
seonghobae Sep 12, 2026
4ba7ddd
fix(admission): classify uv global config-file authority
seonghobae Sep 12, 2026
5865396
docs(admission): record uv global config-file authority evidence
seonghobae Sep 12, 2026
6a80fdc
security(admission): preserve uv global config-file authority evidenc…
seonghobae Sep 12, 2026
26514cd
test(admission): expose global uv Python-provider evidence gap
seonghobae Sep 12, 2026
c9fa1bf
security(admission): preserve global uv Python-provider evidence
seonghobae Sep 12, 2026
018b00f
security(admission): preserve global uv Python-provider evidence (#379)
seonghobae Sep 12, 2026
208685c
test(admission): expose uv run child-argument evidence leak
seonghobae Sep 12, 2026
7f178d6
test(admission): format uv run child evidence RED
seonghobae Sep 12, 2026
f49a832
fix(admission): scope uv provider evidence to owned argv
seonghobae Sep 12, 2026
26528f0
style(admission): apply rustfmt to uv provider scope
seonghobae Sep 12, 2026
79aacb1
test(admission): expose uv run value-option boundary
seonghobae Sep 12, 2026
fc75035
test(admission): isolate uv run value-option RED
seonghobae Sep 12, 2026
1ee7ee5
style(admission): format uv run value-option RED
seonghobae Sep 12, 2026
e578385
test(admission): bound uv provider evidence to install grammar
seonghobae Sep 12, 2026
26f33f8
fix(admission): keep uv run outside install authority
seonghobae Sep 12, 2026
c02f969
fix(admission): bound uv provider evidence to install grammar (#380)
seonghobae Sep 12, 2026
d4b835f
test(admission): expose uv run configuration evidence bleed
seonghobae Sep 12, 2026
6827e1c
test(admission): format uv parser-phase RED
seonghobae Sep 12, 2026
23202e8
fix(admission): stop uv run configuration evidence bleed
seonghobae Sep 12, 2026
8b0ba37
fix(admission): format uv run parser boundary
seonghobae Sep 12, 2026
29be923
Merge pull request #382 from ContextualWisdomLab/test/uv-config-parse…
seonghobae Sep 12, 2026
51e4be1
test(admission): expose uv run trust evidence bleed
seonghobae Sep 12, 2026
0f25d68
test(admission): format uv run trust RED
seonghobae Sep 12, 2026
05059eb
fix(admission): bound uv trust evidence to parser phase
seonghobae Sep 12, 2026
c670dfc
test(admission): preserve uv pre-run trust authority
seonghobae Sep 12, 2026
1523fb3
test(admission): expose uv command-token value collisions
seonghobae Sep 12, 2026
b7c79f2
fix(admission): parse uv global option values before trust phase
seonghobae Sep 12, 2026
6fe35a1
Merge pull request #384 from ContextualWisdomLab/test/uv-run-trust-pa…
seonghobae Sep 12, 2026
84c1db1
test(security): expose uv run trust option phase
seonghobae Sep 12, 2026
29e1aca
fix(security): retain uv run trust option evidence
seonghobae Sep 12, 2026
731c415
test(security): cover uv run trust parser edges
seonghobae Sep 12, 2026
62e5104
repair(ci): restore formatted uv trust contract
seonghobae Sep 12, 2026
c5c35ac
Merge pull request #386 from ContextualWisdomLab/test/uv-run-owned-tr…
seonghobae Sep 12, 2026
717587d
test(security): expose uv run configuration option phase
seonghobae Sep 12, 2026
a2122d3
fix(security): bind uv run config trust authority
seonghobae Sep 13, 2026
7e87f62
refactor(security): share uv parser phase boundary
seonghobae Sep 13, 2026
5efb036
fix(security): scope uv config authority to owned argv
seonghobae Sep 13, 2026
8d024f7
Merge pull request #388 from ContextualWisdomLab/test/uv-run-configur…
seonghobae Sep 13, 2026
bcc6caa
test(admission): expose uv global torch-backend evidence gap
seonghobae Sep 13, 2026
68835ac
test(admission): format uv torch-backend RED fixture
seonghobae Sep 13, 2026
9c2ffbb
fix(admission): retain uv torch-backend authority after globals
seonghobae Sep 13, 2026
c3d5d6f
docs(admission): trace uv torch-backend source authority
seonghobae Sep 13, 2026
0c188b5
docs(security): align uv traceability with SSDF PW.4
seonghobae Sep 13, 2026
81c35ec
Merge pull request #390 from ContextualWisdomLab/fix/uv-global-torch-…
seonghobae Sep 13, 2026
b16091b
test(security): prove uv project authority evidence gap
seonghobae Sep 13, 2026
153e212
test(security): apply canonical rustfmt to uv project RED
seonghobae Sep 13, 2026
6411ead
fix(security): classify uv project-root authority
seonghobae Sep 13, 2026
c362c53
docs(security): trace uv project-root authority
seonghobae Sep 13, 2026
3f50bd1
Merge pull request #392 from ContextualWisdomLab/codex/agent-admissio…
seonghobae Sep 13, 2026
77e53fa
test(security): expose uv run bytecode authority gap
seonghobae Sep 13, 2026
55ec376
test(security): isolate uv run bytecode authority RED
seonghobae Sep 13, 2026
ef03ece
fix(security): classify uv run bytecode authority
seonghobae Sep 13, 2026
bd7fd63
docs(security): trace uv bytecode authority
seonghobae Sep 13, 2026
d42ebcf
refactor(security): keep uv compile selector borrow narrow
seonghobae Sep 13, 2026
af03a1a
docs(rust): document uv bytecode authority helpers
seonghobae Sep 13, 2026
30e81ad
Merge pull request #394 from ContextualWisdomLab/codex/agent-admissio…
seonghobae Sep 13, 2026
6c24a3d
test(security): expose uv global bytecode authority gap
seonghobae Sep 13, 2026
164434f
fix(security): preserve uv global bytecode evidence
seonghobae Sep 13, 2026
f6e407f
docs(security): trace uv global bytecode evidence
seonghobae Sep 13, 2026
e3bd772
test(security): preserve uv global bytecode authority evidence (#396)
seonghobae Sep 13, 2026
ea21c83
test(agent-admission): prove implicit uv Python download RED
seonghobae Sep 13, 2026
7e35c7c
test(agent-admission): format uv Python download RED
seonghobae Sep 13, 2026
cbdd6cf
fix(agent-admission): classify missing uv Python download guard
seonghobae Sep 13, 2026
9eca278
fix(agent-admission): enforce uv Python download guard
seonghobae Sep 13, 2026
3d61da4
fix(agent-admission): preserve primary denial evidence for uv guard
seonghobae Sep 13, 2026
07f5e1e
docs(agent-admission): trace uv Python download safety boundary
seonghobae Sep 13, 2026
1a79879
fix(agent-admission): format uv Python download guard
seonghobae Sep 13, 2026
9f7adce
test(agent-admission): align approved uv fixture with safety guard
seonghobae Sep 13, 2026
19ac6a9
test(agent-admission): align uv constraint fixture with safety guard
seonghobae Sep 13, 2026
ee12883
test(agent-admission): align uv cardinality fixture with safety guard
seonghobae Sep 13, 2026
f38a692
test(agent-admission): keep uv system-package baseline safe
seonghobae Sep 13, 2026
01e3580
test(agent-admission): keep uv build-isolation baseline safe
seonghobae Sep 13, 2026
d31c2e1
test(agent-admission): keep uv bytecode baseline safe
seonghobae Sep 13, 2026
e99c282
test(agent-admission): keep uv config baseline safe
seonghobae Sep 13, 2026
932b673
test(agent-admission): keep uv directory baseline safe
seonghobae Sep 13, 2026
93f4f5e
test(agent-admission): keep uv exact-sync baseline safe
seonghobae Sep 13, 2026
4252d7b
test(agent-admission): keep uv hash baseline safe
seonghobae Sep 13, 2026
ca1812d
test(agent-admission): keep uv keyring baseline safe
seonghobae Sep 13, 2026
b370cdc
test(agent-admission): keep uv Python-provider baseline safe
seonghobae Sep 13, 2026
8d0d576
test(agent-admission): keep uv interpreter baseline safe
seonghobae Sep 13, 2026
2b090de
test(agent-admission): keep uv reinstall baseline safe
seonghobae Sep 13, 2026
040042d
test(agent-admission): keep uv link-mode baseline safe
seonghobae Sep 13, 2026
b136978
test(agent-admission): keep uv certificate baseline safe
seonghobae Sep 13, 2026
a4eca83
test(agent-admission): keep uv torch baseline safe
seonghobae Sep 13, 2026
8cbcff5
test(agent-admission): keep uv transport baseline safe
seonghobae Sep 13, 2026
38844f8
Merge pull request #398 from ContextualWisdomLab/codex/agent-admissio…
seonghobae Sep 13, 2026
53a9c43
test(agent-admission): expose unsafe uv index strategy authority
seonghobae Sep 13, 2026
f68b652
fix(agent-admission): classify unsafe uv index strategy authority
seonghobae Sep 13, 2026
d3700b3
fix(agent-admission): enforce uv index strategy trust boundary
seonghobae Sep 13, 2026
d1508f1
test(agent-admission): preserve safe uv index strategy grammar
seonghobae Sep 13, 2026
dfffc08
docs(agent-admission): trace uv index strategy trust evidence
seonghobae Sep 13, 2026
8512741
fix(agent-admission): normalize uv strategy value at exact argv index
seonghobae Sep 13, 2026
8e3e26c
fix(agent-admission): respect uv option termination for index strategy
seonghobae Sep 13, 2026
045d8fe
style(agent-admission): apply rustfmt to uv index strategy wiring
seonghobae Sep 13, 2026
4133567
style(agent-admission): apply rustfmt to uv index strategy authority
seonghobae Sep 13, 2026
9466c96
test(agent-admission): preserve global uv index strategy evidence
seonghobae Sep 13, 2026
98b8043
style(agent-admission): apply rustfmt to index strategy RED
seonghobae Sep 13, 2026
5aa83ee
fix(agent-admission): preserve uv index strategy evidence after globa…
seonghobae Sep 13, 2026
3b0e82e
docs(agent-admission): trace uv global option evidence boundary
seonghobae Sep 13, 2026
fff3c34
Merge pull request #400 from ContextualWisdomLab/codex/agent-admissio…
seonghobae Sep 13, 2026
e83ef2c
test(security): expose uv global link-mode evidence gap
seonghobae Sep 13, 2026
35c97a6
style(test): apply rustfmt to uv global link-mode RED
seonghobae Sep 13, 2026
01d0a52
test(security): remove confounded uv sync control
seonghobae Sep 13, 2026
eb0846b
fix(security): preserve uv global link-mode evidence
seonghobae Sep 13, 2026
25b076c
docs(security): trace uv symlink link-mode authority
seonghobae Sep 13, 2026
e0a6df1
docs(security): correct uv authority APA 7 references
seonghobae Sep 13, 2026
c9fbc82
Merge pull request #402 from ContextualWisdomLab/codex/agent-admissio…
seonghobae Sep 13, 2026
ee6c1ad
test(docs): prove agent admission documentation drift
seonghobae Sep 13, 2026
9730093
docs(agent-admission): state canonical ownership boundary
seonghobae Sep 13, 2026
99bdec0
docs(agent-admission): align workspace guidance
seonghobae Sep 13, 2026
0f35f04
docs(agent-admission): make architecture code-current
seonghobae Sep 13, 2026
67fa380
test(docs): cover stale workspace cardinality prose
seonghobae Sep 13, 2026
da77a29
docs(toolchain): remove stale two-crate claim
seonghobae Sep 13, 2026
ad74b91
docs(agent-admission): keep ownership architecture code-current (#403)
seonghobae Sep 13, 2026
a1210e3
test(security): prove admission threat-model drift
seonghobae Sep 13, 2026
bb0517c
docs(security): model Agent Artifact Admission threats
seonghobae Sep 13, 2026
7c97ec5
docs(security): model Agent Artifact Admission threats (#404)
seonghobae Sep 13, 2026
894f3db
test(admission): expose uv global artifact-variant gap
seonghobae Sep 13, 2026
f04838c
fix(admission): parse uv artifact variants after global options
seonghobae Sep 13, 2026
345cdf0
fix(admission): preserve uv artifact-variant evidence after global op…
seonghobae Sep 13, 2026
1081057
test(admission): expose uv global system-package evidence gap
seonghobae Sep 13, 2026
a41f2fb
test(admission): format uv global system-package evidence RED
seonghobae Sep 13, 2026
3e8a8dc
fix(admission): preserve uv global system-package evidence
seonghobae Sep 13, 2026
60d5414
Merge pull request #408 from ContextualWisdomLab/codex/uv-global-brea…
seonghobae Sep 13, 2026
a7cb8ae
test(admission): expose uv global reinstall evidence gap
seonghobae Sep 13, 2026
9c68a99
fix(admission): preserve uv global reinstall evidence
seonghobae Sep 13, 2026
301a250
Merge pull request #410 from ContextualWisdomLab/codex/uv-global-rein…
seonghobae Sep 13, 2026
be71162
test(admission): expose uv global constraint evidence gap
seonghobae Sep 13, 2026
0e726dc
fix(admission): preserve uv global constraint evidence
seonghobae Sep 13, 2026
fc7e5d3
Merge pull request #412 from ContextualWisdomLab/codex/uv-global-cons…
seonghobae Sep 13, 2026
7f9c621
test(admission): expose uv global keyring evidence gap
seonghobae Sep 13, 2026
01fa5f5
fix(admission): preserve uv global keyring evidence
seonghobae Sep 13, 2026
a7601b7
Merge pull request #415 from ContextualWisdomLab/codex/uv-global-keyr…
seonghobae Sep 13, 2026
d4dbc74
test(admission): prove uv global cache-dir evidence gap
seonghobae Sep 13, 2026
d4e0171
test(admission): format uv cache-dir RED contract
seonghobae Sep 13, 2026
78f814a
fix(admission): preserve uv global cache-dir evidence
seonghobae Sep 13, 2026
f37fbbb
Merge pull request #416 from ContextualWisdomLab/codex/uv-global-cach…
seonghobae Sep 13, 2026
9d9b2da
test(admission): prove uv global install-root evidence gap
seonghobae Sep 13, 2026
7aa0c38
fix(admission): preserve uv global install-root evidence
seonghobae Sep 13, 2026
33b2b70
test(admission): preserve uv global install-root evidence (#418)
seonghobae Sep 13, 2026
1a0eb7d
test(admission): expose uv global hash-safety evidence gap
seonghobae Sep 13, 2026
5d3ebdb
test(admission): format uv global hash-safety RED
seonghobae Sep 13, 2026
990faaa
test(admission): finish formatting uv hash-safety RED
seonghobae Sep 13, 2026
51e13e9
fix(admission): preserve uv global hash-safety evidence
seonghobae Sep 13, 2026
99e5036
test(admission): preserve uv global hash-safety evidence (#420)
seonghobae Sep 13, 2026
73ee17c
test(admission): expose uv global dependency-cardinality gap
seonghobae Sep 13, 2026
2dcfdf7
test(admission): format uv dependency-cardinality RED
seonghobae Sep 13, 2026
319dded
fix(admission): preserve uv dependency-cardinality evidence
seonghobae Sep 13, 2026
91b9fc6
style(admission): apply rustfmt import ordering
seonghobae Sep 13, 2026
acbcdc2
fix(admission): preserve uv global dependency-cardinality evidence (#…
seonghobae Sep 13, 2026
11ae834
test(admission): expose uv global hash-disable evidence loss
seonghobae Sep 13, 2026
33d8295
fix(admission): preserve uv hash-disable evidence after globals
seonghobae Sep 13, 2026
24747e2
Merge pull request #425 from ContextualWisdomLab/fix/uv-global-hash-d…
seonghobae Sep 13, 2026
2bd7486
test(admission): expose uv global artifact operand evidence gap
seonghobae Sep 13, 2026
d0a0e38
test(admission): rustfmt uv global operand RED
seonghobae Sep 14, 2026
fd19ac1
fix(admission): preserve uv global artifact operand evidence
seonghobae Sep 14, 2026
630cc7f
style(admission): apply rustfmt to uv selector guard
seonghobae Sep 14, 2026
27e450b
test(admission): preserve declared artifact in uv sync control
seonghobae Sep 14, 2026
6258795
Merge pull request #427 from ContextualWisdomLab/fix/uv-global-artifa…
seonghobae Sep 14, 2026
973dcec
test(admission): expose uv global indirect source evidence gap
seonghobae Sep 14, 2026
6619db4
test(admission): format uv global hostile contract
seonghobae Sep 15, 2026
0f206d6
fix(admission): preserve uv indirect source evidence
seonghobae Sep 15, 2026
951b3cb
Merge pull request #429 from ContextualWisdomLab/fix/uv-global-indire…
seonghobae Sep 15, 2026
ea5e499
test(security): expose global pip log authority evidence gap
seonghobae Sep 15, 2026
b026436
fix(security): share reviewed pip log grammar
seonghobae Sep 16, 2026
eedaa3f
fix(security): normalize global pip log authority
seonghobae Sep 16, 2026
71451ce
Merge PR #431: preserve causal pip global log authority evidence
seonghobae Sep 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
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Agent Instructions

- Keep the project Rust-first for gateway, DNSBL, and high-throughput control-plane code.
- Preserve Wardnet ownership of Agent Artifact Admission, gateway/SOC control-plane policy, and security evidence. Treat `quarantine-sandbox-runtime`, `EgressWeave`, `contextual-orchestrator`, and `appguardrail` as external canonical owners whose released contracts/evidence Wardnet validates rather than reimplements.
- Prefer proven security engines over fake in-house detections. Integrate OWASP CRS/Coraza, Suricata, STIX/TAXII, MISP, or OpenCTI before inventing equivalent engines.
- Do not use Figma Code Connect for this project unless explicitly requested later.
- Keep MVP work narrow: web management, gateway decisions, event/KPI visibility, and DNSBL publishing before broader SIEM/SOAR scope.
Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,22 @@

### Security

- Added the independently deployable Agent Artifact Admission Controller for authenticated, loopback-only, fail-closed pre-execution package-install admission. Reviewed policy binds workspace manifests and exact artifact ecosystem/name/version/HTTPS registry/owner/SHA-256 evidence, structured argv, minimized append-before-response audit evidence, and deny-all defaults without taking over hostile-workload execution from the quarantine runtime.
- Hardened package-manager command admission so approved artifacts cannot be reinterpreted by a different package-manager ecosystem or widened through alternate package sources, destinations, executable install hooks, parser boundaries, persistent trust mutation, integrity-verification disablement, opaque runtime configuration, or undeclared resolver output: standalone `--` option terminators are rejected so required safety flags cannot move behind a downstream CLI parsing boundary; npm-family commands bind to npm artifacts, pip/uv pip to PyPI, Cargo to Cargo, and Docker/Podman to OCI; npm caller-selected `--userconfig`/`--globalconfig` files and `--ca`/`--cafile`/`--strict-ssl` TLS trust overrides, pip source/root short and long forms, uv index/environment selectors, Cargo registry/Git/path/config/root selectors, npm workspace controls, pnpm `--dir`/`-C` working-directory, filter/recursive/workspace-root selectors, `--config.<key>=<value>` runtime overrides, and pnpmfile hooks not suppressed by `--ignore-scripts`, Yarn Classic `-W`/`--ignore-workspace-root-check`, Bun `--cwd`/`--filter`/`-F` workspace selectors, caller-supplied `--config`, `--trust` persistent `trustedDependencies` expansion, and `--no-verify` registry-integrity bypass, and contradictory lifecycle-script Boolean flags fail closed with stable reason codes. pnpm requests still require both `--ignore-scripts` and `--ignore-pnpmfile` before resolver authority is considered; pip, pip3, and `uv pip install` require exact `--no-deps` so the resolver cannot add artifacts absent from the reviewed intent.
- Fail closed when a pip/pip3 install request includes `--no-require-hashes`: Wardnet's approved PyPI path requires hash-checking mode and does not accept a contradictory installer option that disables automatic hash enforcement alongside the positive requirement. This parser-boundary denial is separate from downstream proof that retrieved bytes match the reviewed artifact digest.
- Fail closed on direct `npm install`, `pnpm add/install`, `yarn add`, and `bun add/install` even when the direct package coordinate and execution-hardening flags match policy, because the v0.1 intent carries only reviewed direct artifacts and cannot prove the transitive dependency closure those commands may resolve. `--ignore-scripts` is execution hardening, not dependency identity. A future npm-family allow path requires a reviewed immutable lockfile/material-set contract plus an executor command that is proven to consume that exact closure without rewriting it; until then resolver-selected transitive artifacts have no Wardnet admission authority.
- Bound registry/index package source identity to the reviewed artifact coordinate: npm/pnpm/Yarn/Bun direct package operands must encode the exact reviewed `<name>@<version>`, and pip/pip3/`uv pip install` operands must encode the exact reviewed `<name>==<version>`. npm aliases, tarball/git/folder package specs and pip direct URL/VCS/local-source requirements cannot inherit approval from a different reviewed registry/index coordinate; unsafe policy drift fails closed during service configuration as well as request admission.
- Bound Cargo install mutation authority to reviewed policy: caller-supplied `-f` / `--force` overwrite capability and `--no-track` metadata/concurrent-install bypass now fail closed as `artifact_not_approved` because the approved artifact coordinate does not authorize replacing existing binaries or disabling Cargo's install tracking/collision protection.
- Bound PyPI approval to the reviewed artifact/build identity rather than caller-selected installer resolution or build variants: pip `--platform`, `--python-version`, `--implementation`, `--abi`, binary/source selectors, build-isolation controls, and `-C` / `--config-settings`, together with the corresponding `uv pip install` target-platform/binary/source/build/backend controls, fail closed as `artifact_not_approved` until policy can bind the selected distribution/build identity explicitly.
- Bound PyPI dependency/build selection authority to the reviewed artifact set: caller-supplied pip `-c` / `--constraint` / `--build-constraint` and uv `-c` / `--constraint` / `--constraints` / `-b` / `--build-constraint` / `--build-constraints` documents fail closed as `artifact_not_approved`, including attached-value spellings that otherwise bypass positional-operand accounting.
- Bound pip dependency-group authority to the reviewed artifact set: caller-supplied `--group` for `pip install` / `pip3 install`, including explicit external `pyproject.toml` paths and attached-value spellings, fails closed as `artifact_not_approved` instead of importing unreviewed package requirements.
- Bound OCI pull approval to the reviewed artifact identity rather than caller-selected client variants: Docker/Podman `--platform` and Podman-equivalent `--arch`, `--os`, and `--variant` selectors fail closed as `artifact_not_approved` until a versioned policy schema can authorize the selected platform-specific manifest identity or equivalent provenance.
- Bound OCI pull cardinality to the exact reviewed artifact set: Docker/Podman `-a` / `--all-tags`, true Boolean assignments, and bundled Boolean shorthand semantics fail closed as `artifact_not_approved` whenever they enable repository-wide mutable tag expansion. This includes `-aq` / `-qa` and assigned bundles such as `-aq=false`, where the preceding `-a` remains enabled; quiet-only shorthand and a final explicitly false all-tags shorthand such as `-qa=false` remain admissible.
- Bound Podman registry transport, authentication, and image-decryption authority to reviewed policy: false forms of `--tls-verify`, caller-selected `--cert-dir` / `--authfile`, inline `--creds`, and `--decryption-key` key/passphrase material fail closed as `alternate_trust_root`, while explicit TLS verification remains compatible with the approved registry identity. Registry credentials and image-decryption secrets remain separately governed downstream deployment/secret authorities rather than untrusted install argv.
- Removed the distributable Kubernetes administrator `Secret` and historical placeholder credential. Production deployments must provision `waf-ids-ai-soc-admin` / `ADMIN_TOKEN` through the external secret-management control plane; the workload's `secretKeyRef` is explicitly non-optional.
- Added a structural regression contract that rejects shipped administrator Secret objects, placeholder credentials, decoy workloads, init-container false positives, and optional administrator Secret references.

### Operations

- Documented Agent Artifact Admission deployment, incident response, immutable policy rollout, audit durability, external provenance authority, package-manager ecosystem binding, package-manager trust/destination/parser controls, package source-coordinate binding, npm-family transitive dependency-closure denial, Cargo overwrite/tracking authority, PyPI artifact/build-variant and dependency-cardinality controls, exact-set OCI pull cardinality, OCI platform-variant and registry transport/authentication/decryption authority, Bun persistent trust and integrity-verification semantics, and current primary-source traceability.
- Documented administrator credential provisioning, rotation, rollout verification, rollback, evidence handling, and the boundary with the separate runtime-authentication fail-closed work tracked in issue #78.
6 changes: 4 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,14 @@ cargo +nightly fuzz run fuzz_score_request -- -max_total_time=60

## Toolchain

`rust-toolchain.toml` pins the `stable` channel with `llvm-tools-preview` (needed by `cargo llvm-cov`), `rustfmt`, and `clippy`. Both workspace crates use `edition = "2024"`. Fuzzing is the one exception that needs nightly.
`rust-toolchain.toml` pins the `stable` channel with `llvm-tools-preview` (needed by `cargo llvm-cov`), `rustfmt`, and `clippy`. All three root-workspace crates use `edition = "2024"`. Fuzzing is the one exception that needs nightly.

## Workspace Layout

Root Cargo workspace with two members (resolver 3):
Root Cargo workspace with three members (resolver 3):

- `crates/waf-ids-core` — pure domain crate, no async/HTTP deps (only `serde` + `percent-encoding`): models, validation, upserts, request scoring, DNSBL zone formatting, event retention, threat-feed freshness, KPI snapshots, commercial readiness, buyer evidence manifests.
- `crates/agent-artifact-admission` — Wardnet-owned pre-execution admission boundary for immutable agent artifact/evidence facts, policy evaluation, and auditable allow/deny receipts. It validates released evidence/contracts from canonical sibling owners; it does not execute hostile workloads or reimplement sandbox, egress, orchestration, or guardrail policy engines.
- Root crate `waf-ids-ai-soc` (`src/lib.rs`) — Axum management API, embedded admin console, optional JSON state persistence, upstream proxying, NDJSON event export, support bundle assembly, plus the in-crate HTTP tests. Depends on `waf-ids-core`.
- `src/main.rs` — deliberately thin shim over `waf_ids_ai_soc::run_from_env` so all config/serve logic is unit-testable; covered end-to-end by `tests/binary.rs` (SIGTERM graceful shutdown).
- `fuzz/` — a **separate** cargo workspace (empty `[workspace]` table in `fuzz/Cargo.toml` — do not remove) so root `cargo test --workspace` never builds fuzz targets. Seed corpora live in `fuzz/corpus/<target>/`.
Expand All @@ -67,6 +68,7 @@ Read in `run_from_env` (`src/lib.rs`): `BIND_ADDR` (default `127.0.0.1:8080`), `
## Key Conventions

- Management writes require `X-Admin-Token` and are **upserts**: routes keyed by `id`, threat indicators by `indicator_type` + `value` + `source`, DNSBL entries by `address`. DNSBL response codes must be in `127.0.0.0/8`.
- Agent Artifact Admission owns Wardnet's artifact/evidence binding, admission policy decision, and Wardnet receipt. `quarantine-sandbox-runtime`, `EgressWeave`, `contextual-orchestrator`, and `appguardrail` remain external canonical owners; consume only released contracts/evidence and never copy their implementation logic into Wardnet.
- State persistence uses write-to-temp-sibling + atomic rename; management API mutations roll back in memory if the state file cannot be replaced.
- Audit logs must never leak admin tokens (`scripts/smoke.sh` asserts this).
- Untrusted-input surfaces (request scorer, state deserializer, admin-token parser, DNSBL zone export) are fuzzed; if you change one, keep its libFuzzer target and proptest mirror in sync (`docs/fuzzing.md` lists the invariants per target).
Expand Down
14 changes: 14 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description = "Rust-first WAF/IDS/AI SOC gateway with DNSBL and commercial readi
license = "MIT"

[workspace]
members = [".", "crates/waf-ids-core"]
members = [".", "crates/waf-ids-core", "crates/agent-artifact-admission"]
resolver = "3"

[dependencies]
Expand All @@ -23,3 +23,4 @@ tower = { version = "0.5", features = ["util"] }
# Property-based testing (MIT OR Apache-2.0); mirrors the cargo-fuzz target for
# parse_admin_tokens so its invariants stay green in primary CI.
proptest = "1"
wardnet-agent-artifact-admission = { path = "crates/agent-artifact-admission" }
17 changes: 17 additions & 0 deletions crates/agent-artifact-admission/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[package]
name = "wardnet-agent-artifact-admission"
version = "0.1.0"
edition = "2024"
description = "Fail-closed package-install admission policy for AI coding agents"
license = "MIT"

[dependencies]
axum = "0.8"
ring = "0.17"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["macros", "net", "rt-multi-thread", "signal"] }
url = "2"

[dev-dependencies]
tower = { version = "0.5", features = ["util"] }
Loading
Loading