Spaces:
Running
Running
Commit History
-
feat(privacy): anonymous session scope, construct TTL, creation cap [spec 0009]
Follows spec 0008, which scoped custom constructs to signed-in owners and left the anonymous tier as one shared bucket. Digging into that surfaced that three separate defects were being read as one "constructs are public" bug. No anonymous identity: owner_user_id == "" meant anonymous, so every anonymous visitor shared a bucket and saw everyone else's projects and constructs. Anonymous visitors now carry a signed session-id cookie and own their rows as "anon:<id>", so one column carries both ownership kinds and the shared bucket is retired for projects and constructs at once. Signing in ADOPTS that session's rows into the account: without it, scoping anonymous work to a session would strand it at sign-in, and it also replaces the reason 049074a left anonymous projects open to everybody. No lifecycle: retention.py imported Corpus, Job, Project - Construct was not in it, and constructs hang off no project, so nothing ever cascaded to them. Corpora go when a run finishes and projects ex…b35131c
-
feat(constructs): apply the 2026-08-25 library review [spec 0007]
Noor Skhiri reviewed all 525 items across the 94 constructs (wording, reverse keying, subscale grouping, citations). This applies it. Split by what item_hash covers. Item changes ship as a NEW version: 61 reverse-scoring flags corrected across 14 constructs (35 -> 96 flagged items), 9 verbatim wording fixes, and one SCS-SF item moved to Over-identification per the source coding key. 23 constructs gain a version 2; their version 1 files keep their original items and are marked archived so runs that pinned them still resolve. Everything outside the hash is edited in place: 88 constructs promoted to verified with reviewer and date recorded, plus citation and source_url repairs. Six constructs stay needs_verification pending two PI decisions (the IPIP "I" prefix and the K10 stem). Two loader gaps had to close for this to ship: sync_library was insert-only, so a status change could never reach an already-seeded database, and the picker listed every version, so a v2 would show the same co…4afd259
-
feat: put invite links on hold; single brand header everywhere
Invite links are dormant behind CCR_INVITES_ENABLED (default off): creation 409s, existing tokens stop redeeming with a clear message, /admin hides the section. Pre-assigned roles remain the onboarding path; machinery and audit history stay intact for re-enabling. Header: the CCR logo (which already reads 'CCR') stands alone with the tagline 'Psychological Text Analysis with Contextualized Construct Representation' - app, guide, and product topbars now identical.6a6c7cf
-
Refactor admin page to include collapsible sections and enhance invite link management
- Added a collapsible Section component to improve layout and readability of the AdminPage. - Integrated invite link management, allowing admins to view, copy, and revoke invite links. - Updated tests to verify invite link functionality, including status checks and revocation behavior. - Enhanced UI elements for better user experience, including status indicators for invites and improved error handling.5ad96fc -
Four-tier access model: self-governing admin, pre-login access, audit trail
PI decisions 2026-07-22: - Roles: pi | maintainer | lab | external (legacy "member" reads as external). Lab members and above: unlimited saved runs. - PI role holds escalation rights in-app (grant/revoke staff, act on staff accounts, audit view); ADMIN_EMAILS is bootstrap + break-glass only. Maintainers get the operational surface. Nobody can change their own role. - Construct verification is maintainer-only (the RA's job); PI/admin keep a read-only queue. - Access before sign-in: email-bound pre-assigned roles (staff-capable, claimed on first password/Google sign-in) and signed 7-day invite links (lab/external only, ?invite= signup flow). - Append-only admin_audit table records every admin action; visible to PI/env admins. - Docs split: /guide = navigate-and-test; new /product page = access model + capability matrix + architecture (moved from guide).bfb6467
-
Admin: no password reset for Google accounts (UI + backend guard)
5a24540 -
Admin page v1: user roles (lab tier), password resets, failed-run requeue, verification queue
Synced from lab mainline. /admin gated by ADMIN_EMAILS env allowlist. Lab-role accounts get unlimited saved runs (replaces the global env hack). 72 tests passing.b633038