Skip to content

feat(identity): session identity + source attribution (overlay) - #250

Closed
patroza wants to merge 17 commits into
fork/changesfrom
fork/identity
Closed

feat(identity): session identity + source attribution (overlay)#250
patroza wants to merge 17 commits into
fork/changesfrom
fork/identity

Conversation

@patroza

@patroza patroza commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Permanent integration overlay (do not merge into fork/changes)

Identity remains a registered integration overlay composed into fork/integration.
It must stay draft and base on fork/changes — never squash-merge into the product layer.

This PR replaces the accidentally merged #203. Child work (participation badge #247,
Jira queue/inline replies #248) already lives on fork/identity.

Stack role

  • Base: fork/changes
  • Branch: fork/identity
  • Registered in .github/pr-stack.json integrationOverlays

Do not merge

Managed draft lock should keep this open as draft. Compose applies this tip into fork/integration.

patroza pushed a commit that referenced this pull request Jul 31, 2026
#203 was accidentally squash-merged into fork/changes. Identity must remain
an integration overlay only. fork/changes no longer carries identity product;
compose applies fork/identity (draft #250).
@patroza patroza added the OVERLAY Long-lived draft overlay composed into fork/integration; do not merge directly. label Jul 31, 2026
@patroza
patroza force-pushed the fork/identity branch 6 times, most recently from 6c1a23c to bcb98eb Compare July 31, 2026 10:24
@patroza
patroza force-pushed the fork/changes branch 2 times, most recently from a36ceec to 8c9fe41 Compare July 31, 2026 10:58
@patroza
patroza force-pushed the fork/identity branch 2 times, most recently from 534fc25 to 0752e4b Compare July 31, 2026 11:27
@patroza
patroza force-pushed the fork/identity branch 5 times, most recently from 196e261 to b2655f8 Compare August 4, 2026 05:00
@patroza
patroza force-pushed the fork/identity branch 2 times, most recently from 29b2408 to d80bee0 Compare August 4, 2026 11:04
@patroza
patroza force-pushed the fork/identity branch 2 times, most recently from 07fe785 to b1779b7 Compare August 4, 2026 11:45
github-actions Bot and others added 17 commits August 5, 2026 16:44
…fixes

Identity product layer based on current fork/changes: session claims,
source attribution, participant UI (#247), and Jira queue/inline replies
(#248), with mobile typecheck fixes for stage label and toolbar clearance.

(cherry picked from commit d3872ea)
)

Mine/Ours now keeps threads with no person tags (legacy, channel-only
stamps like desktop, identity-disabled servers). Theirs is only threads
that have person attribution excluding the session claim.

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
(cherry picked from commit 31ea163)
…pply

Identity product reapply had dropped the mobile model-selection helper
while new-task-flow still imported it, breaking mobile typecheck.

(cherry picked from commit 1080cb3)
…#256)

Remember Mine/Theirs across mobile restarts via device preferences, and
let Mine/Theirs refine by created, participated, or both (default).

Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
(cherry picked from commit 50a7ffd)
Created looked only at origin, so Theirs+Created included threads you
joined (origin ≠ you) while Theirs+Both required you to be absent from
every person tag — Created could show more than Both. Classify involvement
first, then narrow by role so Both is always the superset.

Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
(cherry picked from commit 35af605)
Keep mobile-showcase landscape harness typing from fork/changes when
rebasing the identity overlay; identity reapply had dropped the field.

(cherry picked from commit 59dd846)
Keep checkForAppUpdateOnLaunch wired after product-merging snooze
actions into the identity HomeRouteScreen.

(cherry picked from commit 00fd93a)
Production showcase deep links use t3code://; identity reapply left
t3code-dev:// expectations that fail after restack compose.

(cherry picked from commit 4a3b314)
Jira and GitHub treat an unset/empty identity map like an unmapped actor:
no agent turns. Only mapped people may drive the host via those webhooks.

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
(cherry picked from commit 8be7e5b)
The header said claims were a process-local Ref with "Persistence later".
`layerPersisted` has since made server claims SQLite-backed
(SessionIdentityClaimRepository + migration 037), with the Ref demoted to a
read-through cache. Only the residual-free `layer` used by the CLI and tests
is still memory-only.

Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 26e478f)
The server read T3_IDENTITY_MAP_PATH once at layer construction, so adding or
removing a person meant restarting t3code-server. The map is now re-checked on
a 60s TTL and applies in place.

Polls rather than watches: the map arrives over virtiofs from the host, where
inotify propagation is not something to depend on. An ino/size/mtime
fingerprint keeps an untouched file from being re-parsed every TTL.

Two safety rules, because a reload can now fail in production where startup
could not:

- A re-read that yields no people never disables an already-enabled map.
  `enabled === false` turns the operate gate off entirely, so a truncated or
  unparseable file would have failed open. The last good map keeps serving,
  marked unhealthy, and the next TTL retries.
- requireOperateClaim no longer deletes the persisted claim of a person who is
  absent from the map. A half-written file can still parse as a valid map with
  a subset of people, and that delete is not reversible. Refusing operate is
  the gate; membership is re-checked on every operate, so a stale row grants
  nothing.

Startup behaviour is unchanged: a missing or empty map still means the feature
is off, and removing T3_IDENTITY_MAP_PATH remains the way to disable the gate.

Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 3b2203f)
…292)

Port the Board Ownership filter (Anyone/Mine/Theirs + relation sub-filter)
into classic Sidebar v1, sharing localStorage with v2. Default the filter to
Mine on web v1/v2 and mobile so the inbox starts on your work; unattributed
threads still count as Mine.

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
(cherry picked from commit aa2b21f)
Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Identity reapply dropped forward-compat wrappers for config issues and
available editors while keeping ServerProviders on ForwardCompatibleArray.
@omegent-app

omegent-app Bot commented Aug 6, 2026

Copy link
Copy Markdown

Drained into fork/dev. This overlay's product content has been in fork/dev since it was cut from the composed fork/integration tip — re-verified by path, with the only uncontained commits touching pnpm-lock.yaml alone. Deregistered from integrationOverlays in #348. Reopen only if fork/dev is ever shown to be missing content from this branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

OVERLAY Long-lived draft overlay composed into fork/integration; do not merge directly.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant