Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
304 commits
Select commit Hold shift + click to select a range
11f0e39
restack: incorporate final S3 invariants
Joncallim Jul 18, 2026
9d31639
fix(auth): normalize database session timestamps
Joncallim Jul 18, 2026
0e8f8c5
fix(auth): fail closed on invalid session time
Joncallim Jul 18, 2026
04ce9ba
Merge S3 #178 error-boundary and legacy-adapter fix into S4 #179
claude Jul 18, 2026
6f7b06d
Merge commit '7d0325334709dc11a3d8fcb6fbcf59c91e12be30' into architec…
Joncallim Jul 22, 2026
71cd593
fix(epic-172): preserve planning before S4 activation
Joncallim Jul 22, 2026
15c2aa1
fix(epic-172): prove the S4 upgrade boundary
Joncallim Jul 22, 2026
de02201
fix(epic-172): close prompt leakage sinks
Joncallim Jul 22, 2026
7876621
fix(epic-172): unify S4 activation authority
Joncallim Jul 22, 2026
3ccba3e
fix(epic-172): secure legacy plan trigger
Joncallim Jul 22, 2026
a169fad
fix(epic-172): add resumable leakage scrub
Joncallim Jul 22, 2026
389033b
fix(epic-172): restore protected architect replans
Joncallim Jul 22, 2026
164d7b2
fix(epic-172): complete protected S4 lifecycle
Joncallim Jul 22, 2026
0c5fb7a
fix(epic-172): close protected recovery and review gaps
Joncallim Jul 22, 2026
b1e2966
fix(epic-172): close orthogonal review blockers
Joncallim Jul 22, 2026
ba24cc2
fix(epic-172): enforce protected recovery boundaries
Joncallim Jul 22, 2026
24642b8
fix: fail closed work package materialization
Joncallim Jul 22, 2026
2cd7c8f
ci: isolate S4 PostgreSQL proof
Joncallim Jul 22, 2026
24e7d29
feat: add protected clarification answer ledger
Joncallim Jul 22, 2026
56821d4
feat: resolve protected clarification answer references
Joncallim Jul 22, 2026
159e352
feat: add protected clarification append routine
Joncallim Jul 22, 2026
965aada
feat: preallocate protected clarification questions
Joncallim Jul 22, 2026
5212bc3
feat: append bound clarification answers securely
Joncallim Jul 22, 2026
9c1f7a1
feat: retain protected clarification replan identity
Joncallim Jul 22, 2026
da3352f
refactor: split protected replan answer context
Joncallim Jul 22, 2026
57e0757
feat: consume protected clarification answers in replan
Joncallim Jul 22, 2026
2544714
fix: forbid public clarification plaintext
Joncallim Jul 22, 2026
98e1a25
test: align protected clarification contracts
Joncallim Jul 22, 2026
26123ac
fix: enforce clarification ledger acl inventory
Joncallim Jul 22, 2026
a6aad95
fix: explicitly fail closed work package execution
Joncallim Jul 22, 2026
5f27a70
fix: remove dormant work package execution code
Joncallim Jul 22, 2026
f7814c2
test: align executor coverage with fail-closed boundary
Joncallim Jul 22, 2026
e0bf10e
test: exclude disabled executor from provider call-site check
Joncallim Jul 22, 2026
b481523
test: bind local recovery fixture to canonical evidence
Joncallim Jul 22, 2026
3300760
docs: describe unavailable specialist execution surface
Joncallim Jul 22, 2026
f6ff3c4
fix: preserve protected clarification lifecycle
Joncallim Jul 22, 2026
17bead6
test: respect recovery evidence acl
Joncallim Jul 22, 2026
2c68606
fix: close specialist execution availability gate
Joncallim Jul 22, 2026
b1feac3
fix: use supported Vitest reporter in S4 CI
Joncallim Jul 22, 2026
4cbd5bc
test: align S4 workflow reporter sentinel
Joncallim Jul 22, 2026
61790c6
fix: bind protected clarification answers distinctly
Joncallim Jul 27, 2026
164a175
fix: constrain protected replan source arms
Joncallim Jul 27, 2026
b92ec8f
fix: require protected plan reference keys
Joncallim Jul 27, 2026
4208095
fix: grant S4 runtime reader to app boundary
Joncallim Jul 27, 2026
00c418b
docs: clarify ordinary app function grants
Joncallim Jul 27, 2026
08ae066
test: seed canonical PR 198 E2E sessions
Joncallim Jul 27, 2026
4e0bc2f
test: observe protected runtime audits safely
Joncallim Jul 27, 2026
7939068
test: clarify audit observer CI boundary
Joncallim Jul 27, 2026
12c24ef
fix: use SQL comments in audit observer setup
Joncallim Jul 27, 2026
253e0a7
fix: close work package execution entry points
Joncallim Jul 27, 2026
5c35fca
test: remove dormant execution handoff cases
Joncallim Jul 27, 2026
1fc86fd
Merge pull request #212 from Joncallim/codex/pr198-execution-unavaila…
Joncallim Jul 27, 2026
16415c0
Merge pull request #211 from Joncallim/codex/pr198-e2e-audit-observer
Joncallim Jul 27, 2026
a5246ec
Merge pull request #210 from Joncallim/codex/pr198-e2e-session
Joncallim Jul 27, 2026
0ab1864
Merge pull request #209 from Joncallim/codex/pr198-s3-runtime-proof
Joncallim Jul 27, 2026
bf03b3c
Merge pull request #207 from Joncallim/codex/pr198-clarification-binding
Joncallim Jul 27, 2026
2511809
Merge pull request #206 from Joncallim/codex/pr198-ci-reporter-contract
Joncallim Jul 27, 2026
d636344
fix: audit protected clarification history
Joncallim Jul 27, 2026
89baf4b
fix: repair protected history audit query
Joncallim Jul 27, 2026
ac32f6d
test: prove protected history reader bounds
Joncallim Jul 27, 2026
adee9b0
test: satisfy protected plan fixture lifecycle
Joncallim Jul 27, 2026
0c0ac2d
test: canonicalize protected history digest proof
Joncallim Jul 27, 2026
f4d81bb
fix: canonicalize protected history digest bytes
Joncallim Jul 27, 2026
c118693
Merge remote-tracking branch 'origin/codex/pr198-protected-history-au…
Joncallim Jul 27, 2026
99d2c24
test: sort protected history proof identities
Joncallim Jul 27, 2026
a436bae
test: sequence protected history proof after replan
Joncallim Jul 27, 2026
9bf0599
fix: reject malformed protected history entries
Joncallim Jul 27, 2026
ff9077a
Merge commit '9bf0599ae24d4a6933af1788e1d3fd61f21f0785' into codex/pr…
Joncallim Jul 27, 2026
9dcf50b
test: prove protected history reader boundary
Joncallim Jul 27, 2026
1129f6c
test: isolate protected history rejection proofs
Joncallim Jul 27, 2026
3671df6
test: use writer boundary for duplicate proof
Joncallim Jul 27, 2026
a430ae2
fix: validate canonical clarification suggestions
Joncallim Jul 27, 2026
60fd947
Merge commit 'a430ae25e9ced83b24c973964940d1c7e8f49877' into codex/pr…
Joncallim Jul 27, 2026
4529bd8
fix: validate answered clarification bindings
Joncallim Jul 27, 2026
ad15854
test: cover malformed clarification questions
Joncallim Jul 27, 2026
900bb33
Merge commit '4529bd8faf12de7f052d9f3caabee0c3538a7323' into codex/pr…
Joncallim Jul 27, 2026
c14b471
test: cover answered malformed clarification history
Joncallim Jul 27, 2026
40d41c5
fix: mirror ECMAScript clarification trimming
Joncallim Jul 27, 2026
fd27c0f
Merge commit '40d41c5dc9a146a4ba92f0edccc7d5f514be7487' into codex/pr…
Joncallim Jul 27, 2026
ed0bfa3
test: cover ECMAScript clarification whitespace
Joncallim Jul 27, 2026
d8f5d99
Merge pull request #216 into codex/pr198-protected-history-audit
Joncallim Jul 27, 2026
ca5fc9e
Merge pull request #215 into architecture/issue-179-context-packet-ev…
Joncallim Jul 27, 2026
46bd7bb
fix: durably retry session cache invalidation
Joncallim Jul 27, 2026
a6d148f
test: prove session-authoritative history route
Joncallim Jul 27, 2026
7def101
test: use mandatory history policy fixture
Joncallim Jul 27, 2026
b9b20b3
fix: fence durable session cache purges
Joncallim Jul 27, 2026
0a046ca
merge: refresh session cache invalidation parent
Joncallim Jul 27, 2026
33372fc
test: prove cross-user history audit isolation
Joncallim Jul 27, 2026
30f7b06
fix: serialize session cache writes with revocation
Joncallim Jul 27, 2026
c43832a
merge: refresh session cache invalidation parent
Joncallim Jul 27, 2026
ea14082
test: restore auth transaction mock boundary
Joncallim Jul 27, 2026
e7795ee
merge: refresh session cache invalidation parent
Joncallim Jul 27, 2026
0f95434
Merge commit 'e7795eed80ebf1b011c7fac889beeb7d20a10713' into codex/pr…
Joncallim Jul 27, 2026
8435f04
Merge commit '0f95434549a5f79ae85497081a14b6a8ff5af76e' into codex/pr…
Joncallim Jul 27, 2026
6d10944
feat: journal project root changes during expansion
Joncallim Jul 27, 2026
6846558
fix: inventory root change journal ACLs
Joncallim Jul 27, 2026
388a64e
merge: propagate root journal ACL inventory
Joncallim Jul 27, 2026
2033cd7
feat: reconcile root change expansion
Joncallim Jul 27, 2026
af33979
fix: close root reconciliation constraint
Joncallim Jul 27, 2026
8991254
fix: grant reconciler projection-head lock access
Joncallim Jul 27, 2026
909634d
fix: suppress phase persistence for root reconciliation
Joncallim Jul 27, 2026
8d9afd7
fix: bootstrap root reconciler grants
Joncallim Jul 27, 2026
b64b9b4
fix: remove reconciler lock-only update grants
Joncallim Jul 27, 2026
2c8b1df
fix: bootstrap projection head routine access
Joncallim Jul 27, 2026
f8174fe
merge: propagate bootstrap routine grant
Joncallim Jul 27, 2026
50bbe6e
feat: bind root reconciliation write contexts
Joncallim Jul 27, 2026
66037a4
fix: qualify root reconciliation operations
Joncallim Jul 27, 2026
463256c
fix: require root context completion at commit
Joncallim Jul 27, 2026
30a4c48
feat: lock root reconciliation authority
Joncallim Jul 27, 2026
95c2b97
fix: fence root context ownership before transfer
Joncallim Jul 27, 2026
e54f498
feat: enter root reconciliation write context
Joncallim Jul 27, 2026
75dc9e5
fix: use prelocked root authority reads
Joncallim Jul 27, 2026
63c55d7
fix: transfer root context table after triggers
Joncallim Jul 27, 2026
cda8e74
merge: propagate root context owner order
Joncallim Jul 27, 2026
7999221
merge: propagate root context owner order
Joncallim Jul 27, 2026
fe5442c
feat: fence root reconciler task updates
Joncallim Jul 27, 2026
ef62fc2
fix: grant root routines before ownership transfer
Joncallim Jul 27, 2026
45c6b93
merge: propagate root routine grant ordering
Joncallim Jul 27, 2026
926e85e
merge: propagate root routine grant ordering
Joncallim Jul 27, 2026
4db1a90
merge: propagate root routine grant ordering
Joncallim Jul 27, 2026
d2805a5
feat: extract filesystem grant block validator
Joncallim Jul 27, 2026
4426077
fix: qualify root reconciliation SQL references
Joncallim Jul 27, 2026
71d398e
refactor: use filesystem grant block validator
Joncallim Jul 27, 2026
6259c79
feat: fence root reconciler package updates
Joncallim Jul 27, 2026
5238c2a
fix: qualify filesystem grant validators
Joncallim Jul 27, 2026
c6cbc72
fix: stop root reconciliation after completion
Joncallim Jul 27, 2026
f25388b
test: make phase suppression assertion semantic
Joncallim Jul 27, 2026
f928d1c
fix: escape cutover SQL dollar quotes
Joncallim Jul 27, 2026
22f0bf5
fix: restore root index cutover proof sequence
Joncallim Jul 27, 2026
6e7614e
fix: inventory root write contexts
Joncallim Jul 27, 2026
82a7210
feat: mirror root write contexts in schema
Joncallim Jul 27, 2026
8a17609
fix: recover root index builds safely
Joncallim Jul 27, 2026
e9d173e
fix: require exact root index at cutover
Joncallim Jul 27, 2026
4880b1d
test: prove root index recovery lifecycle
Joncallim Jul 27, 2026
3321a1f
fix: classify missing root index safely
Joncallim Jul 27, 2026
7038466
test: require root index lifecycle proof
Joncallim Jul 27, 2026
560600f
test: seed root authority project fixture
Joncallim Jul 27, 2026
1742838
test: use portable index proof matcher
Joncallim Jul 27, 2026
c2cf6b2
test: seed root authority package fixture
Joncallim Jul 27, 2026
bd70392
fix: check root index before coverage
Joncallim Jul 27, 2026
76c425f
test: prove root authority reconciliation
Joncallim Jul 27, 2026
f462f60
test: serialize root proof reconciliation
Joncallim Jul 27, 2026
bdc3b49
fix: type root index classifier state
Joncallim Jul 27, 2026
368d28d
test: prove root reconciliation rollback
Joncallim Jul 27, 2026
62423f5
fix: parse root authority package fixture
Joncallim Jul 27, 2026
36bf6d7
test: prove root reconciliation replay
Joncallim Jul 27, 2026
da51a83
test: prove root reconciler privileges
Joncallim Jul 27, 2026
9c59003
fix: assert root rollback error
Joncallim Jul 27, 2026
930136a
test: prove stale root contexts
Joncallim Jul 27, 2026
106b865
fix: bind root negative assertion inputs
Joncallim Jul 27, 2026
a855c8a
test: prove root reconciliation contention
Joncallim Jul 27, 2026
758c579
test: keep negative reconciliation inputs transactional
Joncallim Jul 27, 2026
ec91143
test: diagnose root proof psql failures
Joncallim Jul 27, 2026
d21aa17
test: distinguish root proof psql statuses
Joncallim Jul 27, 2026
9a49233
test: bind root authority assertion inputs
Joncallim Jul 27, 2026
b6d92aa
test: align root authority recovery fixture
Joncallim Jul 27, 2026
f467330
test: make root authority additions admissible
Joncallim Jul 27, 2026
07072ae
test: close root reconciler privilege allowlist
Joncallim Jul 27, 2026
0484f01
test: prove root reconciler privilege allowlist mutations
Joncallim Jul 27, 2026
52d798a
fix: gate root reconciler maintain privilege by server version
Joncallim Jul 27, 2026
2ed915c
test: isolate root reconciliation binding rejections
Joncallim Jul 27, 2026
30b0fab
fix: close root reconciler routine allowlist
Joncallim Jul 27, 2026
392290e
test: prove root reconciler actor boundaries
Joncallim Jul 27, 2026
87bf113
test: fix ordinary app trigger proof inputs
Joncallim Jul 27, 2026
d22ad9d
fix: align root write context schema metadata
Joncallim Jul 27, 2026
737e75c
test: close root reconciler column privileges
Joncallim Jul 27, 2026
c728881
test: close root reconciler grant options
Joncallim Jul 27, 2026
15751a6
test: bind root grantor to mutation session
Joncallim Jul 27, 2026
f6a8543
test: use root owner for grant option mutation
Joncallim Jul 27, 2026
445a66a
test: run root privilege mutations in upgrade proof
Joncallim Jul 27, 2026
b47ecda
Merge PR #281 into codex/pr198-root-grantor-owner
Joncallim Jul 27, 2026
f1c87f1
Merge PR #280 into codex/pr198-root-grantor-session
Joncallim Jul 27, 2026
d58e392
Merge PR #279 into codex/pr198-root-reconciler-grant-options
Joncallim Jul 27, 2026
4ebe6ef
Merge PR #278 into codex/pr198-root-reconciler-column-allowlist
Joncallim Jul 27, 2026
4b0b7b7
Merge PR #277 into codex/pr198-root-write-context-metadata
Joncallim Jul 27, 2026
99ca55b
Merge PR #276 into codex/pr198-ordinary-app-trigger-inputs
Joncallim Jul 27, 2026
e422b46
Merge PR #275 into codex/pr198-root-reconciler-wrong-actor-proof
Joncallim Jul 27, 2026
87c5321
Merge PR #274 into codex/pr198-root-reconciler-allowlist-routines
Joncallim Jul 27, 2026
f161638
Merge PR #273 into codex/pr198-root-reconciler-wrong-binding-proof
Joncallim Jul 27, 2026
ce843a5
Merge PR #272 into codex/pr198-root-reconciler-allowlist-maintain-cap…
Joncallim Jul 27, 2026
e5c8c36
Merge PR #271 into codex/pr198-root-reconciler-allowlist-mutation
Joncallim Jul 27, 2026
e338313
Merge PR #270 into codex/pr198-root-reconciler-closed-allowlist
Joncallim Jul 27, 2026
1e33d1a
Merge PR #269 into codex/pr198-root-authority-addition
Joncallim Jul 27, 2026
7bc3d18
Merge PR #268 into codex/pr198-root-authority-convergence
Joncallim Jul 27, 2026
560c68f
Merge PR #267 into codex/pr198-root-authority-assertion-inputs
Joncallim Jul 27, 2026
3271c0b
Merge PR #266 into codex/pr198-root-proof-psql-status
Joncallim Jul 27, 2026
9bee042
Merge PR #265 into codex/pr198-root-proof-status-diagnostics
Joncallim Jul 27, 2026
e41ff3d
Merge PR #264 into codex/pr198-root-negative-assertion-temp-inputs
Joncallim Jul 27, 2026
eae659d
Merge PR #263 into codex/pr198-root-contention-proof
Joncallim Jul 27, 2026
4386910
Merge PR #262 into codex/pr198-root-negative-assertion-inputs
Joncallim Jul 27, 2026
5c7ffdf
Merge PR #261 into codex/pr198-root-stale-context-proof
Joncallim Jul 27, 2026
ce38fb2
Merge PR #260 into codex/pr198-root-rollback-proof-fix
Joncallim Jul 27, 2026
433828a
Merge PR #259 into codex/pr198-root-reconciler-privilege-proof
Joncallim Jul 27, 2026
64ed722
Merge PR #258 into codex/pr198-root-reconciliation-replay-proof
Joncallim Jul 27, 2026
5d170f2
Merge PR #257 into codex/pr198-root-authority-fixture-syntax
Joncallim Jul 27, 2026
7f6007b
Merge PR #256 into codex/pr198-root-reconciliation-negative-proof
Joncallim Jul 27, 2026
a483f0b
Merge PR #255 into codex/pr198-root-index-state-type
Joncallim Jul 27, 2026
ec5bc86
Merge PR #254 into codex/pr198-root-single-drain-proof
Joncallim Jul 27, 2026
3a9f7cf
Merge PR #253 into codex/pr198-root-authority-positive-proof
Joncallim Jul 27, 2026
471c94c
Merge PR #252 into codex/pr198-root-cutover-index-first
Joncallim Jul 27, 2026
d39c098
Merge PR #251 into codex/pr198-root-authority-package-fixture
Joncallim Jul 27, 2026
6c12872
Merge PR #250 into codex/pr198-root-index-proof-portable
Joncallim Jul 27, 2026
32056d6
Merge PR #249 into codex/pr198-root-authority-project-fixture
Joncallim Jul 27, 2026
7bc7266
Merge PR #248 into codex/pr198-root-index-proof-mandatory
Joncallim Jul 27, 2026
a346ba6
Merge PR #247 into codex/pr198-root-index-missing-safe-builder
Joncallim Jul 27, 2026
79099f2
Merge PR #246 into codex/pr198-root-index-pg-proof
Joncallim Jul 27, 2026
e88c80b
Merge PR #245 into codex/pr198-root-index-exact-cutover
Joncallim Jul 27, 2026
268da6f
Merge PR #244 into codex/pr198-root-index-restartable
Joncallim Jul 27, 2026
de8c2a8
Merge PR #243 into codex/pr198-root-write-context-schema
Joncallim Jul 27, 2026
4993f86
Merge PR #242 into codex/pr198-root-write-context-schema
Joncallim Jul 27, 2026
2fecbf5
Merge PR #241 into codex/pr198-root-index-cutover-sequence
Joncallim Jul 27, 2026
b4b910b
Merge PR #240 into codex/pr198-root-cutover-heredoc
Joncallim Jul 27, 2026
cb4ea69
Merge PR #239 into codex/pr198-root-reconciliation-test-contract
Joncallim Jul 27, 2026
3ea58bb
Merge PR #238 into codex/pr198-root-reconciliation-complete-loop
Joncallim Jul 27, 2026
ffa1c39
Merge PR #237 into codex/pr198-root-reconciliation-complete-loop
Joncallim Jul 27, 2026
c29eee5
Merge PR #236 into codex/pr198-root-reconciler-validator
Joncallim Jul 27, 2026
dc40e9d
Merge PR #235 into codex/pr198-root-reconciler-validator
Joncallim Jul 27, 2026
f9c285c
Merge PR #234 into codex/pr198-root-reconciler-package-fence
Joncallim Jul 27, 2026
347fef3
Merge PR #233 into codex/pr198-root-reconciler-validator
Joncallim Jul 27, 2026
c8c9271
Merge PR #232 into codex/pr198-root-reconciliation-claim-qualification
Joncallim Jul 27, 2026
2827cf8
Merge PR #231 into codex/pr198-root-reconciliation-authority-lock
Joncallim Jul 27, 2026
e47823c
Merge PR #230 into codex/pr198-root-reconciliation-entry
Joncallim Jul 27, 2026
34ed9cc
Merge PR #229 into codex/pr198-root-reconciliation-context-foundation
Joncallim Jul 27, 2026
42dc016
Merge PR #228 into codex/pr198-root-reconciliation-owner-order
Joncallim Jul 27, 2026
7a20836
Merge PR #227 into codex/pr198-root-reconciler-role-grants
Joncallim Jul 27, 2026
2f0223a
Merge PR #226 into codex/pr198-root-reconciliation-write-context
Joncallim Jul 27, 2026
b8312de
Merge PR #225 into codex/pr198-root-reconciliation-write-context
Joncallim Jul 27, 2026
af19a4f
Merge PR #224 into codex/pr198-root-reconciler-privilege-proof
Joncallim Jul 27, 2026
bc7ef9c
Merge PR #223 into codex/pr198-root-reconciler-role-grants
Joncallim Jul 27, 2026
bbce8fe
Merge PR #222 into codex/pr198-root-reconciliation-phase-fence
Joncallim Jul 27, 2026
7210483
Merge PR #221 into codex/pr198-root-change-journal
Joncallim Jul 27, 2026
ff98f78
Merge PR #220 into codex/pr198-root-migration-slice
Joncallim Jul 27, 2026
766647a
Merge PR #219 into architecture/issue-179-context-packet-evidence
Joncallim Jul 27, 2026
6bf2bc5
fix: rotate task events to v2 live channels
Joncallim Jul 27, 2026
4351ee3
Merge PR #282 into architecture/issue-179-context-packet-evidence
Joncallim Jul 27, 2026
98bd3d0
fix: close task compatibility readers
Joncallim Jul 27, 2026
70ae33d
fix: preserve task diagnostic authority
Joncallim Jul 27, 2026
972e303
Merge PR #283 into architecture/issue-179-context-packet-evidence
Joncallim Jul 27, 2026
334c0ff
fix: bind legacy scrub to keyed checkpoints
Joncallim Jul 27, 2026
a574833
fix: harden legacy scrub checkpoint binding
Joncallim Jul 27, 2026
d14fd55
fix: validate scrub checkpoints strictly
Joncallim Jul 27, 2026
bdb0fe6
Merge PR #284 into PR #198
Joncallim Jul 27, 2026
d6443c0
test: prove legacy scrub PostgreSQL contracts
Joncallim Jul 28, 2026
91965a2
test: reuse shared S4 signer in scrub proof
Joncallim Jul 28, 2026
f11b729
test: harden PostgreSQL scrub race proof
Joncallim Jul 28, 2026
beee42d
Merge pull request #285 from Joncallim/codex/pr198-producer-3b-postgr…
Joncallim Jul 28, 2026
00edc23
docs: publish legacy leakage scrub runbook
Joncallim Jul 28, 2026
b58e954
docs: align leakage scrub inventory
Joncallim Jul 28, 2026
b8f7859
test: verify scrub help inventory
Joncallim Jul 28, 2026
fe08d53
Merge pull request #286 from Joncallim/codex/pr198-producer-3c-scrub-…
Joncallim Jul 28, 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
46 changes: 38 additions & 8 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,19 @@ POSTGRES_PASSWORD=change_me
POSTGRES_DB=forge
DATABASE_URL=postgresql://forge:change_me@localhost:5432/forge

# Legacy leakage scrub (operator-run maintenance; never print the key bytes).
# Use a dedicated PostgreSQL admin connection, not the ordinary app role.
# FORGE_DATABASE_ADMIN_URL=postgresql://forge_scrub_admin:...@localhost:5432/forge
# FORGE_LEGACY_LEAKAGE_SCRUB_FINGERPRINT_KEY= # exactly 32 random bytes, hex or base64
# FORGE_LEGACY_LEAKAGE_SCRUB_FINGERPRINT_KEY_ID= # bounded non-secret label, e.g. scrub-v2

# Redis — job queues and agent scheduling.
# Use localhost on the host; Docker Compose services use redis://redis:6379/0.
REDIS_URL=redis://localhost:6379/0
# Protected runtime: use separate Redis principals. The publisher may run the
# task-event Lua script and publish; the subscriber may only read/subscribe.
FORGE_TASK_EVENT_PUBLISHER_REDIS_URL=
FORGE_TASK_EVENT_SUBSCRIBER_REDIS_URL=

# Web UI — Next.js app
NEXT_PUBLIC_APP_URL=http://localhost:3000
Expand All @@ -52,14 +62,15 @@ NEXT_TELEMETRY_DISABLED=1

# Worker — Redis claim timeout for the dedicated task helper
FORGE_WORKER_CLAIM_TIMEOUT_SECONDS=5
# Work-package execution and local repository writes are enabled by default.
# Set either value to 0, false, off, no, or disabled when you want approval to
# produce reviewable handoff artifacts without running specialists or applying
# generated files.
# FORGE_WORK_PACKAGE_EXECUTION=1
# FORGE_HOST_REPOSITORY_WRITES=1
# ACP package execution is enabled after task approval. Set this to 0 when local
# adapter process access is not acceptable; ACP is not OS-confined by Forge.
# Specialist execution and file materialization are currently unavailable.
# These settings are reserved and cannot override the missing operating-system-
# enforced confined writer. The normal path creates handoff artifacts only.
# Leave the execution flag unset or disabled.
# FORGE_WORK_PACKAGE_EXECUTION=0
FORGE_HOST_REPOSITORY_WRITES=0
# ACP package execution is also currently unavailable. This reserved setting
# cannot enable it, and Forge does not provide an operating-system sandbox for
# ACP processes.
# FORGE_ACP_WORK_PACKAGE_EXECUTION=0

# Workspace root — where Forge stores user-owned operational files: projects,
Expand All @@ -86,6 +97,25 @@ FORGE_WORKER_CLAIM_TIMEOUT_SECONDS=5
# Generate with: openssl rand -hex 32
# Also used to derive the encryption key for provider API keys stored in the DB.
SESSION_SECRET=change_me_generate_with_openssl_rand_hex_32
# Keep strict for fresh installs. During a rolling upgrade from the legacy
# `session:<cookie>` Redis format, set dual only until every old web process is
# drained, then restore strict before running session credential reconciliation.
FORGE_SESSION_CREDENTIAL_MODE=strict

# Protected S4 execution and Architect history are activated by the database,
# not by environment variables alone. Preprovision the complete set below
# while database authority is disabled; Forge continues on the legacy path and
# does not connect as a protected principal. After the audited activation step,
# every value is required. A partial active configuration fails closed.
# FORGE_PACKET_ISSUER_DATABASE_URL=postgresql://forge_packet_issuer:...@localhost:5432/forge
# FORGE_ARCHITECT_PLAN_WRITER_DATABASE_URL=postgresql://forge_architect_plan_writer:...@localhost:5432/forge
# FORGE_ARCHITECT_PLAN_RESOLVER_DATABASE_URL=postgresql://forge_architect_plan_resolver:...@localhost:5432/forge
# FORGE_ARCHITECT_PLAN_HISTORY_READER_DATABASE_URL=postgresql://forge_architect_plan_history_reader:...@localhost:5432/forge
# FORGE_REVIEW_SOURCE_RESOLVER_DATABASE_URL=postgresql://forge_review_source_resolver@localhost:5432/forge
# Passwordless fixed-role URL. Supply credentials through the PostgreSQL client environment (for example, a service file).
# FORGE_S4_RECOVERY_OPERATOR_DATABASE_URL=postgresql://forge_s4_recovery_operator@localhost:5432/forge
# FORGE_ARCHITECT_PLAN_DIGEST_KEY_HEX=replace_with_at_least_32_bytes_of_lowercase_hex
# FORGE_ARCHITECT_PLAN_DIGEST_KEY_ID=production-v1

# Optional — dedicated key for encrypting stored secrets. If unset, the key is
# derived from SESSION_SECRET. Set this if you want to rotate it independently.
Expand Down
381 changes: 322 additions & 59 deletions .github/workflows/web-ci.yml

Large diffs are not rendered by default.

34 changes: 20 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,19 @@ Human intent
-> durable work packages
-> capability and Model Context Protocol (MCP) admission
-> bounded context
-> sandboxed specialist execution
-> specialist handoff artifacts
-> quality assurance (QA) / Reviewer / Security gates
-> evidence, recovery, and GitHub handoff
```

FORGE is currently a **single-operator beta**. It can plan and execute approved
specialist packages, apply guarded local repository changes, and preserve the
evidence needed for review. It deliberately stops short of general autonomous
commits, merges, broad live MCP authority, or unrestricted host control.
FORGE is currently a **single-operator beta**. It can plan approved specialist
packages and produce handoff artifacts for review. Specialist execution and
file materialization are currently unavailable because Forge does not yet have
an operating-system-enforced confined writer. The work-package and ACP flags
are reserved settings; they cannot enable execution today. Direct host
repository writes remain unavailable.
It also stops short of autonomous commits, merges, broad live MCP authority, or
unrestricted host control.

## Why FORGE

Expand All @@ -79,11 +83,8 @@ commits, merges, broad live MCP authority, or unrestricted host control.
### Execute within policy

- Queue work through Redis and persist orchestration truth in PostgreSQL.
- Execute eligible specialist packages sequentially.
- Build bounded repository context packets.
- Write generated output into per-attempt sandboxes under `.forge/task-runs`.
- Apply validated repository-affecting files through guarded local-write policy.
- Enforce command, file-count, byte, timeout, validation, and retry limits.
- Prepare specialist handoff artifacts for review after approval.
- Build bounded repository context packets for planning and handoff evidence.
- Broker MCP requirements through explicit admission and approval state.

### Review and preserve evidence
Expand All @@ -104,8 +105,8 @@ Create task
-> FORGE materializes packages and gates
-> operator reviews the plan
-> capability/MCP admission runs
-> specialist executes in a bounded attempt sandbox
-> validated output may be applied to the local project
-> specialist handoff artifacts are prepared for operator review
-> operator reviews and manually applies any separately supplied files
-> QA / Reviewer / Security evidence is collected
-> operator accepts, requests rework, or stops
```
Expand Down Expand Up @@ -200,16 +201,21 @@ Not built or intentionally deferred:
- earned autonomy without verified historical evidence;
- the full dockable Forge Workspace shell and link graph.

Current execution paths can be disabled with explicit flags including:
Specialist execution is currently unavailable. These reserved settings do not
override the missing confined writer; leave them unset or disabled:

```text
FORGE_WORKFORCE_MATERIALIZATION=0
FORGE_WORK_PACKAGE_HANDOFF=0
FORGE_WORK_PACKAGE_EXECUTION=0
FORGE_HOST_REPOSITORY_WRITES=0
FORGE_ACP_WORK_PACKAGE_EXECUTION=0
```

Host repository writes are not an available execution path. Leave
`FORGE_HOST_REPOSITORY_WRITES` unset or disabled. Setting it to an enable value
does not make file materialization available; the request fails closed because
path validation is not an operating-system sandbox.

## Roadmap

The near-term order is deliberately reliability-first:
Expand Down
19 changes: 9 additions & 10 deletions docs/acp-zed-connector.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ run a full task.

## What Happens During A Task

When a task uses an ACP provider, Forge:
When a task uses an ACP provider for the available planning/health-check path,
Forge:

1. Starts a fresh adapter process for that provider call, using a
deny-by-default environment allowlist that does not forward Forge provider
Expand All @@ -71,22 +72,20 @@ When a task uses an ACP provider, Forge:
Forge uses one adapter process per call. It does not keep a long-lived pool of
ACP agents.

Executable Workforce packages may use a configured ACP provider after task
approval. ACP adapters are local processes and Forge does not OS-confine them
to the package attempt sandbox. Set `FORGE_ACP_WORK_PACKAGE_EXECUTION=0` to
disable ACP package execution on hosts where that local process risk is not
acceptable.
Specialist ACP package execution is currently unavailable. The
`FORGE_ACP_WORK_PACKAGE_EXECUTION` setting is reserved and cannot override the
missing operating-system-enforced confined writer. ACP adapters are local
processes and Forge does not OS-confine them.

## Current Limits

- ACP output is plain text in Forge's current provider interface.
- Forge does not receive detailed token usage from ACP.
- Tool calls from the underlying coding agent are not exposed as Forge runtime
MCP grants.
- ACP package execution is enabled after task approval unless the operator sets
`FORGE_ACP_WORK_PACKAGE_EXECUTION=0`. When active, it relies on the package
attempt working directory and Forge's execution JSON path guards; it is not an
OS sandbox or a general live tool grant.
- Specialist ACP package execution is unavailable pending a real confined
writer. The setting `FORGE_ACP_WORK_PACKAGE_EXECUTION` cannot enable it; path
guards are not an operating-system sandbox.
- If a runtime does not expose model selection through ACP, Forge stores the
selected model on the provider record but cannot force the local runtime to
use it.
Expand Down
54 changes: 26 additions & 28 deletions docs/adr/0006-executable-workforce-beta-boundary.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,44 +17,41 @@ Forge is trusted with commits or PR automation.

## Decision

Forge will allow executable Workforce beta runs with default-on local project
edits and a reviewable sandbox copy of every generated file.
Forge currently keeps the specialist Workforce path handoff-only. Specialist
execution and file materialization are unavailable because Forge does not yet
have an operating-system-enforced confined writer. Direct host repository
writes are also unavailable.

### Execution Boundary

- Work-package materialization, handoff, model execution, and local repository
writes are enabled by default.
- `FORGE_WORK_PACKAGE_EXECUTION=0`, `false`, `off`, `no`, or `disabled`
disables model execution and keeps the handoff-artifact-only path.
- `FORGE_HOST_REPOSITORY_WRITES=0`, `false`, `off`, `no`, or `disabled` lets
package models run but keeps generated files sandbox-only.
- ACP-backed work-package execution is enabled after an operator configures an
ACP provider and approves the task. ACP adapters are local processes and are
not OS-confined by Forge. Set `FORGE_ACP_WORK_PACKAGE_EXECUTION=0`, `false`,
`off`, `no`, or `disabled` to prevent ACP package execution.
- After Architect plan approval, Forge may execute one eligible specialist work
package at a time. Parallel specialist execution remains out of scope.
- Work-package materialization and handoff are available after approval; model
execution and file materialization are unavailable. The normal path creates
handoff artifacts only.
- `FORGE_WORK_PACKAGE_EXECUTION` is a reserved setting. No value can override
the missing confined writer or enable specialist execution today.
- `FORGE_HOST_REPOSITORY_WRITES` is unavailable. Enable values fail closed;
the legacy `FORGE_REPOSITORY_EDITS` alias follows the same rule.
- `FORGE_ACP_WORK_PACKAGE_EXECUTION` is also reserved and cannot enable ACP
package execution. ACP adapters are local processes and are not OS-confined
by Forge.
- A future security-reviewed slice may execute one eligible specialist package
at a time after it supplies a real confined writer. Parallel specialist
execution remains out of scope.
- Forge may collect bounded read-only host-repository context before a package
runs. That context is limited to inspectable evidence such as a bounded file
list, selected source/context artifacts, git status evidence, previous run
artifacts, package inputs, acceptance criteria, and review feedback. It must
not give the specialist an unbounded filesystem view.
- Generated output is first written under the validated project root at
`.forge/task-runs/<task-id>/<work-package-id>/attempt-<attempt-number>/`.
- After the package execution step, repository-affecting package output is
applied to the local project unless host repository writes are explicitly
disabled. This is a local file edit, not a branch, commit, pull request,
merge, or issue update. Forge blocks this path when the working tree is dirty
so generated output does not interleave with operator edits.
- A future confined execution surface may write output under a per-attempt
directory for review. The current path creates no generated execution
sandbox files.
- File writes must use relative paths. Absolute paths, path traversal, `.git`,
`.forge`, `node_modules`, symlink targets, and local conflict-copy names are
outside the beta boundary.
- Package validation requests are limited to the approved validation surface,
currently `npm test`, `npm run build`, and `npm run lint`. In the beta,
Forge performs static validation for those command labels against generated
sandbox output; it does not run arbitrary package scripts. Repository-
affecting packages that provide no validation commands fail before host files
are applied.
sandbox output; it does not run arbitrary package scripts.
- Repository evidence commands are limited to read-only Git status/diff
evidence, redacted, bounded, and audited. Host package-manager validation is
blocked in repository evidence; package validation remains inside the sandbox.
Expand Down Expand Up @@ -138,14 +135,15 @@ The executable Workforce beta explicitly defers:
- user-edited grant scopes,
- autonomous QA, Reviewer, or Security agent-run gates,
- harness-enforced execution policy,
- direct host repository writes,
- remote repository writes.

## Consequences

Operators can review generated sandbox files, applied host-file metadata, static
validation results, repository evidence, proposed and brokered grants, blocked
reasons, prompt overlays, review gates, rework reasons, and structured security
findings before deciding whether output is useful.
Operators can review generated sandbox files, static validation results,
repository evidence, proposed and brokered grants, blocked reasons, prompt
overlays, review gates, rework reasons, and structured security findings before
manually applying useful output.

The cost is extra terminology and a stricter product boundary. That cost is
intentional: Forge should prove sequential execution and manual review before
Expand Down
21 changes: 14 additions & 7 deletions docs/adr/0008-filesystem-mcp-bounded-context-grants.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,14 @@ same project when they ask for the same or narrower capabilities.
stay visible near the `Always allow` action because that choice reduces future
prompts for the same project.

Every filesystem packet decision is auditable by task, work package, optional
agent run, optional grant approval id, status, requested capabilities, approved
capabilities, root, included file count, byte count, omitted count, and redaction
summary. Audit rows must not persist raw file contents.
Every filesystem packet decision is auditable by task, work package, run, grant
decision, and bounded typed evidence. The privacy-safe packet vocabulary is an
opaque project `rootRef`; bounded included/byte/omitted/redaction counts; separate
assembly, delivery, and terminal outcome; and a closed failure code/stage. An
audit, artifact, log, event, queue payload, or API response must not persist or
display an absolute/relative path, selected name, excerpt, file content, prompt,
or raw/free-text error. ADR 0009 owns the detailed claim, evidence, recovery, and
compatibility schema; this ADR owns the read-only/no-live-handle boundary.

Project-level approval does not widen the beta security boundary. It only saves
the operator's decision for the same project and covered capabilities. It still
Expand All @@ -64,9 +68,12 @@ allowlist.

## Consequences

This closes the MCP Filesystem epic for the safe beta path: installation/status,
approval, runtime enforcement, and auditability are implemented without exposing
arbitrary host filesystem access to agents.
When the ADR 0009 S3–S6 slices are implemented and their release evidence passes,
this decision completes the Forge-issued MCP-channel beta path for setup,
approval, cooperative enforcement, and auditability without issuing arbitrary
filesystem access through that MCP channel. It does **not** confine an Agent
Client Protocol (ACP) process: ACP may still have shell, network, environment,
credential, or equivalent host-filesystem access outside Forge's MCP channel.

Future live filesystem MCP execution needs a separate design for hard process
sandboxing, path-scoped tool brokering, write approval, and adversarial prompt
Expand Down
Loading