Skip to content

Release 1.2.0: "Changed by the Buds", serial numbers, the worn line, two tab moves (ai-sessions/0082) - #21

Merged
tedsluis merged 6 commits into
mainfrom
feature/1.2.0
Oct 9, 2026
Merged

tedsluis merged 6 commits into
mainfrom
feature/1.2.0

Conversation

@tedsluis

@tedsluis tedsluis commented Oct 9, 2026

Copy link
Copy Markdown
Owner

Summary

Prepared release 1.2.0 (versionCode 10200) — ai-sessions/0082, maintainer decisions in chat 2026-10-09. Not tagged, not built with release.sh, not published: the verdict waits for the hardware run CAP-072.

What the app user sees differently

  • Noise control (i): "Changed by the Buds at HH:MM:SS (a press-and-hold on a bud, or the Buds' own change)." when a Notify the app did not provoke changes the mode. Nothing sent.
  • Gear → Info: the component serial numbers (Case / Right bud / Left bud) from one GetHardwareInfo per connection, sent last of the Connect-time requests, never retried, not gated by Safe Mode (DECISIONS.md ADR-058, accepted). Never logged.
  • Battery card: a "Worn" line — "Probably worn (checked …)", "Not worn (checked …)", "Both buds in the case", "Worn: unknown — in-ear detection is off" — derived from the Settable byte, the in-ear detection setting and the charging flags (ADR-059, accepted). No new wire traffic; never names a bud.
  • Case sounds moved from Controls to gear → Settings; Conversation detection moved from Sound to Controls. Same bytes as before.
  • Volume-level notifications: studied only (the official app decides on the phone: 7-day sum of Dosimeter daily doses, 67 %, once per 7 days; the Buds push nothing). Draft ADR-060 stands as a labelled Proposed entry (not accepted, nothing built) — a 1.3.0 candidate behind WELL-002.

Evidence and tests

  • Fixtures are real capture bytes: CAP-045 609/612/1583/1755/1818/1849; CAP-036 1415/1423 and CAP-024 801/832 (serials redacted to first 4 + last 2, CRC re-sealed); CAP-065 5465/6334, CAP-064 10394, CAP-062 3760/4845.
  • Clean gate green: :data 1644, :domain 44, :hardware 64, :ui 84 tests; the same two pre-existing lint items; 0 compiler warnings. Mutations M1–M10 all killed (RESULT §H).
  • Compliance: no manifest, version-catalog or dependency change; exactly one new transport.send (the ADR-058 read); AGPL headers on all new files; no serial or MAC in any log line.

Hardware run: captures/CAP-072-…-Group_BH/CAP-072-EVENT-NOTES.md (planned; registered; INEAR-006, WELL-002 new; APP_TESTPLAN.md §V).

One deviation, flagged: the prompt kept an unaccepted ADR out of DECISIONS.md; lint_docs requires a heading for every cited ADR-NNN, so ADR-060 is there with status Proposed — not accepted, nothing built (the maintainer chose to keep it so in chat).

Test plan

  • ./gradlew --offline --max-workers=2 clean assembleDebug testDebugUnitTest test lint → exit 0
  • python3 scripts/ensure_footers.py; PYTHONDONTWRITEBYTECODE=1 python3 scripts/lint_docs.py → exit 0
  • CAP-072 on the phone (release verdict by the analysing session)

🤖 Generated with Claude Code

tedsluis and others added 6 commits October 9, 2026 08:02
…ne, two tab moves

Why: the maintainer asked for release 1.2.0 (ai-sessions/0082, chat 2026-10-09).

- ANC (i): "Changed by the Buds at HH:MM:SS (a press-and-hold on a bud, or the
  Buds' own change)." when a Notify the app did not provoke changes the shown
  mode (AncModeCause: READ / SET_BY_APP / CHANGED_BY_BUDS; reset at Connect).
  Fixtures: CAP-045 609/612/1583/1755/1818/1849.
- Info tab: the component serial numbers from one GetHardwareInfo per Connect,
  sent last of the Connect-time requests, never retried, not gated by Safe Mode
  (DECISIONS.md ADR-058). Field 7 read by position: Case, Right bud, Left bud.
  Fixtures: CAP-036 1415/1423, CAP-024 801/832 (serials redacted, CRC
  re-sealed). The serials are never logged; the log line carries a count.
- Battery card: a "Worn" line derived from the Settable byte, the in-ear
  detection setting and the charging flags (ADR-059) — no new wire traffic;
  "probably worn", never a bud named. Fixtures: CAP-065 5465/6334, CAP-064
  10394, CAP-062 3760/4845.
- Case sounds moved from Controls to gear → Settings; Conversation detection
  moved from Sound to Controls. The write paths are unchanged (the
  ai-sessions/0076 fixtures still verify the bytes).

One commit for the five items: they share BudsRepository(Impl), the UI state
and MainActivity's wiring, and SettingsMenu.kt carries both the serial lines
and the Case sounds card — splitting the hunks would leave intermediate
commits that do not compile. Tests: :data +17, :domain +7, :ui +14; mutation
checks M1–M10 killed (ai-sessions/0082 RESULT §H).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…-position attribution

Why: ai-sessions/0082 item 4 was a design study, not a build — the findings
belong in REVERSE_ENGINEERING.md with file:line (HearingWellnessNotificationWorker,
gau/hwy/gag/fsm, the 67 % / 7-day constants, no Buds-side push in 85 logs), and
ADR-058 rests on how the official app labels GetHardwareInfo field 7
(gaa.java:45–96, fwg.java:182–215).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… after 1.2.0

Why: the documents follow the code (PROJECT_RULES.md). ADR-058 (one
GetHardwareInfo per Connect) and ADR-059 (the "probably worn" indicator) were
accepted by the maintainer in chat 2026-10-09; the serial-position attribution
in PROTOCOL.md §6 is promoted with that approval. ADR-060 (volume-level
notifications) stands as a labelled Proposed draft — not accepted, nothing
built — because scripts/lint_docs.py requires a heading for every cited ADR.
ARCHITECTURE §2.4/§3.1/§5a, PROJECT scope, README status, the CHANGELOG
[1.2.0] - not yet released block with its known issues, TODO (the CAP-069 §12
item 8 line done; the 1.3.0 candidate and WELL-002 added), the registry rows.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…002, APP_TESTPLAN §V

Why: 1.2.0 is released only after a hardware run (RELEASING.md). The skeleton
in CAP-071's layout takes the three new things to see, the two moved switches
byte for byte, ADR-059's six readings against the ears on film (INEAR-006,
incl. CAP-064's ≈ 28 s case), lead L-1 (INEAR-005), and the open film items
of TODO.md §2 (C12, S12, T11 with three dumps, H5, S6). Registered planned.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Why: RELEASING.md §4 steps 1–2, chosen at the ai-sessions/0082 checkpoint.
No tag, no release.sh, no publication — the verdict waits for CAP-072.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Why: AI_SESSION_LOG_PROCEDURE.md — the prompt and the result of the 1.2.0
session (evidence per item with frames and commands, the checkpoint answers
verbatim, the item-4 study with the draft ADR-060, the gate, mutation and
compliance tables, the CAP-072 skeleton as a table, deferred items, commits).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@tedsluis
tedsluis merged commit ec6d163 into main Oct 9, 2026
2 checks passed
@tedsluis
tedsluis deleted the feature/1.2.0 branch October 10, 2026 08:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant