Public /app: deterministic deploy, live-demo fixes, and a stability protocol#9
Draft
rob-e-graham wants to merge 42 commits into
Draft
Public /app: deterministic deploy, live-demo fixes, and a stability protocol#9rob-e-graham wants to merge 42 commits into
rob-e-graham wants to merge 42 commits into
Conversation
The live fineartmedia.tech/app page is a hand-copied shell that drifted to an old build while the source moved on. This script regenerates the website's app.html from the canonical source, injects window.ARCHAI_API_BASE for the tunnelled backend, verifies the build marker + API base are present, and publishes via the website repo. Additive only — no existing files changed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
- Wrap conversational-search object cards in a flex container so the fixed-width card rule applies; without it each card became a full-width block and the image stretched into a banner. - Header JS hardcoded an old build label that overwrote the correct one on load (page showed the right version briefly, then reverted). Align the JS label with the static header and bump the build to v11.6.8. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
The Connect Collection panel's grid had no padding, so its left column sat flush against the viewport edge while other tabs inset via their column classes. Add the same 30px/42px inset the curator and vocab panels use. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…g protocol - deploy-web-app.mjs now aborts if the source contains two different "Build vX.Y.Z" strings (the static header vs the JS that rewrites it) — the exact fault that showed v11.6.7 then reverted to v11.6.5 live. It also already re-reads the written file to confirm the build marker + API base. - Add docs/STABILITY_AND_TESTING_PROTOCOL.md: root-cause table, the self-verifying deploy, a 5-minute pre-publicity QA checklist run on the live URL, and rules for testing at scale without exposing write/publish/ingest or infrastructure paths to unauthenticated visitors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
The opening result list rendered image-backed objects in load order, so Museum Victoria (loaded first) always sat at the top. Interleave objects across their source collections and randomise per render, so each visit opens on a fresh, varied mix. Bump build to v11.6.10. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Make the public demo safe under publicity: visitors can search, converse, talk to objects, and browse, but cannot save, edit, publish, harvest, or reach admin — enforced on the server, not just hidden. Backend (the security boundary): - requestContext detects public traffic (Cloudflare tunnel headers or public host) and pins it to a read-only 'demo' role, ignoring any x-archai-role a visitor sends. Staff on localhost/Tailscale are unaffected. - publicDemoGuard is a deny-by-default allowlist: the demo role may call only the read endpoints it needs; every other route returns 403. Unlisted routes fail closed. Verified with a full allow/block test matrix, including a spoof attempt (role=admin from the public side stays blocked). - Kill-switch ARCHAI_PUBLIC_LOCKDOWN=off; remote-staff override via ARCHAI_STAFF_KEY + x-archai-staff-key. Frontend (matching UI): - IS_PUBLIC_DEMO locks the UI to a new read-only 'demo' role and hides staff-only controls (role picker, admin links, Training Mode, Reload/Run Harvesters, Manage Vocabularies, Select All/Export/Batch Tag, Save to Project, Edit in Directus) via data-staff-only. Bump build to v11.6.11. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Three tag/keyword array strings were missed in the AUXIO rename. No version bump — folds into the not-yet-deployed v11.6.11. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
… lockdown Handoff entry (Huggle) for today's publicity-readiness work: deterministic deploy script + guard, live-demo fixes (thumbnails, header version, connect padding), diversified default view, server-enforced read-only public demo, and the stability/testing protocol. Records deploy state and the open staff-testing decision. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Expand the read-only demo role to include every tab (Exhibitions, AUXIO Management, Vocabulary, Connect, FAMTEC) so the public demo showcases the breadth of ARCHAI's ideas and developments. Safety remains enforced by the backend (writes/publishing return 403 for public traffic), not by hiding tabs. Bump build to v11.6.12. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
New Collection dropdown in the filter row lets you scope classic search, the semantic fallback, and the default browse view to a single institution (or All collections). Populated from the collections that actually loaded. Read-only; safe for the public demo. Bump build to v11.6.13. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Add a 'Make AUXIO' action in object detail that creates a live AUXIO visitor page from the object's own verified metadata (title, story, image, rights), persisted via POST /api/nfc with a stable per-object code (re-running updates rather than duplicates). The page renders through the existing /api/nfc/pages/:tagId endpoint with grounded chat. Backend: publicDemoGuard now allowlists POST /nfc for the demo role so public visitors can create AUXIO pages, per product decision. This is the ONLY write opened to the public — publish, harvest, admin, delete stay blocked (verified). The page endpoint escapes all output; demo-created tags need light moderation/ cleanup. Also fixes a duplicated saveNFC opening introduced while editing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Handover entry covering all-tabs-accessible, collection selector, and public Make-AUXIO, with an explicit deploy-state block (live frontend still v11.6.11, backend lockdown not yet restarted) and the next steps toward pilot readiness. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
New harvesters, following the existing pattern (rights-gated, image-backed, nomic-embed-text, Qdrant upsert, --dry-run default, --apply to write): - wikimedia-harvester.js archai_wikimedia (keyless) - internetarchive-harvester.js archai_internetarchive (keyless) - loc-harvester.js archai_loc (keyless) - dpla-harvester.js archai_dpla (DPLA_API_KEY) - trove-harvester.js archai_trove (TROVE_API_KEY) Registered the 5 collections in backend ALLOWED_COLLECTIONS + COLLECTION_INSTITUTIONS and frontend COLLECTIONS + COLLECTION_LABELS + SOURCE_LABELS so search/scroll/converse accept them. Rights posture unchanged: unknown/closed licences are HELD (not public-display); only allow-listed open licences (CC0/CC BY/PD) are public. Aggregators (DPLA, Trove, Europeana-style) keep per-item rights. Poster/print reuse stays off. NOT yet run against the live stack — each needs a --dry-run then --apply on the Mac Studio (Ollama + Qdrant). API response shapes were built from each source's public docs and may need a field tweak on first run. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Records the new harvesters, their collections/keys, rights posture, run steps, and the not-yet-run status + follow-ups (collection-targets.json entries, rights review before public display). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Dry-run surfaced two issues: Wikimedia structured-data markup leaking into titles (label QS:.../title QS:...) and photos labelled 'National Communication Museum'. Clean titles to the plain human string, and exclude any record whose title/description matches the exclusion list (keeps the former-employer institution out during legal resolution). Reports an 'excluded' count. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Match the Wikimedia harvester: exclude any record whose title/description references the former-employer institution, so it can't surface via any source (Trove especially, as an Australian aggregator). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…display LoC's search API rarely returns a machine-readable licence, which held all 150 records (invisible in the demo). LoC's digitized photo/print/map collections are overwhelmingly public domain, so treat image-backed results as public UNLESS the rights text carries an explicit restriction signal (copyright/permission/restricted/etc.). Source URL + a 'verify per item' licence note stay visible. Re-run loc-harvester.js --apply to flip them public. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…d keys) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…pproval) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…tution scripts) Consolidates both uploaded contact databases + live web research (July 2026) into one send-ready pack: correct contact for each org, assigned template (A source / A-prospective / B Australian pilot / C technical / D advisor), and a fully-written ready-to-paste email per institution with fit lines filled in. 30 have direct emails ready now; rest are web-form routes. Verified new contacts include LC-Labs@loc.gov, CollectionEnquiries@aucklandmuseum.com + bjhoare@ (Auckland API), api@maas.museum (Powerhouse), access@nfsa.gov.au, stories@mplus.org.hk. Prospective-source template avoids falsely claiming a collection is already in ARCHAI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Companion to the send pack: paste straight into the Send Log tab. Columns: Priority, Group, Template, Organisation, Contact used, Route type, Status (pre-set 'Not sent'), Date sent, Follow-up due, Reply received, Correction/takedown?, Next action, Notes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Partner-facing policy on where data lives, what leaves the host machine, jurisdiction, cultural-safety gating (CARE/OCAP/Te Mana Raraunga), limitations, exit/portability, and epistemic integrity. Reviewed for accuracy against the current build before adding: - Voice section corrected from a generic 'third-party API' to the actual browser Web Speech API (browser-vendor processing, varies by browser), matching the README's honest framing; Whisper/Piper noted as the in-dev sovereign path; text-only mode flagged as fully sovereign. - Licence line set to all-rights-reserved during the research period with intended open release (not MPL); repo URL, contact, and date filled in. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Add §11 'Direction — the plan to full sovereignty': maps each §7 limitation to its committed closure (Whisper/Piper voice, scale testing, maintenance, model provenance), states the open-toolkit sector vision (grounded in the roadmap North Star), the free-for-NFP-and-education + commercial-licensing sustainability model, and the community-authority contribution path. Renumber Review to §12; bump to v0.2. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
New design exploration: extend ARCHAI from object-level interpretation to a
sovereign, accessible tour guide / wayfinder. NFC/QR check-ins as the universal
baseline ('the eyes that don't watch you back'), a tiered sensing stack
(NFC/QR -> compass -> BLE -> optional LiDAR/RoomPlan), a building-map graph with
amenities and step-free routing, wayfinding that is routed-not-guessed
(epistemic integrity applied to space), and a Phase 0 MVP that needs no new
hardware. Logged in ARCHAI_PROGRESS.md (Huggle) alongside the data-residency
policy v0.2 note.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Interactive proof of the wayfinding design: a mock gallery you tap to 'check in' (standing in for an NFC/QR tag), with ARCHAI narrating surroundings and routing to objects/amenities. Directions come from Dijkstra over a verified node/edge graph and the guide says so plainly when something isn't mapped (routed, not guessed). Fully self-contained: no network calls, no camera, no tracking, theme-aware, keyboard-accessible. Companion to docs/ARCHAI_SPATIAL_WAYFINDING.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Capture the physical anchor: an image-capable, battery e-paper museum label with embedded NFC that links to both the object and its map node. One tap = audio tour + location assistance + accessibility. Records the image-as-landmark, the 'shows the object even when it's absent' behaviour (held-not-deleted made physical), graceful degradation, updatable/sovereign labels, eco framing, and the open hardware specifics still to confirm. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Curate the mock into a real niche show — six public-domain works across six collections (Met, Rijksmuseum, Cleveland, Van Gogh Museum, Tate, Brooklyn), each with accurate metadata, rights, and a grounded first-person description. Tapping a work opens its object card and speaks it aloud via the browser Web Speech API (the same layer ARCHAI uses today) — real audio, fully self-contained. Wayfinding, surroundings narration and highlights tour all retained. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
A mobile-first, standalone gallery map served from the AUXIO folder (nfc-pages/v/ → /aux) so it is reachable on any phone at the same base URL as the AUXIO pages. Wires six real AUXIO objects into a routed wayfinding graph: a1 The Age of Bronze (Rodin) → NFC276 a2 The Seine at Bas-Meudon (Jongkind) → NFC210 a3 The Soul exploring the recesses of the Grave (after Blake) → NFC700 b1 Saùng-Gauk Burmese harp → NFC500 b2 Katamari Damacy → NFC850 b3 A Rachitic Skeleton (after Buffon) → NFC1330 Uses the same routed-not-guessed engine as the design doc: Dijkstra route(), surroundings(), narrated turn-by-turn directions, and a time-boxed tour(). Each object card links to its real NFC####.html AUXIO page via a relative href, so tapping opens the actual object with its grounded audio — letting navigation response be tested end to end on a phone. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…lags outages Root cause of the recurring "objects won't load" outages: the existing LaunchAgents kept the backend and cloudflared tunnel alive, but nothing kept Docker/Qdrant alive and nothing kept the Mac awake. When Docker stopped (reboot, Docker Desktop not launched, container exit) the backend stayed up with no vector DB, so objects silently failed to load — and no one was told until a visitor noticed. - archai-stack-supervisor.sh (new): a launchd-run loop that ensures Docker Desktop is running and the Qdrant container is up and answering, and checks Ollama, the local backend, and the public tunnel end to end. It owns the Docker+Qdrant layer (starting them when needed) and flag-only monitors backend/tunnel (launchd owns those, so it never double-starts — avoids the old EADDRINUSE). Alerts fire on every state change via a macOS notification, a log line, and an optional ARCHAI_ALERT_WEBHOOK for phone push. Alerts only on transitions, so no spam. - install-public-launchagents.sh: now also installs a caffeinate agent (keeps the Mac awake — the other recurring outage cause) and the supervisor agent, alongside the existing backend + cloudflared agents. All four are KeepAlive/RunAtLoad and installed in one loop. Compose already sets restart: unless-stopped on the containers; the supervisor covers the case where Docker itself is not running. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…arent models - ARCHAI_PROGRESS.md: new 2026-07-13 entry covering the stack supervisor + keep-awake fix (root cause of the recurring outages), the phone-nav exhibition-map demo, and the ethical-models direction; bump Last updated. - Data-residency policy §11: make the model-provenance commitment concrete by naming the transparent open models the project steers toward (OLMo 2, Pythia, IBM Granite, PleIAs' Common Corpus) plus Fairly Trained, matching the essay so repo and public writing stay in sync. Audit: working tree clean, branch in sync with origin, PR #9 current. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…ploy state Before the outreach push, the log's "Deploy state" section (2026-07-09) is out of date and could mislead: it still claims v11.6.11 is live and the read-only lockdown is not running. Adds a dated PRE-OUTREACH VERIFICATION checklist that supersedes it — four Mac-side checks (services/objects, lockdown-is-live 403 test, live frontend build, fail-safe installed) with exact commands, so the live demo is confirmed safe and dependable before partners are sent to it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
… IP decision Captures the non-code context alongside the code state so the outreach push and any collaborator pick up clean: essay edits and their placement, the LinkedIn threads handled (Jonathan/Madrona governance, William Rogers x-risk), the muse.run/Talila warm inbound + collaboration models and guardrail, and the still-open Obtext IP decision (protect vs open prior-art). Outreach starts tomorrow after the pre-outreach verification passes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
… relay - archai-stack-supervisor.sh: replace the bash-4-only associative array (declare -A STATE) with file-based state so it runs on stock macOS bash 3.2 — as written it would have died on launch on any Mac without homebrew bash first on PATH, i.e. the fail-safe itself failing exactly when relied on. Also make the Qdrant check tolerant of /readyz vs / across Qdrant versions, and shell-escape notification text. Syntax + transition logic tested (alerts fire only on state changes, no dupes). - ARCHAI_PROGRESS.md: add a "How to resume (read this first)" header so any new session reads the log + pre-outreach block before acting, and notes cloud Claude hands off via git (not the local Huggle bus). - huggle-relay/claude-2026-07-13.md: paste-ready #archai post so a Mac-local agent can mirror this cloud handoff into Huggle after a pull. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
The old archai-public-watchdog.sh starts the backend and cloudflared itself, which now collide with the launchd-owned copies and cause the :8787 port conflict. It is orphaned (nothing installs it) but its tempting name makes it a footgun. Guard it so running it prints a pointer to the supervisor/installer and exits 0 without starting anything (override with ARCHAI_WATCHDOG_FORCE=1 for reference only). Supersedes it with archai-stack-supervisor.sh. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…s, not the running stack The architecture diagram listed CollectiveAccess (CMS) + ResourceSpace (DAMS) as Layer 1, and the stack table listed them beside Qdrant/Ollama, implying the demo runs them. It does not — the demo reads open collection APIs into Qdrant/Ollama; those adapters are scaffolded, not wired to a live instance. Reframed both as example CMS/DAMS ARCHAI can sit above (connector scaffolded), matching how the essay and onboarding guide already describe them. Accuracy fix ahead of outreach — no over-claiming what is actually running. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…ndings Same class as the CollectiveAccess/ResourceSpace fix — infrastructure written as if running when it isn't: - Storage: NAS + LTO-9 tape reframed as planned target architecture; current instance runs on Mac Studio local storage (setup guides confirm NAS is "when purchased"). - Proxmox VE marked (planned) — the instance is a single Mac Studio, not Proxmox. Adds docs/COPY_AUDIT_2026-07-13.md capturing the full accuracy pass, including items that need Rob's true value before aligning everywhere: object/record counts (3,147 vs 3,267), AUXIO page count (1,402 vs 1,522), collection/institution count (19/20/21), and the model claim (qwen2.5:32b vs the compose file's 14b). Website copy noted as not-yet-audited (separate repo, network-blocked here). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…lines
The generator dropped the internal Fit note straight into every email body,
producing unfinished/broken sentences (and, worse, self-instructions like
"ask open access team" visible to the recipient). Template B read mid-sentence
("...a strong fit because Born-digital, screen culture...").
Rewrote all 47 body lines (18 Template A, 18 prospective, 11 Template B) into
finished, recipient-facing sentences and stripped the self-instructions.
Templates C/D had empty bodies (never leaked). The internal Fit note above each
entry is unchanged for the sender's own targeting.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…l 56 entries
Cold-email impact pass requested by Rob:
- Greetings now name the institution ("Hi Cleveland Museum of Art Open Access /
Digital Collections team,") instead of the placeholder "[...]" that read as
unfinished mail-merge. Short-name map for long names (Getty, Met, M+, etc.).
- Each email now invites the reader to meet a speaking object. Institutions
with verified records in AUXIO get their OWN objects (Met: Cristofori piano;
Cleveland: fish plate + Adeline Ravoux; Rijksmuseum, Smithsonian, NGA,
Brasiliana, RAWG); everyone else gets the flagship pair (piano + fish plate).
Only title-verified pages are linked — no guessed URLs.
- Adds the essay link (Waking Up the Museum, Substack) to every entry.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
Readability pass on all 56 emails: object links, the Waking Up the Museum essay, Project/GitHub lines, and signature links now use markdown titled links ([Red-Figure Fish Plate](url)) rather than pasted full URLs, so the generated docx and any rich-text email paste read cleanly. No link targets changed; only presentation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…Huggle - docs/ARCHAI_CURIOSITY_DESIGN_NOTES.md: digests the NYT piece on curiosity neuroscience (the question-answer gap as where learning happens; AI answers as endpoints) into ARCHAI design rules: answer + doorway in AUXIO prompts, surfacing unknowns as content, engineered serendipity in related objects, slow modes as a feature, never one smooth paragraph where two voices exist. Citation + digest only; full article text kept out of the public repo. - ARCHAI_PROGRESS.md: session handover extended with the Musean client track (proof of voice → discovery → pilot ladder, rates, risks), the ResourceSpace channel track (PoC connector next step), and the new design notes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…bound Adds the phones-down interaction mode to the sensing stack: BLE dwell makes the nearest object addressable, the visitor greets it out loud and hears a grounded voice answer through earbuds, eyes on the object throughout. The wearable variant (phone face-out on a lanyard as a "LiDAR necklace") adds facing so "hello" is unambiguous. Hard rules: microphone opens only on deliberate visitor action, dwell is not tracking, spoken answers end with a doorway, and everything degrades gracefully to the NFC tap. Phase 0 needs no new hardware: tap, pocket the phone, talk. Huggle: logs heads-up mode and the Artisan-e inbound (flagged for due diligence before any technical work). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
…sion rule set Logs the project-definition request sent to Artisan-e (job definition incl. conversational-vs-ingestion, one real worked example, commercial model and value flow, current state, needs vs wants), the constraints stated up front (opt-in only, rights travel with records, no scraping, cultural-safety gate), and the decision rule for when the brief lands: museum-content-through-our- bridge is declined; client-owned material becomes a scoped bespoke FAMTEC engagement on the Musean playbook. No technical work before the brief. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
fineartmedia.tech/apppage reliable for a publicity-scale audience: a deterministic self-verifying deploy, fixes for three deployed-only bugs found during testing, and a written protocol so this class of "only breaks once it's live" issue stops recurring.What changed
deploy-web-app.mjs(new): regenerates the website'sapp.htmlfrom the canonicalARCHAI_v10_8.html, injectswindow.ARCHAI_API_BASE, and re-reads the output to confirm the build marker + API base. Aborts if the file has no build marker, if it contains two differentBuild vX.Y.Zstrings, or if the API-base contract changed. Flags:--dry-run,--no-push.ARCHAI_v10_8.htmlfixes (build → v11.6.9):docs/STABILITY_AND_TESTING_PROTOCOL.md(new): root-cause table, the self-verifying deploy, a 5-minute pre-publicity QA checklist run on the live URL, and rules for testing at scale without exposing write/publish/ingest or infrastructure paths to unauthenticated visitors.How to test
node deploy-web-app.mjs --dry-runreports the detected build and target path, writes nothing.fineartmedia.tech/app: header reads v11.6.9 and stays; converse thumbnails are small cards; Connect tab is inset from the edge.Screenshots / recordings (if UI)
Risks / follow-up
/appstill depends on the backend tunnel (archai-api.fineartmedia.tech) being up — operational, not in this change.PUBLIC_APP_DEMO_HOSTING.md): the public demo currently grants full staff access; it should run in a server-enforced read-only role.🤖 Generated with Claude Code
https://claude.ai/code/session_01NDZaYMCjmiyvCkJ4t1dJMG