Commit Graph

162 Commits

Author SHA1 Message Date
Ben Stull c5952c6cfd docs(design): machine-altered-perception thesis revision
Revise the Human Experience Filter design: the piece becomes about how
humans interact with machines and how that reshapes the nervous system.
Neutral public-domain nature footage in, machine-altered perception out —
soothing or disturbing, good and bad.

Supersedes the 2026-06-04 design's thesis (§1), selection model (§3 — now
"transform from neutral", not catalog lookup), tagging division (§5), and
sourcing (§8); expands the control panel and hardware (§2/§6). Coordinate
axes and the single-pano projector are preserved.

Captures: the per-axis alteration mapping (Left=analytical overlay,
Right=generative v2v dissolve, Dark/Light=color grade), the substrate-vs-
overlay composition rule, the Light=yellow/white → neutral grey →
Dark=blue/black mood ramp, the 6-way content dial + volume/brightness, the
tactile/braille/LED/read-aloud wooden panel, and the runtime-overlay
architecture that makes multilingual labels nearly free.

Per docs/ROADMAP.md (reshapes sub-projects 2/3/4 + adds an offline v2v
authoring pipeline). Discovery session 0005.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 17:30:27 -07:00
Ben Stull 850f67abea claim human-experience-filter-art session 0005 (placeholder) + sessions.json entry 2026-06-05 08:32:48 -07:00
Ben Stull 3510236a2a add sessions/0004/SESSION-0004.0-TRANSCRIPT-2026-06-05T03-32--2026-06-05T03-56.md + replace placeholder/variant SESSION-0004.0-TRANSCRIPT-2026-06-05T03-32--INPROGRESS.md 2026-06-05 03:58:06 -07:00
Ben Stull 05c1f524da update sessions/0004/SESSION-0004.0-TRANSCRIPT-2026-06-05T03-32--INPROGRESS.md 2026-06-05 03:57:32 -07:00
Ben Stull 40dfbfd3db chore: gitignore *.egg-info/ build artifact
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:55:36 -07:00
benstull 618b69182c Merge pull request 'feat(simulator): curators X-ray experience simulator (sub-project 3)' (#3) from experience-simulator into main 2026-06-05 10:52:58 +00:00
Ben Stull 859f868d3b docs(simulator): user-guide section for the curator's X-ray
Per docs/superpowers/plans/2026-06-04-experience-simulator.md Task 7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:51:06 -07:00
Ben Stull 80cde37b98 build(simulator): Dockerfile, compose, and make targets
Per docs/superpowers/plans/2026-06-04-experience-simulator.md Task 6.
Dockerfile also copies tools/ (a declared setuptools package) so the
editable install resolves inside the image; the plan's Dockerfile omitted it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:50:34 -07:00
Ben Stull c1745f0021 feat(simulator): X-ray frontend (dials, pool, brain/mood maps)
Per docs/superpowers/plans/2026-06-04-experience-simulator.md Task 5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:43:34 -07:00
Ben Stull cdf36c9b57 feat(simulator): FastAPI app with /api/select and /api/catalog/meta
Per docs/superpowers/plans/2026-06-04-experience-simulator.md Task 4.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:42:13 -07:00
Ben Stull aadfccf32d feat(simulator): deterministic synthetic fixture catalog
Per docs/superpowers/plans/2026-06-04-experience-simulator.md Task 3.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:41:35 -07:00
Ben Stull a260b68d2b build(simulator): add simulator package and sim optional-deps
Per docs/superpowers/plans/2026-06-04-experience-simulator.md Task 2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:41:05 -07:00
Ben Stull 98fb86840c feat(selection): expose ranked_candidates(); refactor select() onto it
Per docs/superpowers/plans/2026-06-04-experience-simulator.md Task 1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:40:38 -07:00
Ben Stull 7f2f585600 add sessions/0003/SESSION-0003.0-TRANSCRIPT-2026-06-04T07-57--2026-06-05T03-36.md + replace placeholder/variant SESSION-0003.0-TRANSCRIPT-2026-06-04T07-57--INPROGRESS.md 2026-06-05 03:37:25 -07:00
Ben Stull ddec45d39c docs(simulator): implementation plan for curator's X-ray simulator
Bite-sized TDD plan, 7 tasks: hef.selection.ranked_candidates() + select()
refactor; simulator package + deps; synthetic fixture catalog; FastAPI app
(/api/select, /api/catalog/meta); X-ray frontend; Docker/compose/make; user
guide + full-suite verification.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:36:25 -07:00
Ben Stull 9cb4fb62d8 docs(simulator): design spec + BDDs for curator's X-ray experience simulator
Discovery session 0003. Web-based, Docker-on-localhost simulator to feel the
selection model: real hef.selection wired to a synthetic fixture catalog, with
a full-transparency X-ray (ranked pool + distances + brain/mood grid maps) and
live model knobs (weights, pool size, approved-only).

- docs/superpowers/specs/2026-06-04-experience-simulator-design.md
- features/{selection_xray,model_knobs,fixture_catalog,simulator_service}.feature
- one additive hef.selection.ranked_candidates() change planned (single source of truth)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 03:36:25 -07:00
Ben Stull 0e5c3a1a0f claim human-experience-filter-art session 0004 (placeholder) + sessions.json entry 2026-06-05 03:36:01 -07:00
Ben Stull ee58c4cd78 claim human-experience-filter-art session 0003 (placeholder) + sessions.json entry 2026-06-04 07:57:27 -07:00
Ben Stull b7f19e01de add sessions/0002/SESSION-0002.0-TRANSCRIPT-2026-06-04T06-19--2026-06-04T07-34.md + replace placeholder/variant SESSION-0002.0-TRANSCRIPT-2026-06-04T06-19--INPROGRESS.md 2026-06-04 07:35:13 -07:00
benstull 593150b466 Merge pull request 'docs(roadmap): mark sub-project 2 done, sub-project 3 next' (#2) from roadmap-mark-subproject-2-done into main 2026-06-04 14:33:45 +00:00
Ben Stull 50ce6c9dfa docs(roadmap): mark sub-project 2 done, sub-project 3 next
Sub-project 2 (ingest & tagging / review tools) shipped via PR #1 this session.
Updates the status table and §2 detail, reconciles resolved decisions (first-ship
archives, media-root layout, ffmpeg-only opt-in dominant_color), and marks §3
(Pi player) as next.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 07:33:32 -07:00
benstull d7a2cbaa40 Merge pull request 'Sub-project 2: ingest & tagging / review tools' (#1) from sub-project-2-ingest-tagging-review into main 2026-06-04 14:16:28 +00:00
Ben Stull 1e2a4dd966 docs: user guide for ingest + review tools
Per sub-project-2 plan Task 14. Updates the scope banner (catalog core + tools
now built), adds an 'Ingesting & reviewing media' section (ffmpeg prereqs,
--media-root, first-ship archives, ingest_cli/review_cli usage, Freesound token
note, opt-in dominant_color), and reconciles the absolute-vs-relative file_path
note (spec §6.3).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:36:15 -07:00
Ben Stull deb26b2575 test: end-to-end ingest+review integration (+ opt-in ffprobe)
Per sub-project-2 plan Task 13 / spec §10 test 8. Hermetic e2e: fake fetcher ->
ingest_candidate -> proposed record; approve flips it; reload + validate_catalog;
select(approved_only=True) finds it. Opt-in real-ffprobe/ffmpeg tests generate a
lavfi clip and assert mode/duration/resolution + dominant color, skipped when the
binaries are absent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:35:17 -07:00
Ben Stull 376edd7819 feat: interactive review CLI
Per sub-project-2 plan Task 12 / spec §8.2. Walks proposed records (fields +
coords + rationale + best-effort ffmpeg preview), prompts accept/edit/skip/quit,
and persists each approval via save_catalog rewrite. I/O seams (input_fn/now_fn/
out) and --no-preview make the walk testable hermetically; decision logic lives
in the tested review core.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:34:34 -07:00
Ben Stull 3e07e86187 feat: review transition core (proposed -> approved)
Per sub-project-2 plan Task 11 / spec §8.1. proposed_records filter and approve()
return an approved copy via dataclasses.replace (no in-place mutation), with
optional coordinate/rationale override and an injected reviewed_at timestamp.
Pure, no I/O, no clock.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:33:27 -07:00
Ben Stull 1d7f821ab8 feat: ingest CLI entry point
Per sub-project-2 plan Task 10. argparse entry wiring named fetcher +
HeuristicProposer into ingest_search/ingest_candidate; --query/--resolve,
--limit, --catalog, --media-root (env HEF_MEDIA_ROOT), --dominant-color.
Unknown archive -> exit 2, deferred archive -> exit 3. Secrets env-only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:33:01 -07:00
Ben Stull cecc5a0f61 feat: LibriVox/NASA/Internet Archive fetchers (+ deferred stubs)
Per sub-project-2 plan Task 9 / spec §6.4. Three keyless first-ship fetchers
parse documented JSON APIs via an injected HttpClient; license/attribution go
through tools.licensing; NASA third-party + IA no-license cases are flagged in
notes for review. musopen/fma/freesound are explicit deferred stubs raising
NotImplementedError; freesound documents FREESOUND_API_TOKEN (secret, env-only).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:32:18 -07:00
Ben Stull 2db2b7ac16 feat: ingest pipeline (Candidate/Fetcher/ingest_candidate)
Per sub-project-2 plan Task 8 / spec §6. ingest_candidate dedupes, downloads,
mechanically tags, drafts coordinates, builds a proposed Record and appends it;
ingest_search loops over fetcher hits. All boundaries (download/prober/color_fn)
injectable, so the pipeline is fully hermetic.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:29:09 -07:00
Ben Stull 3d5c34491c feat: heuristic coordinate proposer (drafting)
Per sub-project-2 plan Task 7 / spec §7. HeuristicProposer seeds the brain plane
from archive priors and the mood plane from title/description keyword nudges,
clamps to 0..4, and emits a one-line rationale. Deterministic, no I/O, no ML
(honors design §11) — only a DRAFT a human reviews.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:27:37 -07:00
Ben Stull 222421e773 feat: per-archive license normalization
Per sub-project-2 plan Task 6 / spec §5.3. normalize_license maps CC URLs /
identifiers and public-domain markers to the LICENSES vocab, builds non-empty
attribution for cc_by/cc_by_nc, and rejects unmappable licenses at ingest.
librivox_license() helper returns public_domain.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:26:21 -07:00
Ben Stull d2a97823f5 feat: ffmpeg frame extraction + optional dominant_color
Per sub-project-2 plan Task 5 / spec §5.2. ffmpeg-only dominant color (no image
library), opt-in by design; extract_frame for review previews. Runners injectable
so the unit suite never shells out.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:25:11 -07:00
Ben Stull 542b5a5641 feat: mechanical mode/duration/resolution tagging
Per sub-project-2 plan Task 4 / spec §5.1. derive_tags(Probe) -> Tags with the
attached_pic cover-art guard so an art-bearing audio file stays mode=audio.
Duration falls back to the longest stream when format.duration is absent, and
rounds half-up so 12.5s -> 13s (Python's round() would give 12 via banker's
rounding) to match the spec's stated behavior.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:24:33 -07:00
Ben Stull 19104f94cd feat: ffprobe wrapper (tools.probe)
Per sub-project-2 plan Task 3 / spec §5.1. Parses ffprobe JSON into a Probe
(streams + format); subprocess runner injectable so tests never shell out.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:23:24 -07:00
Ben Stull b6fb635ef4 feat: catalog-level validate_catalog + index_by_id (unique ids)
Per sub-project-2 plan Task 2 / spec §3. Purely additive to hef.catalog;
no existing symbol changes. validate_catalog runs per-record validate() then
asserts id uniqueness; index_by_id gives by-id lookup the player also wants.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:23:01 -07:00
Ben Stull db4f036729 chore: scaffold tools/ package + stdlib http client
Per sub-project-2 plan Task 1. Adds tools/ to setuptools packages,
gitignores media/, and a minimal injectable urllib HTTP client.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:22:30 -07:00
Ben Stull 6dd6afde19 claim human-experience-filter-art session 0002 (placeholder) + sessions.json entry 2026-06-04 06:19:23 -07:00
Ben Stull 1b8faf9142 add sessions/0001/SESSION-0001.0-TRANSCRIPT-2026-06-04T05-36--2026-06-04T06-15.md + replace placeholder/variant SESSION-0001.0-TRANSCRIPT-2026-06-04T05-36--INPROGRESS.md 2026-06-04 06:16:43 -07:00
Ben Stull dd00d8bff5 Merge: pano design revision + sub-project 2 implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:14:29 -07:00
Ben Stull 6d6cbb5cad plan: sub-project 2 — ingest & tagging / review tools
Task-by-task TDD plan implementing the approved sub-project-2 spec: tools/
scaffolding, the additive hef.catalog change (validate_catalog/index_by_id),
ffprobe/ffmpeg mechanical tagging with cover-art guard, per-archive license
normalization, heuristic coordinate drafting, the ingest pipeline + first-ship
fetchers (LibriVox/NASA/Internet Archive, others deferred stubs), the review
transition core + interactive CLI, and hermetic + opt-in integration tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:14:28 -07:00
Ben Stull dd02c2c36a docs: revise design + roadmap for single pano projector
Operator decision (2026-06-04): single panoramic projector spanning the
three walls showing the real selected video (nature-video focus), replacing
four projectors + a procedural side-wall renderer.

- Design spec: revision banner; updated §1, §6 (one pano projector), §7
  (procedural side walls REMOVED), §10 layout, §12 open questions.
- ROADMAP: sub-project 5 marked Dropped; diagram + dependency order updated;
  §3 player drives one pano output; cross-cutting decisions reconciled.
- Sub-project-2 spec: follow-up note updated to past tense (design spec done).

dominant_color's only consumer was the side walls, so it stays optional/opt-in
in the sub-project-2 tooling (already specced).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:12:09 -07:00
Ben Stull b8c406d517 update sessions/0001/SESSION-0001.0-TRANSCRIPT-2026-06-04T05-36--INPROGRESS.md 2026-06-04 06:07:44 -07:00
Ben Stull b5f5ee6663 docs: link the sub-project 2 spec from ROADMAP
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:07:32 -07:00
Ben Stull 3544092e5e Merge spec: sub-project 2 — ingest & tagging / review tools
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:06:50 -07:00
Ben Stull 4c1ec6e02e spec: fold in operator approval + pano-projector design change
Operator approved the spec and confirmed first-ship archives
(LibriVox + NASA + IA). Folds in the 2026-06-04 design change (single
panoramic projector across all three walls, nature-video content):
demotes dominant_color to optional/opt-in (its only consumer was the
procedural side walls), ffmpeg-only when computed, never an image lib.
Flags the design-spec/ROADMAP follow-up as out of scope here.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:06:45 -07:00
Ben Stull f80ec65553 spec: sub-project 2 — ingest & tagging / review tools
Develops the draft-then-review pipeline spec (design §5/§8, ROADMAP §2):
per-archive fetchers, mechanical tagging (ffprobe mode/duration/resolution,
ffmpeg dominant_color, origin license/attribution), heuristic coordinate
drafting (review_status=proposed + one-line rationale), and the review CLI
(walk proposed -> approve + reviewed_at).

Builds on hef.catalog additively: schema unchanged (Record defaults already
match the proposed shape); the only required core addition is a catalog-level
validate_catalog (unique-id integrity), with optional index_by_id.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 05:45:37 -07:00
Ben Stull 5e4b79486a chore: import wiggleverse org context in CLAUDE.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 05:38:44 -07:00
Ben Stull 54fde0b7a4 update sessions/0001/SESSION-0001.0-TRANSCRIPT-2026-06-04T05-36--INPROGRESS.md 2026-06-04 05:38:36 -07:00
Ben Stull 18f0360476 claim human-experience-filter-art session 0001 (placeholder) + sessions.json entry 2026-06-04 05:37:59 -07:00
Ben Stull 4ddc113375 chore: register app.json for session protocol
Registers the repo as a Wiggleverse app so its build sessions get tracked
transcripts. One Name = main repo name (human-experience-filter-art);
sessions live self-contained in this repo under sessions/, matching the
benstull-host convention (benstull/docs).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 05:37:41 -07:00