Commit Graph
113 Commits
Author SHA1 Message Date
gitprov 5987bf6444 Improve document tray navigation 2026-08-23 23:29:10 +02:00
gitprov 31a4b52832 Add case adjudication cutscene 2026-08-23 23:21:24 +02:00
gitprov 0c4e0db118 Adding checkboxes to brief 2026-08-23 23:16:54 +02:00
gitprovandClaude Opus 4.8 d53b183508 Merge origin/main: reconcile briefing checklist and brief visuals
Both branches added a case-briefing checklist independently. Reconcile onto
the upstream {id,text} BriefChecklistItem model and keep the upstream brief /
luggage-tag visual refinements (boxed CHECKLIST section, assignment/heading
split), while retaining this branch's full-stack backing (checklist table,
board read/write/clone, importer/exporter) and the player-tickable interaction
(persisted locally per level). Keep the brief-goals list alongside the new
checklist. Align the server wire shape, importer, and exporter to {id,text}.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 23:06:20 +02:00
gitprovandClaude Opus 4.8 e37dc651f3 Add authorable per-level briefing checklist
The case briefing showed a wall of body text. Add a checklist of short,
player-tickable steps authored per level: a new `checklist` on the level brief
(table osint.level_brief_checklist_items), read/written with the board, cloned
on template freeze/instantiate, and carried through the mystery importer and the
mystery:pull exporter. Player tick state is guidance-only, persisted locally per
level rather than on the shared board. Convert the Barricelli inventor-proof
brief from prose into a short intro plus a six-step checklist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 22:50:50 +02:00
gitprov 55ab07fcd8 Refine brief and luggage tag visuals 2026-08-23 22:47:28 +02:00
gitprov 95b17e945c Before the doublework change 2026-08-23 22:40:43 +02:00
gitprov f91e08b515 Merge branch 'main' of ssh://ramanujan.glitch.university:2222/glitch-university/gupi-osint-board 2026-08-23 22:26:41 +02:00
gitprov 6fedac6adc Adding changes to luggage tag 2026-08-23 22:26:20 +02:00
gitprov dfe2cdf666 Improved animation on the inventory tools 2026-08-23 22:11:29 +02:00
gitprov 0484a07fff Streamline board chrome and case report 2026-08-23 21:58:18 +02:00
gitprov 16df920374 Adding a change to App.tsx 2026-08-23 21:57:26 +02:00
gitprov 55acbfc782 Merge branch 'main' of ssh://ramanujan.glitch.university:2222/glitch-university/gupi-osint-board 2026-08-23 21:37:30 +02:00
gitprov 7dec2994b4 Adding fixes that lets us pull a myster in the db into a json file 2026-08-23 21:37:06 +02:00
gitprov 15971f7150 Merge branch 'main' of ssh://ramanujan.glitch.university:2222/glitch-university/gupi-osint-board 2026-08-23 21:36:02 +02:00
gitprov 3a6ad356f6 Adding fixes to board, simplifications 2026-08-23 21:35:34 +02:00
gitprov 3c099a5daa Merge branch 'main' of ssh://ramanujan.glitch.university:2222/glitch-university/gupi-osint-board 2026-08-23 01:16:00 +02:00
gitprov 625f28b00b In the middle of refactoring the mystery seeding 2026-08-23 01:15:49 +02:00
gitprov 9e426e91ab Keep new evidence visible on the board 2026-08-23 01:15:05 +02:00
gitprovandClaude Opus 4.8 f6fbeb39cf Make mystery importer seed notes and tolerate sparse manifests
Add a notes[] array to the manifest (note exhibits with presentation),
so the Scene 6 phone-note board is reproducible from source instead of
hand-authored. Also default documents/folders/brief/subtitle so
narrative-only mysteries (e.g. barricelli-files) import cleanly.

Captures mysteries/barricelli-phone-note/mystery.json from the authored
template (note: "PHONE FOR GLITCH HUNTER / Call: 5550100").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 00:43:47 +02:00
gitprovandClaude Opus 4.8 ce30321532 Mark auth cookie Secure in production
secure keys off NODE_ENV so the auth_token cookie is HTTPS-only in
prod while still working over plain HTTP on localhost in dev.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 00:21:42 +02:00
gitprov ada26ec40a Merge remote-tracking branch 'origin/main' 2026-08-22 23:43:33 +02:00
gitprov 74ccd11d0c Add clipping provenance status stamps 2026-08-22 23:41:08 +02:00
gitprov 1a9b6124c2 Merge remote-tracking branch 'origin/main' 2026-08-22 23:31:23 +02:00
gitprovandClaude Opus 4.8 5eab67dd5d Remove narrative-todo.md (audited done / superseded)
Its live items migrated into story-graph.md and persistent-boards.md; the
rest was shipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 23:31:23 +02:00
gitprov 1d1d082a53 Merge remote-tracking branch 'origin/main' 2026-08-22 23:19:53 +02:00
gitprov fae5200846 Refine board notes, clipping evidence, and case reports 2026-08-22 23:19:46 +02:00
gitprovandClaude Opus 4.8 072e82f253 Prod: public origin gupi.glitch.university, internal services over HTTP
CORS_ORIGIN defaults to https://gupi.${DOMAIN} (the TLS frontend served by the
proxy); the app still reaches Postgres/MinIO by their docker hostnames over
plain HTTP on the shared network. Clarify the split in .env.prod.example and
fix the deploy success URL.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 23:09:43 +02:00
gitprovandClaude Opus 4.8 37c9fa1ebe Deploy: target /opt/gupi with its own .env.prod
Point deploy.sh at /opt/gupi (its own dir + .env.prod) so it uploads, builds
on the server, migrates, and runs `docker compose -f
/opt/gupi/docker-compose.prod.yml --env-file /opt/gupi/.env.prod up -d`.
The app-only prod stack still joins the shared network and uses gu_common's
Postgres/MinIO. Adds .env.prod.example as the fill-in template.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 22:54:18 +02:00
gitprovandClaude Opus 4.8 5754fa1f55 Auth slice 3: dev-only fallback + playthrough owner checks
resolveUserId now returns null for an anonymous request in production (no
shared identity); the fixed dev user only applies locally. Player-scoped
routes (create/advance/goto, achievements, reach, notebook, phone, dial)
require a user and verify ownership via ownsPlaythrough — a player can no
longer read or act on another's playthrough. Verified: dev anon still plays;
cross-user access returns 403/404.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 22:39:52 +02:00
gitprovandClaude Opus 4.8 93febcaef9 Resume straight into the next node after finishing a level
continueAfterGoal sent non-level next nodes to '/' (the splash), forcing a
manual Resume; use the /?resume=1 fast-path so the debrief dialogue plays
immediately, matching the phone-connect handoff.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 21:59:41 +02:00
gitprov 189a98cc64 Merge remote-tracking branch 'local-osint/main' 2026-08-22 21:53:04 +02:00
gitprov 489da14c9e Reevaluate existing evidence when rules change 2026-08-22 21:52:58 +02:00
gitprovandClaude Opus 4.8 f4c9d30505 Front-page enrolment / sign-in + character screen (auth slice 2)
The splash now requires a signed-in investigator: a rudimentary character
screen (display name + handle + password, with a placeholder avatar) enrols
or signs in, then reveals the case picker. GET /api/auth/me gates the front
door; the signed-in investigator's name/avatar and a sign-out show on the
splash. /node and ?resume paths are unaffected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 21:45:38 +02:00
gitprovandClaude Opus 4.8 ce0e82f7fb Player accounts (auth slice 1): register/login, JWT issuance, isolation
GUPI-issued local auth (path A): osint.users (handle + scrypt password_hash +
display_name + avatar_url; external_id reserved for a later glitch.university
key-exchange). POST /api/auth/register|login set the auth_token cookie via a
new signPlayerToken (sub=user id, role=player); /logout and /me added. Because
playthroughs already bind to resolveUserId, two players each "Begin" and stay
fully isolated. Verification stays issuer-agnostic for the external swap later.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 21:42:49 +02:00
gitprov 03266b5f40 Merge branch 'main' of ssh://ramanujan.glitch.university:2222/glitch-university/gupi-osint-board 2026-08-22 20:25:42 +02:00
gitprovandClaude Opus 4.8 972a7f6862 Inventory: centre the rotating phone model in the rack
Its geometry hangs below the hinge pivot, so it sat low; lift it so the
handset is vertically centred in the tool carousel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 20:19:11 +02:00
gitprovandClaude Opus 4.8 a154849b3f Inventory polish: smaller phone/notebook, phone higher, auto-open, exit to board
The phone and notebook render a bit smaller; the phone sits higher on screen;
in-game the handset opens automatically (session mode); and the tool view
gains an EXIT ✕ that closes the inventory straight back to the board.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 20:17:08 +02:00
gitprovandClaude Opus 4.8 c1c424ab25 Notebook: write your own note (alongside captured lines)
The field notebook gets a handwriting input to add a custom note manually;
it posts to the same notebook store and can be torn to the board like a
captured one.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 20:14:24 +02:00
gitprovandClaude Opus 4.8 e69558e0e7 Field notebook: capture NPC lines, tear pages onto the board
A dialogue line gains a "✎ Note this" capture that saves it to a
per-playthrough notebook (migration 035 + notebook endpoints). The inventory
notebook lists captured pages in a handwriting font (Google "Reenie Beanie")
and "✂ Tear to board" drops a page onto the current board as a note exhibit
(reusing addNote), then removes the page. Board notes render handwritten too.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 20:11:15 +02:00
gitprov f455c433b7 Fix case report evidence verification 2026-08-22 20:07:16 +02:00
gitprov 90ef7b25e8 Merge branch 'main' of ssh://ramanujan.glitch.university:2222/glitch-university/gupi-osint-board 2026-08-22 19:54:15 +02:00
gitprov 52f0a31f44 Animate mugshot party identification 2026-08-22 19:49:44 +02:00
gitprovandClaude Opus 4.8 80bc9b21a7 Phone runtime (2b): inventory phone on the board dials for real
The phone gains a session mode that reads the live directory (/phone) and
dials (/dial); the inventory threads it through. On a campaign level the
board shows an INVENTORY nav button that opens the tool rack, and connecting
a call hands back to the campaign via /?resume=1 (a fast-path that resumes
the current node instead of the splash). On Barricelli's note-board: open
inventory -> phone -> dial 5550100 -> Glitch Hunter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 19:49:00 +02:00
gitprovandClaude Opus 4.8 56bf2f97d0 Phone runtime (2a): connected directory + dial resolution
GET /playthroughs/:id/phone returns the directory of the phone node the
current node is wired to; POST /playthroughs/:id/dial resolves a number to
connect (advance to the wired dialogue), voicemail (known contact, no line
here), or not-in-service. Barricelli's note-board is wired to the phone node
and Glitch Hunter's decline returns to it. Frontend (inventory on the board)
is 2b.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 19:38:46 +02:00
gitprov cde945ea2e Merge branch 'main' of ssh://ramanujan.glitch.university:2222/glitch-university/gupi-osint-board 2026-08-22 19:28:30 +02:00
gitprov 10dcd567c6 Add classified evidence presentations 2026-08-22 19:28:06 +02:00
gitprovandClaude Opus 4.8 2271a7b02c Barricelli: add Scene 6 note-board between Dobby and Glitch Hunter
Dobby now sends the player to a one-note level ("PHONE FOR GLITCH HUNTER ·
5550100") whose report-back reaches Glitch Hunter — the intended note→phone
beat, with the note-board's report-back standing in for dialing until the
phone runtime lands. The note-board is a frozen barricelli-phone-note level
template (single note exhibit).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 19:24:11 +02:00
gitprovandClaude Opus 4.8 15e12ce048 Seed The Barricelli Files mystery (Scenes 5–10, narrative-only)
A narrative-only manifest wrapping the existing barricelli-inventor-proof
level template: Dobby intro/tasks (branching, awards dobby.knows_barricelli*),
a phone node bound to Glitch Hunter, the gated Glitch-Hunter interrogation
(options require the Dobby flags, converge via a terminal), Scene 7 level,
Scene 8 debrief, the barricelli_luggage merit ceremony, and the Scene 10
deep-web branch. Phone dialing still stubbed — the phone node is authored
structure off the walkable path (Dobby → Hunter is direct for now).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 18:50:39 +02:00
gitprov dc0147aebc Merge branch 'main' of ssh://ramanujan.glitch.university:2222/glitch-university/gupi-osint-board 2026-08-22 18:42:40 +02:00