JianFeeeee
1dc6223631
L2: permission mode propagation across forward/calendar/adopt + PUT endpoint + tests
P1 - forward inherits mode:
- doForward: when creating a new target session, use InheritedMode from
the source session (plan parent → plan child, cannot escalate)
- enforcement snapshot set from receiving agent
P1 - calendar_events gets permission_mode column:
- Added to 3 migration sites (sqlite init, pg init, incremental alter)
- CalendarEvent model gains PermissionMode field
- CreateCalendarEvent / UpdateCalendarEvent normalize + persist the field
- resolveCalendarSession: on new session → write event's mode;
on reuse → ModeAtMost(cur, eventMode), prevents escalation
(plan Agent's reminder fires into a workspace session = bypass)
- SendCalendarMail now takes permMode and threads it through
- fireEvent passes event.PermissionMode to all delivery paths
P1 - AdoptPlatformSession explicitly writes default mode:
- Writes DefaultPermissionMode + enforcement on adopt, instead of
relying on DB column default (avoids silent drift on schema changes)
P2 - PUT /sessions/{id}/permission endpoint:
- New handler UpdateSessionPermission (auth required, access check)
- Registers PUT route alongside existing budget/alias endpoints
- Broadcasts session_update on change
- Does NOT refresh enforcement (design: snapshot at creation)
P3 - Tests (24 new cases):
- permission_mode_test.go: InheritedMode (6 cases), SetSessionPermissionMode
roundtrip, dirty value fail-closed, NormalizePermissionMode, calendar event
roundtrip/dirty/update, adopt writes default mode, plan escalation guard,
3-level inheritance chain
- defaultsession_test.go: budget regression, permission mode regression
(pins created=false → no reset on reuse)
Deploys with: bash deploy/redeploy-gateway.sh --skip-tests
Schema migration: auto via addMissingColumns (new column default 'workspace')
2026-09-06 17:32:47 +08:00
..
2026-09-04 15:35:48 +08:00
2026-09-04 11:14:44 +08:00
2026-09-04 06:28:33 +08:00
2026-09-03 12:09:12 +08:00
2026-09-02 14:16:46 +08:00
2026-09-06 15:18:06 +08:00
2026-09-03 12:09:12 +08:00
2026-09-03 12:09:12 +08:00
2026-09-02 20:05:51 +08:00
2026-09-04 06:28:03 +08:00
2026-09-06 17:32:47 +08:00
2026-09-06 17:32:47 +08:00
2026-09-05 09:58:36 +08:00
2026-09-05 00:28:05 +08:00
2026-09-02 20:05:51 +08:00
2026-09-02 21:34:55 +08:00
2026-09-02 21:34:55 +08:00
2026-09-03 21:08:39 +08:00
2026-09-03 12:09:12 +08:00
2026-09-03 12:09:12 +08:00
2026-09-06 17:32:47 +08:00
2026-09-06 15:16:49 +08:00
2026-09-04 19:06:36 +08:00
2026-09-02 20:05:51 +08:00
2026-09-06 17:32:47 +08:00
2026-09-02 14:16:46 +08:00
2026-09-03 12:09:12 +08:00
2026-09-02 14:33:41 +08:00
2026-09-02 10:29:26 +08:00
2026-09-03 15:01:52 +08:00
2026-09-03 15:01:52 +08:00
2026-09-02 14:16:46 +08:00
2026-09-06 15:16:49 +08:00
2026-09-02 14:33:41 +08:00
2026-09-04 06:28:33 +08:00
2026-09-02 20:05:51 +08:00
2026-09-06 15:18:06 +08:00
2026-09-06 15:18:06 +08:00
2026-09-03 21:08:23 +08:00