Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
149 commits
Select commit Hold shift + click to select a range
cc8d3c6
docs(videochat): extend active sprint plan
createreadupdate May 8, 2026
17416f6
fix(videochat): install catalog call apps from marketplace
createreadupdate May 8, 2026
d223bfb
fix(videochat): cut over kingrt service domains
createreadupdate May 8, 2026
776338e
restore deleted worker
pierrejoye May 8, 2026
0c30016
Merge remote-tracking branch 'origin/expirement/mediapipe' into codex…
createreadupdate May 8, 2026
c1556ce
Merge branch 'codex/iam-e2e-foundation' into codex/iam-call-access-e2…
createreadupdate May 8, 2026
fdf6614
test(videochat): cover call-access membership removal
createreadupdate May 8, 2026
517c15c
docs(videochat): mirror completed sprint checks
createreadupdate May 8, 2026
6b15612
Merge branch 'codex/iam-call-access-e2e-foundation' into codex/iam-e2…
createreadupdate May 8, 2026
63d4cb6
feat(videochat): add call access decision contract
createreadupdate May 8, 2026
ba98aaa
fix(videochat): invalidate cancelled call access links
createreadupdate May 8, 2026
9815e30
fix(videochat): guard guest lifecycle revival
createreadupdate May 8, 2026
b9c215c
feat(videochat): prove guest list direct join scope
createreadupdate May 8, 2026
4c7fe6a
feat(videochat): verify system admin call rights
createreadupdate May 8, 2026
eb930db
feat(videochat): verify org admin call rights
createreadupdate May 8, 2026
ba72603
Merge branch 'codex/iam-lane-01-access-decision' into codex/iam-e2e-f…
createreadupdate May 8, 2026
217272b
Merge branch 'codex/iam-lane-02-invite-invalidation' into codex/iam-e…
createreadupdate May 8, 2026
c52410d
Merge branch 'codex/iam-lane-03-guest-lifecycle' into codex/iam-e2e-f…
createreadupdate May 8, 2026
9b3a8a4
Merge branch 'codex/iam-lane-04-guest-list-auth' into codex/iam-e2e-f…
createreadupdate May 8, 2026
1c0e8d5
Merge branch 'codex/iam-lane-05-system-admin-call-rights' into codex/…
createreadupdate May 8, 2026
1e91a3b
Merge branch 'codex/iam-lane-06-org-admin-call-rights' into codex/iam…
createreadupdate May 8, 2026
f7b5651
test(videochat): pin background regression matrix fixture
createreadupdate May 8, 2026
f5d312f
test(videochat): pin background matte fallback contracts
createreadupdate May 8, 2026
775ef45
Merge branch 'codex/iam-lane-18-bgf-regression-matrix' into codex/iam…
createreadupdate May 8, 2026
e042241
Merge branch 'codex/iam-lane-19-bgf-matte-contracts' into codex/iam-e…
createreadupdate May 8, 2026
a96393f
docs(videochat): mark background matte contract done
createreadupdate May 8, 2026
cda6d16
fix(videochat): enforce lobby moderation authority
createreadupdate May 8, 2026
8b4575d
Merge branch 'codex/iam-lane-08-lobby-security' into codex/iam-e2e-fo…
createreadupdate May 8, 2026
eeab3b1
feat(videochat): audit call access membership events
createreadupdate May 8, 2026
7410451
Merge branch 'codex/iam-lane-09-audit-events' into codex/iam-e2e-foun…
createreadupdate May 8, 2026
83455ad
fix(videochat): keep invalid call access responses private
createreadupdate May 8, 2026
404da36
Merge branch 'codex/iam-lane-10-privacy-leak' into codex/iam-e2e-foun…
createreadupdate May 8, 2026
b487235
feat(videochat): prove owner lobby moderation
createreadupdate May 8, 2026
efd8d5f
Merge branch 'codex/iam-lane-07-owner-moderation' into codex/iam-e2e-…
createreadupdate May 8, 2026
479579e
fix(videochat): keep call access invalid link UI private
createreadupdate May 8, 2026
a1d734e
Merge branch 'codex/iam-lane-13-frontend-link-ui' into codex/iam-e2e-…
createreadupdate May 8, 2026
a856dcc
docs(videochat): mark merged IAM lane proofs
createreadupdate May 8, 2026
659f610
chore(videochat): add read-only prod debug process
createreadupdate May 8, 2026
dc46940
fix(videochat): isolate call access tenant context
createreadupdate May 8, 2026
2c8e776
fix(videochat): gate whiteboard cursor presence by grants
createreadupdate May 8, 2026
811c499
Merge branch 'codex/iam-lane-12-cross-org' into codex/iam-e2e-foundation
createreadupdate May 8, 2026
a164a44
Merge branch 'codex/iam-lane-16-whiteboard-cursors-access' into codex…
createreadupdate May 8, 2026
8f9f586
Merge branch 'codex/iam-lane-17-prod-debug-observability' into codex/…
createreadupdate May 8, 2026
83534b3
docs: audit IAM call-access sprint checkboxes
createreadupdate May 8, 2026
20f119b
docs(videochat): mark merged access and debug proofs
createreadupdate May 8, 2026
1c26fb3
fix(videochat): guard call access session fixation
createreadupdate May 8, 2026
6212df5
Merge branch 'codex/iam-lane-11-session-fixation' into codex/iam-e2e-…
createreadupdate May 8, 2026
1a49533
Merge branch 'codex/iam-lane-20-sprint-checkbox-audit' into codex/iam…
createreadupdate May 8, 2026
a518fd1
docs(videochat): mark session fixation proof
createreadupdate May 8, 2026
276c14f
fix(videochat): scope realtime joins to call tenant
createreadupdate May 8, 2026
526f709
Add IAM call-access E2E seed matrix
createreadupdate May 8, 2026
58056d9
Merge branch 'codex/iam-lane-15-realtime-call-scope' into codex/iam-e…
createreadupdate May 8, 2026
7002755
docs(videochat): mark realtime call scope proof
createreadupdate May 8, 2026
7ddb482
Fix Call Apps sidebar access UX
createreadupdate May 8, 2026
93356f0
Harden call app iframe launch bridge
createreadupdate May 8, 2026
906307a
Merge branch 'codex/iam-lane-14-e2e-seeding-matrix' into codex/iam-e2…
createreadupdate May 8, 2026
7b4eb91
fix: preserve media tracks during reconnect cleanup
createreadupdate May 8, 2026
fe83ba2
docs(videochat): mark call access seed matrix proof
createreadupdate May 8, 2026
2450d3c
Merge branch 'codex/iam-lane-21-call-app-sidebar-access' into codex/i…
createreadupdate May 8, 2026
f5d0862
Merge branch 'codex/iam-lane-22-call-app-csp-postmessage' into codex/…
createreadupdate May 8, 2026
e7951ec
Merge branch 'codex/iam-lane-24-media-reconnect-screenshare-stability…
createreadupdate May 8, 2026
2ec5e55
docs(videochat): record call app and media stability proofs
createreadupdate May 8, 2026
0e9f990
Guard call access session route context
createreadupdate May 8, 2026
f415b72
Merge branch 'codex/iam-lane-23-call-access-session-route-guard' into…
createreadupdate May 8, 2026
f52e2db
docs(videochat): record call access route guard proof
createreadupdate May 8, 2026
ae9d1e5
test: add media reconnect screenshare smoke
createreadupdate May 8, 2026
0d17160
Merge branch 'codex/iam-lane-29-media-reconnect-browser-smoke' into c…
createreadupdate May 8, 2026
24b67a3
docs(videochat): record media reconnect browser smoke
createreadupdate May 8, 2026
539e8f1
Harden call app frame CSP headers
createreadupdate May 8, 2026
1690d0b
test: add media reconnect release smoke
createreadupdate May 8, 2026
3b5f7a5
Merge branch 'codex/iam-lane-28-call-app-frame-csp-headers' into code…
createreadupdate May 8, 2026
27cb549
docs(videochat): record call app frame csp proof
createreadupdate May 8, 2026
a3dbf2c
test: prove whiteboard install reaches call apps sidebar
createreadupdate May 8, 2026
48ee90b
Merge branch 'codex/iam-lane-31-media-reconnect-release-smoke' into c…
createreadupdate May 8, 2026
2ce7cf4
docs(videochat): record media release smoke gate
createreadupdate May 8, 2026
16412ab
Send verified context for call access join
createreadupdate May 8, 2026
9cc5df6
Fix realtime reconnect backfill retry handling
createreadupdate May 8, 2026
b5307fb
Merge branch 'codex/iam-lane-27-whiteboard-install-browser-proof' int…
createreadupdate May 8, 2026
19c7b45
docs(videochat): record whiteboard install browser proof
createreadupdate May 8, 2026
a223231
debug: add media reconnect prod observability
createreadupdate May 8, 2026
ccd53d5
Split call-access compose smoke from chat matrix
createreadupdate May 8, 2026
8f263e1
Add call app CSP production proof
createreadupdate May 8, 2026
3b3a81b
test: run whiteboard install sidebar e2e
createreadupdate May 8, 2026
081d019
Merge branch 'codex/iam-lane-25-realtime-reconnect-backfill' into cod…
createreadupdate May 8, 2026
a3e1e72
Merge branch 'codex/iam-lane-30-call-access-verified-context-ui' into…
createreadupdate May 8, 2026
ee50fed
docs(videochat): record reconnect and verified context proofs
createreadupdate May 8, 2026
31e8c44
Merge branch 'codex/iam-lane-26-call-access-ci-smoke-split' into code…
createreadupdate May 8, 2026
3495784
Merge branch 'codex/iam-lane-34-whiteboard-install-e2e-run' into code…
createreadupdate May 8, 2026
8693013
Merge branch 'codex/iam-lane-32-call-app-csp-prod-proof' into codex/i…
createreadupdate May 8, 2026
90bb33e
Merge branch 'codex/iam-lane-33-prod-debug-media-reconnect' into code…
createreadupdate May 8, 2026
0ac9caf
test: prove guest cleanup idempotence audit
createreadupdate May 8, 2026
3b75dac
Add realtime reconnect browser contract
createreadupdate May 8, 2026
c3f9315
Prove call access login switch handling
createreadupdate May 8, 2026
7a95d97
Prove named whiteboard remote cursors
createreadupdate May 8, 2026
64c7a09
test: prove call access links do not grant admin
createreadupdate May 8, 2026
cfe5f5d
test(videochat): stabilize call access e2e gate
createreadupdate May 8, 2026
eee584e
Add lobby concurrency contract
createreadupdate May 8, 2026
92df98b
Merge branch 'codex/iam-lane-35-realtime-reconnect-browser-contract' …
createreadupdate May 8, 2026
db69f56
Merge branch 'codex/iam-lane-36-call-access-login-switch-e2e' into co…
createreadupdate May 8, 2026
1efd0af
Merge branch 'codex/iam-lane-38-guest-cleanup-idempotence' into codex…
createreadupdate May 8, 2026
0651e14
Merge branch 'codex/iam-lane-39-whiteboard-named-cursors-proof' into …
createreadupdate May 8, 2026
fa08ec3
Merge branch 'codex/iam-lane-40-anonymous-link-admin-prevention' into…
createreadupdate May 8, 2026
c33ff92
test: add docker sqlite guest cleanup proof
createreadupdate May 8, 2026
09cef37
Merge branch 'codex/iam-lane-37-lobby-concurrency-contract' into code…
createreadupdate May 8, 2026
9d7c65d
fix: resolve call access session room admission
createreadupdate May 8, 2026
109d6c4
Merge branch 'codex/iam-lane-43-guest-cleanup-docker-proof' into code…
createreadupdate May 8, 2026
3f49e3a
Add whiteboard cursor access regression proof
createreadupdate May 8, 2026
2b1c1a3
fix(videochat): preserve audit aggregate counts
createreadupdate May 8, 2026
e40d7b0
Prove strong mismatch call access privacy
createreadupdate May 8, 2026
e329d55
Merge branch 'codex/iam-lane-42-whiteboard-cursor-access-regression' …
createreadupdate May 8, 2026
590a6b5
Merge branch 'codex/iam-lane-45-call-access-session-contract-fix' int…
createreadupdate May 8, 2026
f8c8e17
test: wire guest cleanup sqlite proof into smoke
createreadupdate May 8, 2026
4259598
Add realtime reconnect websocket e2e proof
createreadupdate May 8, 2026
eb130a8
Prove whiteboard cursor labels beside sidebar controls
createreadupdate May 8, 2026
da78f2f
Wire call access session contract into smoke
createreadupdate May 8, 2026
71dfecc
Merge branch 'codex/iam-lane-44-strong-mismatch-no-data-leak' into co…
createreadupdate May 8, 2026
e387ed9
Add lobby concurrency UI proof
createreadupdate May 8, 2026
0935e94
Prove strong mismatch backend privacy
createreadupdate May 8, 2026
929bf34
Prove stale role loss after membership removal
createreadupdate May 8, 2026
1d32254
Prove logout call-access link verification isolation
createreadupdate May 8, 2026
a6035ee
Prove call-access parallel account isolation
createreadupdate May 8, 2026
94972ca
fix(videochat): bound gossip neighbor renegotiation
createreadupdate May 8, 2026
ce7bd05
Merge branch 'codex/iam-lane-41-realtime-reconnect-websocket-e2e' int…
createreadupdate May 8, 2026
5916527
Merge branch 'codex/prod-call-workspace-stack-overflow' into codex/ia…
createreadupdate May 8, 2026
b90e4d1
test(videochat): prove bounded gossip renegotiation
createreadupdate May 8, 2026
c81a3cd
Merge branch 'codex/iam-lane-46-lobby-browser-concurrency-proof' into…
createreadupdate May 8, 2026
324a5e0
Merge branch 'codex/iam-lane-47-guest-cleanup-ci-smoke-wire' into cod…
createreadupdate May 8, 2026
ca1d0c3
Merge branch 'codex/iam-lane-48-whiteboard-cursor-sidebar-proof' into…
createreadupdate May 8, 2026
16bd5fe
Merge branch 'codex/iam-lane-49-call-access-session-ci-wire' into cod…
createreadupdate May 8, 2026
7ba4b23
Merge branch 'codex/iam-lane-50-strong-mismatch-backend-contract' int…
createreadupdate May 8, 2026
da699c1
Merge branch 'codex/iam-lane-51-logout-link-verification-no-leak' int…
createreadupdate May 8, 2026
b1158fc
Merge branch 'codex/iam-lane-52-parallel-tabs-account-isolation' into…
createreadupdate May 8, 2026
148f948
Merge branch 'codex/iam-lane-53-membership-removal-stale-role-proof' …
createreadupdate May 8, 2026
a02f40f
Merge branch 'codex/prod-call-workspace-stack-overflow' into codex/ia…
createreadupdate May 8, 2026
c110dbd
Add call creation owner rights contract
createreadupdate May 8, 2026
46d6dd1
Add stale organization role revalidation contract
createreadupdate May 8, 2026
87befd4
Merge branch 'codex/iam-lane-56-call-creation-owner-rights-proof' int…
createreadupdate May 8, 2026
3c2cf24
Merge branch 'codex/iam-lane-55-stale-org-role-revalidation-proof' in…
createreadupdate May 8, 2026
7b2c97c
fix(videochat): defer gossip neighbor offers during glare
createreadupdate May 8, 2026
1c713d3
fix(videochat): refresh media security after participant drift
createreadupdate May 8, 2026
f5b3e85
fix(videochat): wait for stable gossip renegotiation
createreadupdate May 8, 2026
4ff8ec4
fix(videochat): defer gossip offer glare during set-local
createreadupdate May 8, 2026
b8d7f94
fix(videochat): mirror gossip primary frames to open sfu
createreadupdate May 8, 2026
aed1492
fix(videochat): stabilize gossip and sfu alias recovery
createreadupdate May 8, 2026
0073ec9
fix(videochat): isolate gossip carrier frame continuity
createreadupdate May 8, 2026
f905346
fix(videochat): tolerate gossip rollback stable races
createreadupdate May 8, 2026
4b00cc8
fix(videochat): recover stale sender key mismatches
createreadupdate May 8, 2026
600efae
fix(videochat): feed optional sfu failures into backpressure
createreadupdate May 8, 2026
3cc798d
Keep background fallback on Pierre worker pipeline
createreadupdate May 8, 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
27 changes: 27 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,33 @@ Operational visibility is a first-class concern:
- ticket, certificate, and reload lifecycle management
- autoscaling and cluster integration hooks

For KingRT production call investigations, use:

```bash
demo/video-chat/scripts/prod-debug.sh
```

The prod-debug process is read-only. It inspects public runtime health, domains,
asset/version endpoints, API/WS/SFU reachability, marketplace and call-app
reachability, Whiteboard Call App CSP/`Allow-CSP-From` frame headers, container
status, and recent redacted remote logs. Its Call App proof checks both
`/public/index.html` and `/call-app/whiteboard/public/index.html` on the
configured Whiteboard host for `https://app.kingrt.com` compatibility, absence
of `X-Frame-Options`, and absence of nested `*.app.kingrt.com` service origins.
Remote log sections are labeled for media reconnect, screen-share reconnect
exhaustion, stale local media capture discard, audio/video track loss, SFU
reconnect, and Call App frame/CSP errors. It uses existing
`demo/video-chat/.env.local` values only for production domains and the SSH
target. `prod-debug.sh` does not deploy, restart, write DB data, change DNS, or
use admin actions. Set `VIDEOCHAT_PROD_DEBUG_SKIP_REMOTE=1` to run only public
HTTP/WebSocket/header probes, or `VIDEOCHAT_PROD_DEBUG_DRY_RUN=1` to prove the
local read-only flow without network or SSH.

Read-only media reconnect, screen-share reconnect exhaustion, stale local media
capture discard, audio/video track loss, SFU reconnect, and Call App frame/CSP
checks in prod-debug.sh are non-mutating: prod-debug.sh does not deploy,
restart, write DB data, change DNS, or use admin actions.

## Public Programming Model

The core programming model is:
Expand Down
2,140 changes: 2,104 additions & 36 deletions SPRINT.md

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions demo/call-app/whiteboard/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@

<section class="canvas-shell">
<canvas id="board" width="1600" height="900"></canvas>
<div id="cursorOverlay" class="cursor-overlay" aria-live="polite" aria-label="Remote cursors"></div>
<form id="inlineEditor" class="inline-editor">
<textarea id="inlineText" maxlength="500" placeholder="Text"></textarea>
<button id="inlineSubmit" type="submit" aria-label="Insert">Send</button>
Expand Down
23 changes: 23 additions & 0 deletions demo/call-app/whiteboard/public/whiteboard.css
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,29 @@ canvas {
background: var(--text-primary);
}

.cursor-overlay {
position: absolute;
inset: 0;
z-index: 3;
pointer-events: none;
}

.remote-cursor-label {
position: absolute;
max-width: 220px;
transform: translate(20px, 8px);
padding: 5px 9px;
border-left: 4px solid var(--accent);
background: rgba(0, 0, 16, 0.82);
color: var(--text-primary);
font-size: 12px;
font-weight: 800;
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

.inline-editor {
position: absolute;
z-index: 4;
Expand Down
34 changes: 34 additions & 0 deletions demo/call-app/whiteboard/public/whiteboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
const status = document.getElementById('status');
const clock = document.getElementById('clock');
const modeBadge = document.getElementById('modeBadge');
const cursorOverlay = document.getElementById('cursorOverlay');
const widthInput = document.getElementById('width');
const inlineEditor = document.getElementById('inlineEditor');
const inlineText = document.getElementById('inlineText');
Expand Down Expand Up @@ -78,6 +79,9 @@
}
if (!canRead()) {
clearInterval(pollTimer);
state.cursors.clear();
state.selections.clear();
render();
}
}

Expand Down Expand Up @@ -146,6 +150,7 @@
}

function applyPresence(payloadType, payload = {}, sourceActorId = actorId) {
if (!canRead()) return;
const normalizedActorId = String(sourceActorId || payload.actor_id || '').trim();
if (!normalizedActorId) return;
const withActor = {
Expand All @@ -158,6 +163,14 @@
render();
}

function removePresenceForActor(sourceActorId = '') {
const normalizedActorId = String(sourceActorId || '').trim();
if (!normalizedActorId) return;
state.cursors.delete(normalizedActorId);
state.selections.delete(normalizedActorId);
render();
}

function publishPresence(payloadType, payload) {
if (!canPublishPresence()) return false;
const now = Date.now();
Expand Down Expand Up @@ -224,6 +237,25 @@

function render() {
renderScene(ctx, true);
syncCursorOverlay();
}

function syncCursorOverlay() {
if (!cursorOverlay) return;
const labels = [];
for (const cursor of state.cursors.values()) {
if (cursor.actor_id === actorId) continue;
const x = Math.max(0, Math.min(boardWidth, Number(cursor.x || 0)));
const y = Math.max(0, Math.min(boardHeight, Number(cursor.y || 0)));
const label = document.createElement('span');
label.className = 'remote-cursor-label';
label.textContent = displayNameLabel(cursor.label || cursor.display_name);
label.style.left = `${(x / boardWidth) * 100}%`;
label.style.top = `${(y / boardHeight) * 100}%`;
label.style.borderLeftColor = cursor.color || '#1582bf';
labels.push(label);
}
cursorOverlay.replaceChildren(...labels);
}

function drawStroke(targetCtx, stroke) {
Expand Down Expand Up @@ -742,6 +774,8 @@
if (message.result?.operation) applyEnvelope(message.result.operation);
} else if (message.type === 'call_app.presence.update') {
applyPresence(String(message.payload_type || ''), message.payload || {}, String(message.actor_id || ''));
} else if (message.type === 'call_app.presence.leave') {
removePresenceForActor(message.actor_id || message.payload?.actor_id || '');
} else if (message.type === 'call_app.crdt.error') {
applyAccessState(message);
const reason = String(message.reason || '').trim();
Expand Down
Loading
Loading