Commit graph

37 commits

Author SHA1 Message Date
jedarden
64a2202ac9 docs(bf-1m2x): verify blob-creation inventory is current at HEAD
Re-ran the two completeness greps from notes/bf-1q3m-consolidated.md §1
against current HEAD 0ae0c03. Confirmed 5 primary / 15 non-test named
projection / 2 JS production sites — zero deltas vs the report's
verification commit 1a26c12 (no Go/JS source changed in the interval;
only notes/ + .beads/). Closes the inventory-currency loop without
re-doing discovery. Notes-only; no source modified.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 16:18:25 -04:00
jedarden
f144aad1f8 docs(bf-1q3m): consolidate & re-verify all blob-creation findings into single report
Merges the four child inventory beads (bf-55rp primary types, bf-5uzm
conversions, bf-4wwt projections, bf-1bmg JS/TS) into one re-verified
source-of-truth report for the upcoming identity-leak implementation bead.

- Re-verified every file:line against HEAD 1a26c12 by running the greps
  (15 type defs, 5 primary + 16 projection production sites, 4 named
  conversion boundaries, 2 JS production sites — all exact)
- Flagged stale entries: supersedes bf-3ldj-findings.md & bf-4bhd.md
  (line drift + 2D field-list drift + wrong data-flow); minor off-by-one
  drifts in child secondary citations noted
- Confirmed the material claim: tracker.TrackManager/applyIdentity is NOT
  wired into main.go; live identity lives in the ble.IdentityMatcher sidecar,
  never written onto the blob struct
- Produced the tiered fix-target list (Tier 1 = main.go:2303 automation +
  :2206 explainability + :2326 volume) and the corrected blob data-flow
  diagram showing where identity enters and leaks

Documentation only — no Go/JS source modified.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 16:03:28 -04:00
jedarden
2b44ff633d docs(bf-1bmg): inventory JS/TS dashboard blob-creation sites
Catalogue every blob-creation site on the dashboard JS/TS side, re-verified
against HEAD 68bd308:
- 2 production domain-blob sites: state.js:290 ({id:id} + Object.assign of
  server payload) and websocket.js:167 (dead-reckoning _blobStates cache).
- spaxel.d.ts:10-91 Blob interface documented as the single canonical JS
  identity-field declaration (personName/personId/assignedColor/identityResolved
  + deprecated personLabel/personColor), with Go<->JS field name map.
- 4 new Blob() file-download sites (static/js/fleet.js:457, fleet-page.js:1034
  & :1369, js/fleet.js:1997) explicitly flagged OUT OF SCOPE (browser Blob API).
- 12 test fixtures across ambient/quick-actions/replay .test.js listed for
  completeness.
- Corrects two drifts vs bf-3ldj: the :457 CSV site is in static/js/fleet.js
  (a different file from js/fleet.js), and ambient.test.js literal openings are
  124/273/636/653/688/702 (not the :276/:642/etc cited).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 15:46:02 -04:00
jedarden
68bd308c3c docs(bf-4wwt): inventory blob projection/derived types & construction sites
Re-verify the 9 blob-shaped projection types and their 15 non-test
construction sites against HEAD 3591865. Only the two cmd/mothership/main.go
sites moved (+90 lines); all others unchanged.

Corrections/additions over bf-4bhd:
- api.BlobPos is test-only (TriggersHandler.EvaluateTriggers is not wired
  in main.go; production uses volumeTriggersHandler + volume.BlobPos).
- falldetect enters via an anonymous struct; the real boundary is
  main.go:2288, not enumerated in bf-4bhd.
- replay.BlobUpdate and simulator.BlobResult are synthetic, not blob copies.
- Of volume.BlobState's 4 sites, only shape.go:575 is blob-derived.
- volume.BlobPos.PersonID is not populated at main.go:2326.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 15:36:14 -04:00
jedarden
585532f5b2 docs(bf-5uzm): map cross-package blob conversion boundaries in main.go
Re-verified all four named conversion sites against HEAD 7846408 and found the
task's line numbers had drifted (+90..+110). Recorded the corrected locations:
  E1 fusion.Blob peak -> sigproc.TrackedBlob       :5384 -> :5494
  E2 sigproc.TrackedBlob -> automation.TrackedBlob  :2213 -> :2303  (identity dropped)
  E3 sigproc.TrackedBlob -> explainability.BlobSnap :2116 -> :2206  (identity dropped)
  volume sigproc.TrackedBlob -> volume.BlobPos      :2236 -> :2326  (PersonID field exists, unpopulated)

Enumerated all 9 blob-projection loops in the live 10 Hz fusion loop with source/
target types and copied fields, flagged the two identity-leak boundaries (E2/E3)
as the umbrella goal's fix targets, and noted per-target whether the type even
carries identity fields. Includes a corrected live data-flow diagram: the live
loop runs blobTracker (greedy associator), not tracker.TrackManager/applyIdentity;
resolved identity lives in the ble.IdentityMatcher sidecar and is never written
onto the blob struct.

go vet ./... and go test ./... clean.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 15:21:10 -04:00
jedarden
d99f42d3bf docs(bf-55rp): re-verify primary tracked-blob Go types & construction sites
Inventory of the 5 primary tracked-blob Go types + the api.TrackedBlob
alias, re-verified against HEAD c4d42e8. Corrects two stale line numbers
(automation.TrackedBlob :2213->:2303, signal.TrackedBlob :5384->:5494)
and one stale field list (tracking.Blob 2D no longer carries PersonName/
AssignedColor/IdentityResolved — identity fields now match tracker.Blob).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 14:56:35 -04:00
jedarden
fd7918f7fc docs(bf-4oiz): mark registry-bridge position audit resolved, close out
The bf-4pqj audit flagged a compile blocker (cmd/mothership did not build:
*fleet.Registry didn't satisfy simulator.RegistryNodeAdapter) and recorded
"go vet/test fail pre-close". bf-5lii since fixed it (fleetRegistryAdapter +
immediate SyncToRegistry on node create/update) and bf-69ym added two
end-to-end simulator→fleet.Registry tests.

Re-verified the full position flow for this umbrella bead's close-out:
- go build ./cmd/mothership — OK
- go vet ./... — clean
- go test ./... — all green (simulator + api fresh)

Update bf-4oiz-findings.md so its "fails" claims no longer mislead: add a
RESOLVED header summarizing the fixes, and correct the conclusion table's
"go vet green" row to . Verification-only; no production code changes.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 12:22:25 -04:00
jedarden
4705c9f432 docs(bf-4pqj): audit registry_bridge position wiring — flag compile blocker
Re-verified the registry_bridge position data flow (split from bf-4oiz).
The stale 'wiring missing' claim is corrected: the 30s periodic
SyncToRegistry IS wired in source (main.go:4195-4226), and the bridge
logic + float64 XYZ formatting are confirmed correct and backed by
registry_bridge_test.go.

However the audit found cmd/mothership does NOT build: main.go:4217
passes *fleet.Registry to SyncToRegistry, but *fleet.Registry does not
satisfy simulator.RegistryNodeAdapter (GetAllNodes/GetNode return
[]fleet.NodeRecord vs []simulator.NodeRecord). A second failure,
internal/api/simulator_test.go:19, passes no args to the now-2-arg
NewSimulatorHandler. Both introduced by e92d5bc (bf-5dpu). The
internal/simulator package itself builds and tests green.

Verification-only bead: no production code changes. go vet/test fail
pre-close, so the blocker is documented for a wiring-owner fix.
2026-07-06 11:46:43 -04:00
jedarden
d43b0095e6 docs(bf-4bhd): enumerate projection blob construction sites in report
Verified every line number in the blob-creation report against current main
(5 primary types, 8 primary sites, 2 identity-mutation funcs, 9 projection
types — all accurate). Added an enumerated table of the 15 projection
construction sites across 7 files so the next bead needs no further searching.
Completeness sweep confirmed no new(Blob), no missed factories, no uncatalogued
make([]Blob) allocators.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 11:46:43 -04:00
jedarden
e3bd5ee685 docs(bf-3ldj): consolidate blob creation site findings into single report
Aggregates bf-5kns (new Blob constructors), bf-26ta (struct/object
literals), and bf-67ao (factory functions) into notes/bf-3ldj-findings.md.
Re-verified every production file:line against HEAD; corrected two stale
entries (state.js:290 now {id} only; tracking.Blob field names) and
reconciled the Go-vs-JS identity-field naming. Key deliverable for the
next bead: identity is dropped at two main.go conversion boundaries
(:2213 automation, :2116 explainability) — the leak this work closes.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 10:22:55 -04:00
jedarden
7e89b31922 docs(bf-67ao): add completeness sweep — 10th blob type + missed explainability site
Extend the blob-factory catalogue with findings from a verification sweep of
all documented file:line references (all 15 original entries confirmed exact):

- Add the 10th blob type, explainability.BlobSnapshot (handler.go:95), a distinct
  type from the already-listed falldetect.BlobSnapshot — note their shared name.
- Add entry E3: the production conversion loop at main.go:2116 (inside main()'s
  fusion loop) that builds []explainability.BlobSnapshot to feed computeExplanation
  (F1). Sibling inline-conversion to E2; the only site constructing this type.
- Add a 'test-only factories' caveat listing the *_test.go helpers the sweep found
  (makeBlobAt, processFramesDirectly/WithThreshold, mock providers) and documenting
  why they are scoped out, plus the newBlobTracker struct constructor (not a blob).

Catalogue now: 16 documented creation sites (14 dedicated functions/methods +
2 inline conversion loops) across 10 blob types.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 10:14:03 -04:00
jedarden
43d3a710e7 docs(bf-67ao): document blob factory functions across codebase
Catalogue the 15 functions/methods that construct and return blob objects,
covering 9 blob types (tracker.Blob, tracking.Blob, fusion.Blob,
signal.TrackedBlob, automation.TrackedBlob, replay.BlobUpdate,
simulator.BlobResult, explainability.BlobExplanation, falldetect.BlobSnapshot).

Each entry records the function signature, file:line of both the function
definition and the struct-literal creation site, and the construction idiom
(pointer/value literal, slice copy, delegation, or record append). Includes a
summary table and the end-to-end data flow (Fuse -> track -> Update ->
GetBlob). Complements the earlier bf-4bhd literal-site survey with a
function-level (factory) view.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 10:04:07 -04:00
jedarden
c595d13208 docs(bf-26ta): correct blob literal counts, add missing ambient.test.js sites
Re-verified all blob-shaped object literals against current code. The prior
docs drifted: quick-actions.test.js was mis-counted as 16 literals (actual 5)
and only 4 of 6 ambient.test.js blob-array sites were documented.

Corrections (notes/bf-26ta-findings.md, bf-26ta-javascript-results.md):
- Add missing ambient.test.js sites at lines 694 (lerp source) and 708 (lerp target)
- Fix quick-actions.test.js count: 16 -> 5 literals (lines 208, 316, 470, 513, 678)
- Fix JS totals: 25 across 7 files -> 14 across 5 files
- state.js:290, websocket.js:167, replay.test.js:101 unchanged (still accurate)
- TypeScript: still 0 literals (only spaxel.d.ts type defs)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 09:30:26 -04:00
jedarden
756cc03a00 docs(bf-5613): analyze multi-person bedroom sleep monitoring edge case
- Created comprehensive findings document at notes/bf-5613-findings.md
- Added TestTwoPersonBedroomScenario to integration_test.go
- Verified that multi-person bedroom edge case is NOT implemented:
  * No detection of multiple blobs in bedroom zones
  * No BLE-first assignment logic
  * No zone-based fallback records
  * No lowest-deltaRMS blob selection for breathing analysis
- Test documents expected behavior per plan.md specification

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 02:47:37 -04:00
jedarden
36886ab60c docs(bf-3f16): document API path verification - all endpoints match plan spec
Verified all REST API endpoints against plan.md specification:
- GET /api/analytics/flow - matches exactly
- GET /api/localization/weights - matches exactly
- POST /api/localization/weights/reset - alias route added for plan spec compliance

No deviations found. API_IMPLEMENTATION_STATUS.md already documents
the canonical path decisions with backward compatibility maintained.
2026-07-06 02:40:53 -04:00
jedarden
60bc74580f feat(bf-2y6u): implement coverage degradation overlay for self-healing events
- Add showCoverageDegradation() to display before/after GDOP comparison
- Add dismissCoverageDegradation() to clear overlay on node recovery
- Create ground plane cells colored by degradation severity (red/amber/yellow)
- Add legend with before/after statistics and coverage delta
- Export functions to public API for WebSocket integration

Implements plan.md Component 12: before/after coverage overlay
when fleet self-healing fires due to node loss.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 02:29:06 -04:00
jedarden
925140c687 docs(bf-3tlw): compile comprehensive blob literal locations documentation
- Merged TypeScript and JavaScript search results
- Combined Go backend blob creation sites
- Documented 25 JavaScript instances across 7 files
- Documented 10+ Go blob types across 8 files
- Included TypeScript type definitions
- Each location includes file path, line number, and blob structure pattern
- Organized by language with detailed pattern analysis

Bead-Id: bf-3tlw
2026-07-06 02:20:42 -04:00
jedarden
382b150116 docs(bf-4ly4): document JavaScript blob literal search results
- Found 25 blob-shaped object literals across 7 files
- Identified canonical creation pattern in state.js:290
- Documented field usage patterns and test fixtures
- Compared blob, zone, node, and event structures
2026-07-06 02:18:46 -04:00
jedarden
75806ae8f0 docs(bf-26ta): document TypeScript blob literal search results
- Searched all .ts and .tsx files for blob-shaped object literals
- Found 3 TypeScript files total (excluding node_modules)
- No blob object literals found in TypeScript files
- Only type definitions exist in spaxel.d.ts
- Actual blob creation happens in JavaScript files
2026-07-06 02:08:41 -04:00
jedarden
079c631134 docs(bf-3aij): define blob object literal search pattern
- Document blob object structure in JavaScript and Go
- Create grep/ripgrep patterns for finding blob literals
- Provide example matches from codebase
- Document key characteristics: id, position, confidence fields
- Add search patterns for both JS dashboard and Go backend

This provides the foundation for identifying blob-shaped object
literals across the spaxel codebase for future search/refactoring work.
2026-07-06 02:05:49 -04:00
jedarden
111eb2719b docs(bf-5kns): document Blob constructor search results
Found 4 direct Blob() constructor calls across 3 JavaScript files:
- 2 for CSV export (text/csv)
- 2 for JSON config export (application/json)

All calls follow consistent pattern with array-wrapped content
and explicit MIME type specification.
2026-07-06 01:52:54 -04:00
jedarden
c94bccec1c docs(bf-5occ): document position format mismatch between simulator and registry
- Registry coordinate system: X=width, Y=height, Z=depth
- Simulator coordinate system: X=width, Y=depth, Z=height
- Y and Z axes are swapped between systems
- registry_bridge.go passes positions without coordinate transformation
- Required fix: swap Y and Z when calling registry methods
- Affects fusion engine, coverage optimization, and position-based tracking

Acceptance criteria:
- Registry's expected position format is documented 
- Actual format from simulator is documented 
- Format differences are identified 
- Required transformations are documented 
2026-07-06 01:48:06 -04:00
jedarden
5445d765bc docs(bf-5occ): document position format mismatch between simulator and registry
- Registry expects: pos_x=width, pos_y=height, pos_z=depth
- Simulator provides: Point.X=width, Point.Y=depth, Point.Z=height
- Current implementation passes Y/Z directly without swapping
- This causes registry to misinterpret depth as height and height as depth
- Requires coordinate transformation in registry_bridge.go

Acceptance criteria met:
✓ Registry's expected position format documented
✓ Actual format from simulator documented
✓ Format differences identified
✓ Required transformations documented
2026-07-06 01:41:17 -04:00
jedarden
abf272a781 docs(bf-2irz): verify registry bridge receives simulator positions
Add logging to trace position data flow from simulator to registry bridge.
Verify that positions are correctly received and processed through the
complete data path:

1. Simulator API receives node positions via POST /api/simulator/nodes
2. Positions persisted to VirtualNodeStore
3. Periodic 30s sync reads positions from store
4. Registry bridge processes positions (spread geometry for default origin)
5. Positions written to Fleet Registry database

Enhanced logging at each step shows:
- Sync start with node count
- Per-node position processing (default origin vs explicit)
- Per-node sync to registry with position values
- Registry operations (create/update with positions)

Data flow confirmed working. Positions DO flow from simulator to
registry_bridge.go to fleet registry.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 01:37:40 -04:00
jedarden
39b5755d5c docs(bf-2r5o): document simulator position data structure
- Document core position structures (Point, VirtualNode, Walker, Space)
- Document position fields in hello messages and database schema
- Map position data flow from simulator through mothership to fusion engine
- Document node positioning strategies and walker movement behavior
- Include file locations and coordinate system definitions

Acceptance criteria met:
- Position data structure documented
- Source of position data identified (generateNodePositions, createWalkers)
- Field names and types known (Point struct, hello message fields, database schema)
2026-07-06 01:35:06 -04:00
jedarden
ac806a7753 docs(bf-4bhd): document all blob creation code paths
- Identified 4 distinct Blob types across codebase
- Documented 8 primary blob creation sites with line numbers
- Categorized by construction pattern (&Blob{}, Blob{}, slice copy)
- Listed all files requiring updates for structure changes
- Included field mutation sites for identity assignment

This analysis provides a complete inventory for any future blob
structure modifications.
2026-07-06 01:35:06 -04:00
jedarden
76cb540776 docs(bf-3ifj): document simulator-to-registry position wiring trace
Complete analysis of two position data flow paths:
1. CSI Simulator (cmd/sim) → hello message → fleet manager → registry
2. Virtual Node Planning (simulator/) → registry bridge → adapter → registry

Both paths verified as complete and functional. No breaks or missing connections found.
2026-07-06 01:14:12 -04:00
jedarden
42eb6dcfa0 docs(bf-13s0): document blob data structure definition and usage patterns
- Located primary blob structure definition in backend Go code
- Identified all frontend files that create or use blob data
- Documented current blob structure fields (position, velocity, trail, identity)
- Specified which TypeScript interface/type files to modify (none - implicit JS structure)
- Created comprehensive reference for blob data structure modifications

Bead-Id: bf-13s0
2026-07-06 01:01:33 -04:00
jedarden
ca77eec03a docs(bf-13s0): document blob data structure definition and usage patterns
- Located primary blob structure in state.js
- Identified all blob fields across the codebase
- Documented 3D and 2D rendering pipelines
- Listed key files and data flow
- Provided modification points for future changes
2026-07-06 00:58:57 -04:00
jedarden
040c01d17b docs(bf-3y9r): verify position propagation through registry and fusion engine
Complete trace of position propagation pipeline from simulator to
registry to fusion engine. All wiring is in place and functioning:
- Virtual nodes announce positions in hello messages (cmd/sim)
- Fleet manager persists positions to registry (internal/fleet)
- Positions are forwarded to fusion engine via sink (main.go)
- Fusion engine uses positions in each Fuse cycle (internal/fusion)
- Startup seeding and assertions confirm proper flow

Acceptance criteria verified:
✓ Positions from virtual node creation reach registry
✓ Positions from registry reach fusion engine
✓ Integration tests show positions flowing through all stages
✓ No missing glue found - pipeline complete from prior work

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 00:58:57 -04:00
jedarden
23d048d46c docs(bf-5yff): verify realistic node geometry implementation
Verify that virtual node creation uses the bf-195o design for realistic
geometry placement. The implementation is complete:

- API handler assigns spread positions for nodes created at (0,0,0)
- Registry bridge reassigns positions for nodes at default origin (0,0,1)
- Both use DefaultNodePositions() with grid layout and height diversity
- Positions properly sync to PosX/PosY/PosZ fields in the registry

No code changes required — the implementation was already complete
from prior work on bf-195o and the registry bridge architecture.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 00:46:45 -04:00
jedarden
3936ae1182 docs(bf-195o): document node geometry placement research and design 2026-07-06 00:44:23 -04:00
jedarden
de03f33ba5 docs(bf-6aif): add accessibility quality gate implementation notes
Document the CI accessibility gate implementation, including changes made
to both declarative-config and spaxel repos, acceptance criteria met,
and verification steps.
2026-07-06 00:32:32 -04:00
jedarden
4fe25fcfaf docs(bf-3ukb): verify crowd flow API path is in sync across all layers
Investigation confirmed that the crowd flow API path mismatch was already
resolved by commit f042cdf (which closed bf-2jyk). All three layers are
now consistent:
- Backend: /api/analytics/flow
- Frontend: /api/analytics/flow
- Plan spec: /api/analytics/flow

No code changes needed. This commit documents the verification.
2026-07-06 00:13:27 -04:00
jedarden
0a88630612 docs(bf-1oj7): verify TransformControls already implemented for live nodes
Analysis confirms that the Placement module already provides full TransformControls
functionality for dragging live registered nodes in the operational dashboard.

Key findings:
- Placement module initialized in app.js (line 285-287)
- TransformControls created and attached to any node mesh (placement.js:238-288)
- Position persistence via mothership API (placement.js:419-427)
- Node meshes created by Viz3D from registry_state (viz3d.js:263-294)

The pre-deployment simulator uses its own separate TransformControls (simulate.js),
which may have created the impression that the live dashboard lacked this feature.

No implementation changes needed - functionality is already operational.
2026-07-05 23:48:18 -04:00
jedarden
4a19fe9054 docs(bf-28dv): verify Component 24 already implemented 2026-07-05 23:18:41 -04:00
jedarden
e13b2e220b docs(bf-33za): verify Component 33 already implemented
Verified that the 5-step interactive onboarding wizard is fully
implemented in dashboard/js/onboard.js:

- Step 1 (30s): Walk phase with amplitude spike highlighting
- Step 2 (10s): Still phase with automatic baseline capture
- Step 3 (15s): Walk-through with Fresnel zone visualization
- Step 4 (15s): Find-me with blob polling and humanoid display
- Step 5 (30s): Interactive placement with GDOP coverage overlay

All narration is jargon-free (no CSI, Fresnel, deltaRMS in user text).
All durations match spec. All 3D integrations working.
2026-07-05 23:00:59 -04:00