Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
564 commits
Select commit Hold shift + click to select a range
840dfb2
chore: integrate verified origin/dev snapshot ca5f0c91
josue-tech-94 Oct 19, 2026
118b134
test(hcc): unlink dangling symlink fixture cleanup
josue-tech-94 Oct 19, 2026
f8ff1db
fix(mcp-host): r69-m1 support node 24.22 fixture copy
josue-tech-94 Oct 19, 2026
871ef9b
chore: sync verified dev into Task 106 PR1
josue-tech-94 Oct 19, 2026
5907db7
fix(test): reconcile R70-M1 PR1 RealPG census
josue-tech-94 Oct 19, 2026
f73389f
fix(control-api): r70-m2 preserve admission retry metadata
josue-tech-94 Oct 19, 2026
2a15cec
fix(control-api): r70-m3 restore invitation bucket namespaces
josue-tech-94 Oct 19, 2026
d824fe3
fix(control-api): r70-h2 revoke sessions after password updates
josue-tech-94 Oct 19, 2026
8abec59
test(control-api): align invitation onboarding realpg contract
josue-tech-94 Oct 19, 2026
89c12a6
test(control-api): assert sanitized direct login errors
josue-tech-94 Oct 19, 2026
d070785
test(control-api): mount composed recovery auth route
josue-tech-94 Oct 19, 2026
2ca0f53
fix: exclude pending invites from Google login authority
josue-tech-94 Oct 19, 2026
03ff0a1
fix: preserve empty-password invitation error contract
josue-tech-94 Oct 19, 2026
c529f62
fix: preserve typed RPC authorization denials
josue-tech-94 Oct 19, 2026
1dd0fb9
test: align invitation fixtures with current password flow
josue-tech-94 Oct 19, 2026
c107806
test: assert sanitized retired-member failures
josue-tech-94 Oct 19, 2026
44173e2
test: align password lease and invitation fixtures
josue-tech-94 Oct 19, 2026
f1b8c5c
test: align composed authentication contracts with dev
josue-tech-94 Oct 19, 2026
64ffa82
fix: advance password auth generation once
josue-tech-94 Oct 19, 2026
a07e95c
test: provide toast context in auth recovery fixtures
josue-tech-94 Oct 19, 2026
068a2bc
docs: require explicit context for R70-H1 setup
josue-tech-94 Oct 19, 2026
8469b03
fix(external-rest-api): fail closed on an invalid invitation session
alfredolopez80 Oct 21, 2026
4c1ff40
fix(deploy): allowlist Host message and artifact sub-paths on the rpc…
alfredolopez80 Oct 21, 2026
a68619c
fix(control-api): contain client errors in access transactions
alfredolopez80 Oct 21, 2026
7cac467
test(rpc-proxy): cover every control-api emitter behind the rpc gateway
alfredolopez80 Oct 21, 2026
1439ac5
fix(external-rest-api): reject empty or malformed invitation credentials
alfredolopez80 Oct 21, 2026
ecdf5fc
test(rpc-proxy): bind the J4 ports file to its context and pin every …
alfredolopez80 Oct 21, 2026
13674c5
fix(control-api): reject V1 session tokens without a lifecycle genera…
alfredolopez80 Oct 21, 2026
ffb0d37
fix(control-api): share one V1 security cutoff rule across comparators
alfredolopez80 Oct 21, 2026
d63eaf8
test(control-api): pin fail-closed V1 cutoffs outside the Date range
alfredolopez80 Oct 21, 2026
9c36a64
fix(control-api,rpc-proxy): fence Host-message versions across the ro…
alfredolopez80 Oct 21, 2026
f6b5417
fix(control-api,rpc-proxy): harden Host-fence error and test evidence
alfredolopez80 Oct 21, 2026
b677a38
test(ci): register the V1 cutoff-sites suite in the RealPG manifest
alfredolopez80 Oct 21, 2026
2dc1184
fix(control-api): reject non-canonical V1 session token aliases
alfredolopez80 Oct 21, 2026
cf16f7f
test(control-api): keep canonical V1 alias coverage mutation-killing
alfredolopez80 Oct 21, 2026
35f9759
test(ci): register the canonical V1 revocation suite in the RealPG ma…
alfredolopez80 Oct 21, 2026
1cf3023
fix(external-rest-api): keep the dormant access resolve route off the…
alfredolopez80 Oct 21, 2026
f721aa1
test(external-rest-api): tighten the access resolve exposure assertions
alfredolopez80 Oct 21, 2026
ee879af
fix(external-rest-api): guard control-api paths against route relocation
alfredolopez80 Oct 21, 2026
9afc521
fix(external-rest-api): encode caller-controlled control-api path com…
alfredolopez80 Oct 21, 2026
9a54c4a
fix(invitations): replay accepted invitations idempotently
alfredolopez80 Oct 21, 2026
7403004
fix(invitations): replay accepted invitations without a session
alfredolopez80 Oct 21, 2026
b95998d
fix(invitations): keep replay acceptance credential-inert
alfredolopez80 Oct 21, 2026
0e3ad54
fix(invitations): refuse external password setup after first set
alfredolopez80 Oct 21, 2026
d1deac2
fix(invitations): decide first-password before profile writes
alfredolopez80 Oct 22, 2026
e49de04
feat(control-api): require guided reauthentication after password setup
alfredolopez80 Oct 21, 2026
dbbb751
feat(profile-ui): guide password setup to the login screen
alfredolopez80 Oct 21, 2026
01b7d08
test(e2e): rewrite the profile-ui recovery lane as journeys J1-J3
alfredolopez80 Oct 21, 2026
9ac5995
fix(e2e): forward the profile session team query to the recovery fixture
alfredolopez80 Oct 21, 2026
a85d728
fix(control-api): keep session fields out of password responses
alfredolopez80 Oct 21, 2026
a0f2c1d
docs(profile-ui): drop the removed download shortcut
alfredolopez80 Oct 21, 2026
df65572
test(e2e): harden the recovery lane fixture and CI audit
alfredolopez80 Oct 21, 2026
2657220
fix(profile-ui): close recovery fence and terminal-state gaps
alfredolopez80 Oct 21, 2026
f09e3dd
fix(invitations): classify terminal password failures by edge codes
alfredolopez80 Oct 21, 2026
d9d4fae
fix(invitations): publish password_already_set and witness contract c…
alfredolopez80 Oct 21, 2026
870b0b4
test(invitations): align recovery fixture and edge fallback with repl…
alfredolopez80 Oct 22, 2026
e174648
test(control-api): pin password producer mappings to the shared contract
alfredolopez80 Oct 22, 2026
912052b
test(external-rest-api): witness session issuance in the fallback chain
alfredolopez80 Oct 22, 2026
ff63612
refactor(control-api): restore the single invitation store
alfredolopez80 Oct 22, 2026
2842074
refactor(control-api): split the access authority store by subsystem
alfredolopez80 Oct 22, 2026
67388bf
docs(control-api): describe the first-password ordering after the sto…
alfredolopez80 Oct 22, 2026
579ed29
chore: merge dev 3b2386bc9 into the PR #334 redesign stack
alfredolopez80 Oct 22, 2026
314693e
fix(control-api): keep PR1 migrations off reader-blocking locks
alfredolopez80 Oct 22, 2026
abd41e4
test(control-api): name the PR1 body pin after what it checks
alfredolopez80 Oct 22, 2026
029a3b8
fix(control-api): fold the PR1 migration chain before first release
alfredolopez80 Oct 22, 2026
c76f08a
fix(external-rest-api): reject an empty session credential before ver…
alfredolopez80 Oct 23, 2026
0f0afe9
test(ci): use one credential exemption rule in the public boundary sc…
alfredolopez80 Oct 23, 2026
bd37509
chore: merge dev c8f137555 into the access foundation stack
alfredolopez80 Oct 23, 2026
c7b9876
test(profile-ui): read the invitation password contract at runtime
alfredolopez80 Oct 23, 2026
466d693
chore: merge dev 49ed0f1eb into the access foundation stack
alfredolopez80 Oct 23, 2026
025bf43
fix: remove dead code flagged by CodeQL on PR #334
alfredolopez80 Oct 23, 2026
92f6dc8
Merge remote-tracking branch 'origin/dev' into fix/pr334-redesign-stack
alfredolopez80 Oct 23, 2026
eeddba9
fix(deploy): match the migration Job identity to the stored Job
alfredolopez80 Oct 23, 2026
3ec3e72
Merge remote-tracking branch 'origin/dev' into fix/pr334-redesign-stack
alfredolopez80 Oct 23, 2026
796b827
fix(deploy): read migration policy next to the migration script
alfredolopez80 Oct 26, 2026
1f8fe6f
chore: merge dev 6b641aa2e into the PR #334 redesign stack
alfredolopez80 Oct 26, 2026
579688f
fix(e2e): resolve the Host better-sqlite3 module in the gateway journey
alfredolopez80 Oct 27, 2026
3a94ab8
fix: restore dev rate-limit parity on PR1 routes
alfredolopez80 Oct 27, 2026
e335cf3
docs: record the dev rate-limit parity decision for PR1
alfredolopez80 Oct 27, 2026
e2c4b8d
fix: run the workflow trigger limiter before session work, as dev does
alfredolopez80 Oct 27, 2026
4fc7d7e
fix: key pre-auth limiters on the V2 session user too
alfredolopez80 Oct 27, 2026
795c653
chore: merge dev 58d5cda36 into the PR #334 redesign stack
alfredolopez80 Oct 27, 2026
5a3043b
fix(ui): stop tracking the generated next-env.d.ts (#733)
alfredolopez80 Oct 27, 2026
b31a076
fix(control-ui): keep test fixtures out of the image build context
alfredolopez80 Oct 27, 2026
58c0182
test(control-api): hold reciprocal retirements on a PostgreSQL gate
alfredolopez80 Oct 27, 2026
252966d
chore: merge dev 9a5beb4d3 into the PR #334 redesign stack
alfredolopez80 Oct 28, 2026
364df8f
refactor(control-api): renumber PR1 migrations after dev's 0130
alfredolopez80 Oct 28, 2026
4a86d25
fix(control-api): drop unused PR1 schema objects and runtime revision…
alfredolopez80 Oct 28, 2026
a68bbc8
feat(api): cover recipe and audit catalog revisions
alfredolopez80 Oct 28, 2026
a6e1f33
fix(access): order revision writers and preserve Admin UI attribution
alfredolopez80 Oct 28, 2026
08d4d46
fix(control-api): restore directory parity
alfredolopez80 Oct 28, 2026
5292efe
refactor(control-api): simplify session transaction interfaces
alfredolopez80 Oct 28, 2026
c2ae148
fix(control-api): validate the session once on workflow and access ro…
alfredolopez80 Oct 28, 2026
2d3a546
fix(access): order audit revision locks and restrict runtime writers
alfredolopez80 Oct 28, 2026
a948749
fix(access): prelock archive batch revision subjects
alfredolopez80 Oct 28, 2026
ed2c66f
test(control-api): pin the reviewed S1 foundation migration body
alfredolopez80 Oct 28, 2026
d1e75bc
fix(deploy): own the migration Job by UID and wire its contracts
alfredolopez80 Oct 28, 2026
2a65769
refactor(control-api): remove the dead staged trigger limiter branch
alfredolopez80 Oct 28, 2026
21fbc47
fix(control-api,rpc-proxy): restore the parent Host access path
alfredolopez80 Oct 28, 2026
5ee629a
test(rpc-proxy): keep a method-gate witness on the parent Host location
alfredolopez80 Oct 28, 2026
fdbd662
fix(access): lock archive principals before revisions
alfredolopez80 Oct 28, 2026
4d9d3f6
fix(control-api): read own runs and key V1 approvals as dev does
alfredolopez80 Oct 28, 2026
a4b00d6
fix(control-api): match dev readers in three catalog families
alfredolopez80 Oct 28, 2026
a8fa655
test(ci): register the three new real-PostgreSQL suites in the census
alfredolopez80 Oct 28, 2026
85889fd
fix(minikube): align branch-profile External REST browser origin
alfredolopez80 Oct 28, 2026
9da5da6
test(control-api): cover live workflow read authority
alfredolopez80 Oct 29, 2026
8d0a00a
fix(minikube): harden branch-profile External REST origin reconcile
alfredolopez80 Oct 29, 2026
c811a88
fix(ci): validate pinned real postgres suites from JSON
alfredolopez80 Oct 28, 2026
01271d0
test(ci): pin the three PR1 lock-order and run-read real-PostgreSQL s…
alfredolopez80 Oct 29, 2026
0261c58
fix(ci): restore dev CodeQL query configuration
alfredolopez80 Oct 29, 2026
8113e4b
fix(external-rest-api): keep upstream no-store on sanitized authority…
alfredolopez80 Oct 29, 2026
07555a7
fix(control-api): restore dev verify body and session-token role check
alfredolopez80 Oct 29, 2026
09313cf
fix(control-api): answer 503 only for authority outages on external a…
alfredolopez80 Oct 29, 2026
0845c6c
test(control-api): send a valid role in the authority-unavailable ses…
alfredolopez80 Oct 29, 2026
23dcf73
test(deploy): isolate the migration bounds fixtures from CI job-name …
alfredolopez80 Oct 29, 2026
686277c
fix(minikube): keep a private origin literal out of the CORS reconcil…
alfredolopez80 Oct 29, 2026
b9e11a1
fix(control-api): answer 401 for rejected Google identities
alfredolopez80 Oct 29, 2026
eecc120
fix(external-rest-api): map a refused Google identity like a retired …
alfredolopez80 Oct 29, 2026
503d05f
fix(control-api): prelock approval archive subjects before the batch …
alfredolopez80 Oct 29, 2026
4c084e5
fix(control-api): prelock expiring approval subjects inside the sweep
alfredolopez80 Oct 29, 2026
f461b10
fix(control-api): narrow session revocation grants to select and insert
alfredolopez80 Oct 29, 2026
139e789
fix(control-api): wrap Google ID token library errors in a typed error
alfredolopez80 Oct 29, 2026
6cfafc2
fix(control-api): classify live-membership failures in team authoriza…
alfredolopez80 Oct 29, 2026
985a3d8
fix(control-api): reject a non-string session token as invalid
alfredolopez80 Oct 29, 2026
560c7cc
fix(control-api): reject non-canonical member ids on team self-removal
alfredolopez80 Oct 29, 2026
d9c1103
fix(control-api): let active team members search the external directory
alfredolopez80 Oct 29, 2026
da67941
fix(control-api): prelock approval trigger subjects before the decisi…
alfredolopez80 Oct 29, 2026
16bc77d
fix(control-api): stop run heartbeats from bumping team and user revi…
alfredolopez80 Oct 29, 2026
3e4891b
fix(control-api): stop GFS content saves from bumping resource revisions
alfredolopez80 Oct 29, 2026
cc003f0
Merge origin/dev 947b49ebb into the PR #334 stack
alfredolopez80 Oct 29, 2026
3fc0e17
fix(profile-ui): report an incomplete sign-out when the logout fence …
alfredolopez80 Oct 29, 2026
95d8efb
fix(control-api): prelock recipe policy subjects before the delete cl…
alfredolopez80 Oct 29, 2026
742f0a4
fix(control-api): publish only the caller's catalog relationships
alfredolopez80 Oct 30, 2026
96aa069
fix(control-api): fail a Host closed when its Context does not resolve
alfredolopez80 Oct 30, 2026
d9847ce
fix(control-api): bind the team approval candidate to its requester
alfredolopez80 Oct 30, 2026
3861fdb
fix(control-api): stop notification delivery-state writes from bumpin…
alfredolopez80 Oct 30, 2026
f3d8f93
fix(workflow-recipes): prelock approval subjects before failing stuck…
alfredolopez80 Oct 30, 2026
d01be5b
test(external-rest-api): cover an idle native A to B to A team switch
alfredolopez80 Oct 30, 2026
9dde7b8
Merge origin/dev 3432a9965 into feat/user-centric-access-foundation
alfredolopez80 Oct 30, 2026
c6d857d
test(control-api): answer the session reads the contexts wiring test …
alfredolopez80 Oct 30, 2026
5767fc9
Merge origin/dev 56c5e49cd into feat/user-centric-access-foundation
alfredolopez80 Oct 30, 2026
f7a2462
fix: restore member visibility for external team reads
alfredolopez80 Oct 31, 2026
98981a8
fix(control-api): guard 0134 backfill against oversized gfs_resources
alfredolopez80 Oct 31, 2026
d615fdf
fix(control-api): prelock user retirement revisions and close hand-ov…
alfredolopez80 Oct 31, 2026
7d7119a
test(control-api): add retirement prelock to privilege inventory and …
alfredolopez80 Oct 31, 2026
ac179d6
ci(control-api): pin new real-PostgreSQL suites for PR1 fix stack
alfredolopez80 Oct 31, 2026
b1c65a2
test(control-api): guarantee real postgres fixture cleanup
alfredolopez80 Oct 31, 2026
23abf47
test: include PR1 PostgreSQL suites in census
alfredolopez80 Oct 31, 2026
5491fc9
test(desktop): isolate permission refresh across sessions
alfredolopez80 Oct 31, 2026
6af8737
test(harness): check certification inputs before T0 and keep T1 repor…
alfredolopez80 Nov 2, 2026
03a7cbc
Merge origin/dev 562d2e480 into feat/user-centric-access-foundation
alfredolopez80 Nov 2, 2026
5dae55d
fix(workflow-recipes): return run and recipe writers to dev
alfredolopez80 Nov 3, 2026
0be9d59
fix(scripts): derive runtime access relation count from the peer TSV
alfredolopez80 Nov 3, 2026
ff2d08e
fix(deploy): share one migration Job identity normalizer
alfredolopez80 Nov 3, 2026
cd71129
test(clients): pin the CG-6 GFS verdict and the 404 logout fence
alfredolopez80 Nov 3, 2026
a98a641
fix(profile-ui): restore the Download Evenfire link on accepted invit…
alfredolopez80 Nov 3, 2026
7fc7fda
fix(external-rest-api): forward control-api error bodies as dev did
alfredolopez80 Nov 3, 2026
403774e
fix(control-api): restore dev error bodies for P-01..P-08
alfredolopez80 Nov 3, 2026
6579d48
fix(external-rest-api): stop sending the x-evenfire-client-ip alias
alfredolopez80 Nov 3, 2026
5816c69
fix(external-rest-api): keep the profile cookie on a refused renewal
alfredolopez80 Nov 3, 2026
bfc7ec8
refactor(control-api): drop the per-mutation session revalidation
alfredolopez80 Nov 3, 2026
8009406
refactor(control-api): deliver managed invitations with dev's flow
alfredolopez80 Nov 3, 2026
c1b0df1
perf(control-api): keep the action budget out of V1 session reads
alfredolopez80 Nov 3, 2026
a601398
Merge t3/restore-workflow-recipes-writers into fix/pr334-r4-impl
alfredolopez80 Nov 4, 2026
76684eb
Merge t3/ops-scripts-migration-identity into fix/pr334-r4-impl
alfredolopez80 Nov 4, 2026
891a829
Merge t3/edge-error-forwarding-relaunch into fix/pr334-r4-impl
alfredolopez80 Nov 4, 2026
c230cba
Merge t3/client-tests-profile-download-link into fix/pr334-r4-impl
alfredolopez80 Nov 4, 2026
eb1f52f
refactor(access): remove the /external/access and /me/access routes
alfredolopez80 Nov 4, 2026
f0e8a49
refactor(access): remove the aggregate access catalog from PR1
alfredolopez80 Nov 4, 2026
fcdfa5a
test(control-api): drop the archive revision lock-order suite after K1
alfredolopez80 Nov 4, 2026
b53951a
fix(external-rest-api): answer a revoked session with 401 on /me
alfredolopez80 Nov 4, 2026
ddf8cf4
fix(external-rest-api): confirm logout only for an invalid session
alfredolopez80 Nov 4, 2026
4e30c60
fix(desktop-app): end the session when /me rejects it and tell the wi…
alfredolopez80 Nov 4, 2026
75e2482
test(profile-ui): answer a repeated logout with invalid_session in th…
alfredolopez80 Nov 4, 2026
f7a1a22
fix(profile-ui): confirm logout only for a presented session
alfredolopez80 Nov 4, 2026
64e27bf
refactor(control-api): remove the live resolver, operational index an…
alfredolopez80 Nov 4, 2026
3695a20
test(control-api): cover every user-access policy rejection
alfredolopez80 Nov 4, 2026
cd79955
refactor: remove session and edge error helpers left without callers
alfredolopez80 Nov 4, 2026
522049e
fix(control-api): trim PR1 access schema to session tables (K13)
alfredolopez80 Nov 4, 2026
caa7ae6
fix(control-api): restore cursorless directory search (K14)
alfredolopez80 Nov 4, 2026
1caef1b
fix(control-api,profile-ui): use dev's invitation email validator (K15)
alfredolopez80 Nov 4, 2026
9e45e3a
fix(control-api): remove unused acceptInvitation (K16)
alfredolopez80 Nov 4, 2026
64b6585
fix(control-api): read the V1 session clock inside the lifecycle quer…
alfredolopez80 Nov 4, 2026
c02b82a
fix(control-api): compile the default user access policy once (K18)
alfredolopez80 Nov 4, 2026
4d49f2a
fix(control-api): check notification stream authority once per heartb…
alfredolopez80 Nov 4, 2026
9d32a66
fix(control-api): restore dev's canCallerReadWorkflowRun (K19b)
alfredolopez80 Nov 4, 2026
9b8cd4e
fix(control-api): bind session exchange to the claimed role (K23)
alfredolopez80 Nov 4, 2026
5f37f62
test: mark session token fixtures as synthetic
alfredolopez80 Nov 4, 2026
c148252
fix(control-api): lock user rows with FOR NO KEY UPDATE, user first (…
alfredolopez80 Nov 4, 2026
5db1ed5
fix(ci,scripts): harden certification harness and E2E credentials (K26)
alfredolopez80 Nov 4, 2026
256fe12
docs(deploy): add user access foundation upgrade note (K27)
alfredolopez80 Nov 4, 2026
af584a5
test(control-api): expect the locked user row in invitation replay (K25)
alfredolopez80 Nov 4, 2026
a07ee0b
fix(external-rest-api): relay retry and quota headers on retryable er…
alfredolopez80 Nov 4, 2026
6d0e4c9
fix(profile-ui): keep a pending sign-out until a login succeeds
alfredolopez80 Nov 4, 2026
4c98be0
fix(control-api): mint GFS tokens only for the authenticated generation
alfredolopez80 Nov 4, 2026
7099beb
fix(control-api): require a live admin role to rename a team
alfredolopez80 Nov 4, 2026
aad6d23
test(control-api): let the V1 transaction mutation reach its assertions
alfredolopez80 Nov 4, 2026
b599124
fix(control-api): check notification authority once per delivered batch
alfredolopez80 Nov 4, 2026
78663fa
fix(control-api): lock the user before the invitation on acceptance
alfredolopez80 Nov 4, 2026
43fc6e2
fix: end Desktop sessions only on the invalid_session envelope
alfredolopez80 Nov 4, 2026
5812eb5
chore: merge dev 40b424889 into the PR #334 fix round
alfredolopez80 Nov 5, 2026
e1e47ac
fix(control-api): keep notification wake-ups and check V2 session exp…
alfredolopez80 Nov 5, 2026
028ebb3
fix(control-api): lock the invitation user by email before creating a…
alfredolopez80 Nov 5, 2026
fe97d53
fix(profile-ui,external-rest-api): keep the logout fence until login …
alfredolopez80 Nov 5, 2026
d9091bc
test(profile-ui): answer another user's /me with 403 in the recovery …
alfredolopez80 Nov 5, 2026
7e24604
test(control-api): cover the live team-grant filter on workflow run r…
alfredolopez80 Nov 5, 2026
6124946
fix(external-rest-api): forward session end and live denial from team…
alfredolopez80 Nov 5, 2026
2b060b5
fix(profile-ui): let a token-proof invitation accept through the logo…
alfredolopez80 Nov 5, 2026
805a425
docs(deploy): document the 0132 revocation window and legacy catch-up…
alfredolopez80 Nov 5, 2026
db999bd
fix(control-api): restore dev's directory search shape and fix manage…
alfredolopez80 Nov 5, 2026
bdfea8e
fix(control-api): treat a non-UUID team or user id as no live membership
alfredolopez80 Nov 5, 2026
9235eeb
test(desktop): bring the deterministic renderer test fixes from #1305
alfredolopez80 Nov 5, 2026
d79a23f
fix(control-api): lock managed-user retirement in the member writers'…
alfredolopez80 Nov 5, 2026
e10a896
fix(control-api): classify external auth outages and non-string tokens
alfredolopez80 Nov 5, 2026
52c63e9
fix(external-rest-api): answer a bare 401 on /me as dev does
alfredolopez80 Nov 5, 2026
1ec1fa8
fix(desktop): end the session on 401/403/410 from /me again
alfredolopez80 Nov 5, 2026
596ac60
fix(profile-ui): stop the accepted-invitation password loop behind th…
alfredolopez80 Nov 5, 2026
405e22b
chore: track next-env.d.ts as dev does
alfredolopez80 Nov 5, 2026
f01a419
fix(control-api): gate V2 issuance, close the logout-to-GFS-mint wind…
alfredolopez80 Nov 5, 2026
9edcd35
fix(control-api): compare PR1 indexes exactly and refuse earlier-head…
alfredolopez80 Nov 5, 2026
dd2bea3
docs(deploy): record round-2 preconditions for the user-access founda…
alfredolopez80 Nov 5, 2026
1a24817
fix(minikube): restore the generated next-env.d.ts after T0's Next build
alfredolopez80 Nov 5, 2026
3d439b4
Merge origin/dev e946cdecd into the user-access foundation
alfredolopez80 Nov 6, 2026
6ca5fd6
test(control-api): pin the seven-day V1 lifetime after merging #1356
alfredolopez80 Nov 6, 2026
68d020a
Merge remote-tracking branch 'origin/dev' into fix/pr334-r4-impl
alfredolopez80 Nov 6, 2026
b21a3aa
fix(control-api): match hexadecimal earlier-head migration prefixes
alfredolopez80 Nov 6, 2026
3a74652
fix(external-rest-api): relay control-api's bare 401 from switch-team…
alfredolopez80 Nov 6, 2026
79d220b
fix: close the cheap round-3 review items and remove internal hostnames
alfredolopez80 Nov 6, 2026
5912f19
docs: record the PR #334 CodeQL dispositions and the shared-cluster c…
alfredolopez80 Nov 6, 2026
568194a
docs: point the verify rate-limit alert at its issue
alfredolopez80 Nov 6, 2026
7befa6e
test(control-ui): wait for the LLM secret editor to finish loading
alfredolopez80 Nov 6, 2026
aac5388
test: finish the LLM editor wait and correct three review comments
alfredolopez80 Nov 6, 2026
a3f0176
chore: merge dev (#1210) into the user access foundation change
alfredolopez80 Nov 6, 2026
67985dd
Merge remote-tracking branch 'origin/dev' into feat/user-centric-acce…
alfredolopez80 Nov 6, 2026
f3e4d4c
docs(deploy): name the earlier 0131 head without its old version token
alfredolopez80 Nov 6, 2026
caa60e3
fix(desktop-app): remove the no-active-team banner
alfredolopez80 Nov 6, 2026
11ecd37
fix(desktop-app): explain a rate-limited sign-in
alfredolopez80 Nov 6, 2026
1052c24
test(e2e): cover session team, outage and rate-limit notices on Desktop
alfredolopez80 Nov 6, 2026
1c9979c
Merge remote-tracking branch 'origin/dev' into feat/user-centric-acce…
alfredolopez80 Nov 7, 2026
33a7987
fix(control-api): keep one dev-batch bound and unblock the bounds script
alfredolopez80 Nov 7, 2026
c9a583c
test(control-api): start upgrade tests from dev's tip and derive the …
alfredolopez80 Nov 7, 2026
62f9502
fix(control-api): refuse credentials in the models.dev catalog URL
alfredolopez80 Nov 7, 2026
06d5fd6
test: close the CodeQL alerts in the E2E and unit test helpers
alfredolopez80 Nov 7, 2026
33badc8
fix(desktop-app): classify sign-in failures from a vetted transport m…
alfredolopez80 Nov 7, 2026
98573b0
fix(desktop-app): close the plugin image preview when the principal c…
alfredolopez80 Nov 7, 2026
359a9fb
test(desktop-app): admit the session-team lane only on a branch-owned…
alfredolopez80 Nov 7, 2026
52fd93d
test: add the user as a member of teams the E2E helpers create
alfredolopez80 Nov 7, 2026
4d0b8ae
fix(control-api): drop the runtime's unused DELETE on session epochs
alfredolopez80 Nov 7, 2026
b6bd492
test(desktop-app): name the new test credentials as synthetic
alfredolopez80 Nov 7, 2026
4d990b0
test(desktop-app): close the CodeQL alerts in two E2E helpers
alfredolopez80 Nov 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .github/workflows/build-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ jobs:
- 'packages/display-field/**'
- 'packages/frontend-components/**'
- 'packages/gfs-interaction-policy/**'
- 'scripts/qa-recorder/**'
external-rest-api:
- 'external-rest-api/**'
- 'packages/jwt-key-policy/**'
Expand Down
128 changes: 118 additions & 10 deletions .github/workflows/ci-public.yml
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ jobs:
pinned_suites: helpers.realPostgresTeardown.test.ts routes.mcp-host.llmProviderAttempts.test.ts passwordRecovery.http.contract.test.ts
pinned_cases: ../scripts/ci/pinned-vitest-cases/control-api.json
- service: external-rest-api
pinned_suites: invitations.passwordRecovery.public.test.ts
pinned_suites: invitations.passwordRecovery.public.test.ts mixedVersion.baseControlApi.test.ts
- service: codex-llm-proxy
pinned_suites: originPolicy.test.ts server.security.test.ts
pinned_cases: ../scripts/ci/pinned-vitest-cases/codex-llm-proxy.json
Expand Down Expand Up @@ -178,6 +178,11 @@ jobs:
working-directory: packages/workflow-runtime-core
run: npm run build

# keytar is a native Desktop dependency. When its prebuild is unavailable,
# node-gyp requires libsecret development metadata on Linux.
- name: Install Desktop native build prerequisite
if: matrix.service == 'desktop-app' && runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install --yes libsecret-1-dev
# profile-ui consumes the source-only shared frontend package through a file
# link. Install the package's own React type dependencies before Next follows
# that link to its real path; a consumer-only install cannot resolve them from
Expand All @@ -191,6 +196,13 @@ jobs:
working-directory: ${{ matrix.service }}
run: npm ci

# Cross-service integration tests import RPC Proxy source directly, whose
# config now loads the shared JWT policy package from its own node_modules.
- name: Install RPC Proxy dependencies for Control API tests
if: matrix.service == 'control-api'
working-directory: rpc-proxy
run: npm ci

- name: Test Playwright MCP cluster probe (hermetic)
if: matrix.service == 'host-context-controller'
run: >-
Expand Down Expand Up @@ -247,6 +259,11 @@ jobs:
working-directory: desktop-app
run: npm run verify:electron

- name: Validate declared test inputs
env:
CERTIFICATION_SERVICE: ${{ matrix.service }}
run: node scripts/ci/certification-inputs.mjs check --scope matrix --service "$CERTIFICATION_SERVICE"

- name: Build
working-directory: ${{ matrix.service }}
run: npm run build
Expand Down Expand Up @@ -457,6 +474,24 @@ jobs:
cache: npm
cache-dependency-path: control-api/package-lock.json

# The same validated pin declaration is consumed by local preflight and
# the real-PostgreSQL tests; these checkouts stay read-only producers.
- name: Resolve historical producer pins
id: certification_inputs
run: node scripts/ci/certification-inputs.mjs pins >> "$GITHUB_OUTPUT"

- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
ref: ${{ steps.certification_inputs.outputs.observed_commit }}
path: r61-b1-producers/observed-dev
persist-credentials: false

- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
ref: ${{ steps.certification_inputs.outputs.latest_commit }}
path: r61-b1-producers/latest-dev
persist-credentials: false

- name: Install dependencies
working-directory: control-api
run: npm ci
Expand All @@ -469,6 +504,40 @@ jobs:
working-directory: packages/workflow-runtime-core
run: npm run build

- name: Install observed DEV producer dependencies
working-directory: r61-b1-producers/observed-dev/packages/workflow-runtime-core
run: npm ci

- name: Build observed DEV producer dependency
working-directory: r61-b1-producers/observed-dev/packages/workflow-runtime-core
run: npm run build

- name: Install observed DEV Control API dependencies
working-directory: r61-b1-producers/observed-dev/control-api
run: npm ci

- name: Build observed DEV producer with provenance
env:
TASK106_R61_B1_DEV_SOURCE_DIR: ${{ github.workspace }}/r61-b1-producers/observed-dev
run: node scripts/ci/certification-inputs.mjs build-producer --producer observedDev

- name: Install latest DEV producer dependencies
working-directory: r61-b1-producers/latest-dev/packages/workflow-runtime-core
run: npm ci

- name: Build latest DEV producer dependency
working-directory: r61-b1-producers/latest-dev/packages/workflow-runtime-core
run: npm run build

- name: Install latest DEV Control API dependencies
working-directory: r61-b1-producers/latest-dev/control-api
run: npm ci

- name: Build latest DEV producer with provenance
env:
TASK106_R61_B1_LATEST_DEV_SOURCE_DIR: ${{ github.workspace }}/r61-b1-producers/latest-dev
run: node scripts/ci/certification-inputs.mjs build-producer --producer latestDev

- name: Install External REST contract-test dependencies
working-directory: external-rest-api
run: npm ci
Expand All @@ -477,16 +546,28 @@ jobs:
working-directory: external-rest-api
run: npm run build

- name: Validate recovery suite selection contract
- name: Validate Real PostgreSQL certification inputs
env:
TASK106_R61_B1_DEV_SOURCE_DIR: ${{ github.workspace }}/r61-b1-producers/observed-dev
TASK106_R61_B1_LATEST_DEV_SOURCE_DIR: ${{ github.workspace }}/r61-b1-producers/latest-dev
run: node scripts/ci/certification-inputs.mjs check --scope ci-t1

- name: Validate recovery suite selection, certification input and T1 evidence contracts
env:
CODEX_SCRATCH_ROOT: ${{ runner.temp }}
run: node --test scripts/tests/password-recovery-suite-contract.test.mjs
run: >-
node scripts/tests/run-node-test-files.mjs
scripts/tests/password-recovery-suite-contract.test.mjs
scripts/tests/certification-inputs.test.mjs
scripts/tests/t1-reporter-projection.test.mjs

- name: Run control-api real Postgres suites (migration + GFS)
working-directory: control-api
env:
CONTROL_API_REAL_PG_ADMIN_URL: postgresql://postgres@127.0.0.1:15433/postgres
CONTROL_API_REAL_PG_REQUIRED: '1'
TASK106_R61_B1_DEV_SOURCE_DIR: ${{ github.workspace }}/r61-b1-producers/observed-dev
TASK106_R61_B1_LATEST_DEV_SOURCE_DIR: ${{ github.workspace }}/r61-b1-producers/latest-dev
FORCE_COLOR: '0'
NO_COLOR: '1'
# The `realPostgres` filter matches every control-api
Expand Down Expand Up @@ -530,9 +611,8 @@ jobs:
echo 'real-Postgres control-api lane reported skipped tests' >&2
exit 1
fi
# Pinned suites (Codex/Grok subscription, provider attempts, and the
# external GFS rate-limit suites) must stay inside the real-Postgres
# filter and run. The check reads the JSON report, not the console:
# Pinned suites must stay inside the real-Postgres filter and run.
# The check reads the JSON report, not the console:
# a file whose tests are all skipped is still printed by name.
node ../scripts/ci/assert-pinned-vitest-suites.mjs "$report" \
db.codexSubscriptionConnection.realPostgres.integration.test.ts \
Expand Down Expand Up @@ -575,6 +655,21 @@ jobs:
oauth.legacyGrantLaneFence.realPostgres.integration.test.ts \
routes.mcpOauth.legacyGrantLaneFence.realPostgres.integration.test.ts \
oauth.dcrCredential.installIdentity.realPostgres.integration.test.ts \
db.realPostgresMigration.integration.test.ts \
directoryManagedWriterLockOrder.realPostgres.integration.test.ts \
externalSessionSingleTouch.realPostgres.integration.test.ts \
invitationAcceptedOnboarding.realPostgres.integration.test.ts \
legacyPasswordEpochBackfill.realPostgres.integration.test.ts \
legacySessionExchangeRace.realPostgres.integration.test.ts \
migrationExecutionPolicy.realPostgres.integration.test.ts \
migrationPreviousImageCompatibility.realPostgres.integration.test.ts \
pr1MigrationLocks.realPostgres.integration.test.ts \
routes.externalTeamsFinalAuthority.realPostgres.integration.test.ts \
routes.externalTeamsLegacyAdminRevocation.realPostgres.integration.test.ts \
userAccessRuntimeContract.realPostgres.integration.test.ts \
userSessionDatabaseClock.realPostgres.integration.test.ts \
userSessionUserLockMode.realPostgres.integration.test.ts \
workflowRunReadAndApprovalV1Compatibility.realPostgres.integration.test.ts \
contracts.llmAttention.wire.realPostgres.integration.test.ts \
db.llmRetireSeededCatalog.realPostgres.integration.test.ts \
routes.adminLlmProviderCatalogPolicy.realPostgres.integration.test.ts \
Expand All @@ -583,8 +678,7 @@ jobs:
services.llmCatalogAutoEnable.realPostgres.integration.test.ts \
services.llmCatalogSyncFakeDb.concurrency.realPostgres.integration.test.ts \
services.llmCatalogSyncFakeDb.differential.realPostgres.integration.test.ts \
services.llmProviderCatalogSettings.realPostgres.integration.test.ts \
db.realPostgresMigration.integration.test.ts
services.llmProviderCatalogSettings.realPostgres.integration.test.ts

- name: Install gfs-controller dependencies
working-directory: gfs-controller
Expand Down Expand Up @@ -673,8 +767,10 @@ jobs:
- name: Audit live Profile UI recovery Playwright spec
run: >-
python3 tools/e2e_static_audit.py
tests/e2e/playwright/profile-ui-recovery/reset-session-hydration.spec.ts
tests/e2e/playwright/profile-ui-recovery/ordinary-invitation-onboarding.spec.ts
tests/e2e/playwright/profile-ui-recovery/j1-invitation-onboarding.spec.ts
tests/e2e/playwright/profile-ui-recovery/j2-password-recovery.spec.ts
tests/e2e/playwright/profile-ui-recovery/j3-logout.spec.ts
tests/e2e/playwright/profile-ui-recovery/negative-routes.spec.ts

# ─── Registry contract — boot evenfire-registry and drive the real client ──
# Catches wire-format drift in clerumRegistryClient.ts before merge. Requires
Expand Down Expand Up @@ -869,6 +965,9 @@ jobs:
- name: Test WRC egress oracle, DNS and lifecycle (unit/integration, cluster-free)
run: bash scripts/tests/test-wrc-egress-degradation-gate.sh

- name: Test E2E credentials stay out of argv (RPC gateway journey)
run: bash scripts/tests/test-e2e-credential-argv.sh

- name: Test Minikube mutation and WRC recovery admission (hermetic, cluster-free)
run: bash scripts/tests/test-minikube-mutation-boundary.sh

Expand Down Expand Up @@ -902,6 +1001,12 @@ jobs:
- name: Test single-writer validator fails loud on an absent local deploy
run: bash scripts/tests/test-postgres-single-writer-strategy.sh

- name: Test control-api migration bounds and Job ownership contract
run: bash scripts/tests/test-control-api-migration-bounds.sh

- name: Test GCP deploy scripts (migration and runtime access contracts)
run: bash scripts/tests/test-gcp-scripts.sh

- name: Test post-reset convergence isolates DB-dependent controllers
run: bash scripts/tests/test-converge-control-db-after-reset.sh

Expand Down Expand Up @@ -1034,6 +1139,9 @@ jobs:
- name: Test the seed's LLM model ensure through the admin API
run: bash scripts/tests/test-e2e-llm-model-ensure.sh

- name: Test the workflow-trigger E2E team helper adds the member
run: bash scripts/tests/test-e2e-workflow-triggers-team-helper.sh

- name: Test the E2E LLM model manifest covers every E2E model literal
run: bash scripts/tests/test-e2e-llm-models-manifest.sh

Expand Down
4 changes: 4 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ only the internal planner so `full-bootstrap` is reachable).
`make minikube-pre-gate-sync` alone never constitutes T2 evidence.
Follow the rule `.cursor/rules/minikube-t0-t1-t2.mdc` and the skill
`.cursor/skills/minikube-t0-t1-t2/SKILL.md` for the certification workflow.
T1 needs the two pinned producer checkouts named by
`TASK106_R61_B1_DEV_SOURCE_DIR` and `TASK106_R61_B1_LATEST_DEV_SOURCE_DIR`;
prepare them as in `docs/testing/minikube-t2-runbook.md` ("Pinned producer
inputs") before launching.
A T1 `next:` line or `REAL_PG_REQUIRED_BUT_UNAVAILABLE` is not a license to
operate Docker: do not `docker run` probes, `docker desktop restart`, or
experiment with published ports. Re-enter `make minikube-t2` or
Expand Down
18 changes: 16 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,14 @@ minikube-deploy-all-body:
@# rpc-proxy-secrets after each full overlay apply so Desktop/rpc-proxy/mcp-host
@# stay on the same JWT validation key.
@MINIKUBE_GFS_MUTATION="$(MINIKUBE_GFS_MUTATION)" $(MAKE) --no-print-directory minikube-sync-auth-key
@# external-rest-api's browser mutation guard compares the request Origin with
@# EXTERNAL_REST_API_CORS_ORIGIN, and the base manifest pins localhost:3001. A
@# branch profile serves Profile UI on a generated port, so the overlay apply
@# above would otherwise leave every profile UI login on a 403 (review C-8,
@# OD-8). Re-assert the profile-owned origin after the apply; the script is a
@# no-op without a branch profile ports.env. Plain bash, not $(MAKE), so a
@# dry run never executes it.
@bash scripts/minikube/sync-external-rest-api-cors-origin.sh --context=$(MINIKUBE_PROFILE)
@# The pre-overlay helper migrates legacy last-applied ownership without
@# removing the provisioning-owned connection-string. When the GFS stack is
@# deployed AND control-api is Ready (migration 0048 applied), re-provision
Expand Down Expand Up @@ -736,6 +744,10 @@ minikube-sync-auth-key-if-present: ## Sync JWT public key only when minikube aut
minikube-sync-codex-subscription-url: ## Resolve branch Control UI URL and sync CONTROL_API_CONTROL_UI_BASE_URL for Codex OAuth
@bash scripts/minikube/sync-codex-subscription-control-ui-url.sh --context=$(MINIKUBE_PROFILE)

.PHONY: minikube-sync-external-rest-api-cors-origin
minikube-sync-external-rest-api-cors-origin: ## Align profiles/external-rest-api EXTERNAL_REST_API_CORS_ORIGIN with a branch profile's Profile UI
@bash scripts/minikube/sync-external-rest-api-cors-origin.sh --context=$(MINIKUBE_PROFILE)

# ── Minikube Port Forwards ──────────────────────────────────────────
.PHONY: minikube-pf-control-ui
minikube-pf-control-ui: ## Port-forward Control UI → localhost:3000
Expand Down Expand Up @@ -1555,8 +1567,10 @@ test-playwright-desktop: ## Run Playwright tests for Desktop App only (requires:

.PHONY: test-playwright-profile-ui-recovery
test-playwright-profile-ui-recovery: ## Audit and run the Profile UI password-recovery browser journey
@python3 tools/e2e_static_audit.py tests/e2e/playwright/profile-ui-recovery/reset-session-hydration.spec.ts
@python3 tools/e2e_static_audit.py tests/e2e/playwright/profile-ui-recovery/ordinary-invitation-onboarding.spec.ts
@for spec in tests/e2e/playwright/profile-ui-recovery/*.spec.ts; do \
python3 tools/e2e_static_audit.py "$$spec" || exit $$?; \
done
@npm --prefix external-rest-api run build
@cd tests/e2e/playwright && node run-profile-ui-recovery.mjs

.PHONY: test-playwright-headed
Expand Down
4 changes: 2 additions & 2 deletions control-api/package-lock.json

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

2 changes: 1 addition & 1 deletion control-api/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "clerum-control-api",
"version": "0.1.891",
"version": "0.1.940",
"description": "Internal Clerum control plane REST API + UI for managing CRDs and secrets",
"main": "dist/main.js",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion control-api/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1274,7 +1274,7 @@ export const config: Config = {
// handler, and the hostWakeCoalesceWindowMs coalescer runs INSIDE the
// handler (it coalesces annotation projections, not calls) — coalesced
// calls therefore still consume rate-limit budget, so this budget must
// cover RAW calls (the arithmetic above counts raw calls). 30/min is >=3x
// cover RAW calls (the arithmetic above counts raw calls). 150/min is >=3x
// the single-hold mechanism volume and covers one held wake plus prewarm
// bursts from a few concurrent devices (4 x 3 = 12) plus a real message.
// Derivation is regression-guarded by test/config.hostWakeRateLimit.test.ts.
Expand Down
Loading
Loading