Skip to content

[ai][docs] devlog register format and PR numbers; 0.5.2 backlog cleanup - #677

Merged
ddol merged 4 commits into
mainfrom
dd/docs/backlog-cleanup-104
Oct 5, 2026
Merged

ddol merged 4 commits into
mainfrom
dd/docs/backlog-cleanup-104

Conversation

@ddol

@ddol ddol commented Oct 5, 2026

Copy link
Copy Markdown
Member

Purpose

The devlog had drifted from a register into prose: hard-wrapped bullets, several headings for one date, date ranges, and most bullets without the PR that delivered them. The 0.5.2.0 and 0.5.2.1 backlog items also predated the work that has since landed and the October near-edge campaign's decision to keep B0. Docs only: no code, schema or behaviour changes.

Changes

Three commits, reviewable separately.

1. Devlog gap-fill, September 25 to October 5

2. Devlog register rules, applied throughout

  • .github/STYLE.md gains "Logs and registers": one physical line per bullet, one heading per UTC date with no ranges, and a PR number on every bullet whose work landed through a PR. The devlog's header and the devlog-update skill carry the same rules; the skill's verify step now checks for duplicate dates, ranges, wrapped bullets and missing numbers.
  • 57 wrapped bullets (147 continuation lines) are joined onto one line each, text unchanged.
  • 10 dates with two to five headings are merged into one; the six range headings are split by their PRs' merge dates. 237 entries become 219, strictly newest first.
  • 900 bullets gain PR numbers, matched against each PR's commits and changed files; every uncertain match was checked by hand. 1,250 of 1,309 bullets now carry a number. The 44 without one are direct pushes from before PRs (March to June 2025), the September 2026 field captures, two pieces of work that never reached main, and two with no matching PR. The 15 tagged bullets are unmerged branch work.
  • Older bullets keep their dates even where the PR merged a day or so later: the devlog records when work was done, and moving hundreds of entries would rewrite history.

3. Backlog and plans: what 0.5.2.0 and 0.5.2.1 delivered

Checklist

  • Uses British English spelling/wording where applicable.
  • Design is confirmed and aligns with DESIGN.md. (Not applicable: documentation only.)
  • Any maths/derived values are valid and up to date. (Figures quoted from the campaign report and merged PRs.)
  • Version has been bumped where required. (Not required: documentation only.)
  • Documentation is up to date.
  • README.md is up to date. (Not affected.)
  • docs/DEVLOG.md is up to date.

Checks run locally: prettier 3.9.9, relative links, backtick paths, British spelling, header metadata, plan canonical links (0 gate violations, down from 3), and make check-no-results.

🤖 Generated with Claude Code

ddol and others added 3 commits October 4, 2026 22:02
Add entries for the PRs merged since September 25 that the devlog did not
record: the survey rename and asset rebuild (#664, #665), the October 4
merges (#656, #666, #670, #671, #673, #674, #631 landing), the vocabulary
and survey export plans (#630), the prettier CI check (#639), S2.4's
estimate columns (#634), the TrueNAS runbook follow-on (#620), the
facet experiment plan (#657), the annotation save plan (#660), the
Lombard-Laguna plan (#675) and the dependency bumps.

Move the #622, #624, #626 and #627 bullets from September 27 to
September 28 and date #672's entry October 5, their UTC merge dates.
Remove the branch tags of work that has since merged (#631, #663, #668,
#669).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…numbers throughout

Record the register rules in STYLE.md ("Logs and registers") and in a
formatting note at the top of the devlog: each bullet is one physical
line, each UTC date has one heading with no ranges, and every bullet for
work that landed through a PR ends with its number. The devlog-update
skill applies them: gap-fill goes into the day's single entry, removing
a landed branch tag adds the PR number, and its verify step checks for
duplicate dates, ranges, wrapped bullets and missing numbers.

Apply them to the whole devlog:
- Join 57 hard-wrapped bullets onto one line each (147 continuation
  lines), text unchanged.
- Merge the 10 dates that had two to five headings into one heading
  each, and split the six date-range headings by the merge dates of
  their PRs. 237 entries become 219, one per date, newest first.
- Add PR numbers to 900 bullets, matched against each PR's commits and
  changed files; uncertain matches were checked by hand. 1,250 of 1,309
  bullets now carry a number. The 44 without one are direct pushes from
  before PRs (March to June 2025), the September 2026 field captures,
  two pieces of work that never reached main, and two with no matching
  PR. The 15 tagged bullets are unmerged branch work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sprint 0.5.2.0:
- Physical reference authoring and scoring is delivered: the record and
  import (#635), scoring (#637) and macOS authoring with the Compare
  inspector (#656). Move it to Complete; the operator pilot item now
  says review runs in the delivered window.
- Current-solver evidence refresh: the October campaign re-ran the
  corpus B0 baseline (#672), so what remains is D2 on kirk0 under the
  current solver, bound to a frozen reviewed split.

Sprint 0.5.2.1:
- Rewrite the solid-body item to the campaign's result: A2 is not
  promoted, B0 is kept (#672). What remains is S2.4's refined stages,
  smoother chain breaks and oracle coverage, a tracker stage/CPU
  profile, sensor geometry for every corpus case, and F8 once a governed
  split exists.

Add Complete entries for #633, #634, #635, #636, #637, #649, #650, #656,
#659, #672 and #673, in PR order after #627.

Plans:
- Physical reference plan: tick P1 (#656) and restate the status.
- Near-edge plan: mark F6s superseded by the October campaign, which ran
  B0, the shadow and A2 at all 23 core sites; record why F8 and the
  face-transition remedy stay open. The evaluation protocol now keeps raw
  outputs local and writes findings into a docs/ report, as AGENTS.md
  requires; the results branches named in earlier findings are kept as
  provenance.
- MVP sprint plan: S0 names the delivered reference tooling and kirk0's
  20-object reviewed pack.
- Clear the three plan-hygiene gate violations from #656 and #673: the
  Swift physical-pose plan and the facet resource notes now name the
  point annotation tool as their canonical hub.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 5, 2026 11:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The devlog-update skill's new-day insertion step (SKILL.md line 190) still says to prepend "immediately after the # Development Log title line", which contradicts the PR's updated ordering rule and the devlog's new intro/formatting note and would misplace future entries.

Review effort: Balanced
Findings: 1 Low severity

Open (1)
What changed in this PR

Documentation-only PR that converts docs/DEVLOG.md from drifting prose back into a strict register and records what the 0.5.2.0/0.5.2.1 work has since delivered. It codifies register rules in .github/STYLE.md and the devlog-update skill, backfills PR numbers and merges duplicate/range date headings in the devlog (not shown in these diffs), and updates the backlog and several LiDAR plans to reflect merged PRs and the October near-edge campaign's decision to keep B0. No code, schema, or behaviour changes.

Changes:

  • Adds a "Logs and registers" standard to .github/STYLE.md (one physical line per bullet, one heading per UTC date, a PR number on every landed bullet) and mirrors it into the devlog-update skill, whose verify step now checks for ranges, duplicate dates, wrapped bullets and missing numbers.
  • Marks delivered work complete across the physical-reference, near-edge, swift-pose and facet plans and the MVP sprint plan's S0 row; moves eleven PRs (#633–#673) into the backlog's Complete section.
  • Clears plan-hygiene gate violations by retargeting the Canonical links of the swift-physical-pose and facet-authoring-resource-notes plans to the point-annotation-tool.md hub (verified: check-plan-canonical-links.py --check reports 0 gate violations).
File Description
.github/​STYLE.md Adds the "Logs and registers" section defining devlog/backlog register rules.
.claude/​skills/​devlog-update/​SKILL.md Applies register rules; updates conventions and verify commands. One step (line 190) left inconsistent with the new ordering rule.
docs/​BACKLOG.md Collapses completed 0.5.2.0/0.5.2.1 items; adds #633–#673 to Complete.
docs/​plans/​lidar-052-mvp-sprint-plan.md Updates S0 "Still open" and the physical-reference prose to reflect delivered tooling.
docs/​plans/​lidar-near-edge-tracked-state-plan.md Records local-only raw outputs; marks F6s superseded by the October campaign; annotates F8/face-transition.
docs/​plans/​lidar-physical-reference-review-plan.md Updates status and P1 checklist with delivering PR numbers (#635/#637/#656).
docs/​plans/​lidar-swift-physical-pose-plan.md Marks increments A–D delivered (#656); retargets Canonical/Related links.
docs/​plans/​lidar-facet-authoring-resource-notes.md Adds a Canonical link to satisfy plan hygiene.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread .claude/skills/devlog-update/SKILL.md Outdated
…troduction

The insertion step still said to prepend new-day entries immediately
after the "# Development Log" title line. The devlog now has an
introduction and a Formatting note before its first entry, and the
skill's own ordering rule says new entries go after them, so following
the step literally would put an entry above the introduction. It now
says to insert before the first "## " entry, and names the title as the
file spells it ("# Development log").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ddol
ddol merged commit acbe183 into main Oct 5, 2026
8 checks passed
@ddol
ddol deleted the dd/docs/backlog-cleanup-104 branch October 5, 2026 12:24
ddol added a commit that referenced this pull request Oct 6, 2026
…ming, D2 corpus refresh, and #676's records (#678)

* [ai][go] l5tracks: select a span's two percentiles instead of sorting

The update cost profile (#676) found 58 % to 88 % of the solid body's
Tracker.Update CPU in admitSolidBodyExtents: minimumAxisSpan calls
trimmedSpan on 21 axes per visible face per frame, and each call sorted
every member's projection to read two order statistics, the 1st and
99th percentiles.

trimmedSpan now selects them: the upper one first, which leaves every
value ordered before it in the prefix, then the lower one within that
prefix. nthFloat64 is a quickselect with a median-of-three pivot and a
three-way partition, in sort.Float64Slice's order (NaN first), and it
sorts what remains after 2 log2(n) unproductive partitions, so its
worst case is a sort's.

The values are the ones sort.Float64s puts at those positions, so every
span is the same, bit for bit: a test compares it with the old
implementation on spread, tied, ascending, descending, constant and
NaN/Inf/signed-zero inputs at 8 to 4,000 points. Benchmark on the Mac:
2.0 times faster at 256 points, 3.5 at 1,024, 3.6 at 4,096. The solid
body is default-off, so a default replay does not run this code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] span selection: balanced timing of B0, the shadow and A2 on both builds

Measures the selection change against main under the October campaign's
balanced protocol: three timing sites, B0, the shadow and A2 on each
build, six conditions in one order and then reversed, four p99 values
per condition, 300 s scored, on the Mac under caffeinate.

- The shadow's and A2's Tracker.Update p99 fall to 30 % to 40 % of
  main's at every site (A2: 3.45 to 1.36 ms at 3rd-folsom, 8.79 to
  2.71 ms at embarcadero-bryant); the four values of each condition lie
  within about 10 % of each other.
- Byte-identical: kirk0 shadow and A2 replays of both builds wrote the
  same tracking baselines, solid-body rows and summaries.
- Not enough for the campaign's screen: A2 is still 12 to 20 times B0's
  p99. What remains is the 21-axis search over every member, and
  reducing it changes spans, so it needs the corpus screen.

Raw logs and the summary stay on the LiDAR volume.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] devlog and backlog for the near-edge follow-ups

Now that #677's register format is on main: five one-line devlog
bullets under October 5 for S2.4, the oracle, the cost profile, the D2
re-run and the coverage survey, each ending (#676). In the backlog the
evidence-refresh item keeps only the 24-site label-free D2 comparison
and the frozen-split binding, the solid-body item keeps the extent
admission change, balanced re-timing, held-out geometry and F8, and
Complete gains the four #676 deliveries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] devlog and backlog for the span selection change

Two branch-tagged devlog bullets under October 5 for the selection
change and its balanced timing, and the backlog's solid-body item now
records that selection cut the solid body's p99 to 30 % to 40 % of the
sort's while A2 still fails the cost screen, leaving the axis-search
reduction, held-out geometry and F8. The timing report notes that the
measured selection build (786bd0851) is this change on the earlier main,
rebased onto #676 unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] D2 on the 23-site corpus, label-free, on the current build

The D2 report left the 24 September corpus-wide comparison pre-#600.
Re-ran it on build acbe183 with the same flags (first segment, 200 s
scored after 70 s, scorecards from 70 s, medoid scored against the OBB
centre), captures from the NAS, evidence scored on the internal disk and
moved to the LiDAR volume. embarcadero-folsom is left out as held out, so
both runs are summarised over the same 23 sites.

Six of seven measures hold in both arms. Contested terminations moved:
the OBB centre's share fell by a median factor of 0.86 per site and the
medoid's did not, so the OBB centre went from worse at 15 sites to better
at 16. That matches kirk0, where the exact solver cut the OBB centre's
identity switches and left the medoid's. The arms diverge as before
(median MOTA 0.892 against 0.887). D5 stands.

The report gains the corpus section and provenance; its recommendation
no longer says the corpus figures are pre-#600, and notes the guide and
plan updates that landed in #676. The backlog's evidence-refresh item now
leaves only the frozen-split binding. One branch-tagged devlog bullet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][go] l4perception: select the near-edge percentile instead of sorting

A profile of A2 after span selection put the next sort in the near-edge
measurement: LateralPercentile sorted every projection to read one order
statistic, for every face of every candidate pair the tracker gates. It now
selects that value with the same quickselect, which moves from l5tracks to
l4perception as NthFloat64 so both callers share it.

The selected value is the sort's; the only possible difference is the sign of
an exact zero, which no sort promises either. Tests compare every percentile
with the sort's on spread, tied, ordered, constant and NaN/Inf/signed-zero
inputs, and bit for bit on cluster-like points. Benchmark: 2.8x at 256
points, 3.3x at 1,024, 5x at 4,096.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] span selection report: where A2's update goes now, and the near-edge percentile

The report said the cost left after span selection was the 21-axis span
search. A profile of B0 and A2 after selection at 3rd-folsom says otherwise:
the span search is under half of A2's update (0.15 of 0.33 s), and even free
it would leave A2's update three times B0's. The near-edge measurement in
association's gate costs as much as B0's whole update, mostly a sort in
LateralPercentile. A2's update is 2.5 % of the frame callback's CPU.

Balanced timing of the near-edge percentile's selection (c33ed5d) against
the span selection alone (28d713f), captures from the internal SSD, four
p99 values per condition: the shadow's and A2's p99 fall 8 % to 12 % at
3rd-folsom and embarcadero-bryant, non-overlapping; A2 stays 10.4 and 18.5
times B0's. One run disturbed by a desktop application was set aside and
repeated. The span-selection build reproduced its earlier p99 within 4 %.

The backlog item no longer names the span search as what remains; it records
the screen's scope (Tracker.Update or the frame) as an open decision. Two
branch-tagged devlog bullets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] span selection report: the near-edge percentile at pierce-haight

The third timing site, same protocol, captures from the internal SSD: the
shadow's p99 falls 10 % (1.138 to 1.024 ms) and A2's 28 % (1.200 to
0.858 ms), non-overlapping. pierce-haight's solid-body cost sits in a few
frames with large clusters, where A2's gate measures the near edge for every
candidate pair. A2 is 8.1 times B0's there. One B0 run that ended at load 9.5
was set aside and repeated. Devlog and backlog ranges updated to all three
sites.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@ddol
ddol restored the dd/docs/backlog-cleanup-104 branch October 6, 2026 18:31
ddol added a commit that referenced this pull request Oct 6, 2026
Adds the October 6 entry for the twenty PRs that merged that day
(#679 to #703, with #684 still open as a branch bullet), records #677's
devlog and backlog work under October 5, and replaces the five
span-selection branch tags there with #678 now that it has merged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ddol added a commit that referenced this pull request Oct 6, 2026
Moves the work merged since #677 to the Complete section with its PR
numbers, following the governance rule that items are completed, not
deleted:

- #690 and #692 had dropped their items on merge; Phases 1, 2 and 4
  and the perf track-count identity are now Complete entries.
- #678, #686 and #688 had left their finished work inline in the
  parent items under branch names; it moves to Complete and the
  parents keep only what remains.
- #682 completes the Tailscale long-poll item, #680 the mac half of
  the perf baseline item (the ci half stays), and #689's frame timing
  is recorded beside the solid-body item it informs.

The sprint review's R4 and R6 status lines and the PCAP read-in-place
report cite #686, #688 and #680 instead of branch names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ddol added a commit that referenced this pull request Oct 6, 2026
* [ai][docs] devlog: October 6, #677 and #678 landed

Adds the October 6 entry for the twenty PRs that merged that day
(#679 to #703, with #684 still open as a branch bullet), records #677's
devlog and backlog work under October 5, and replaces the five
span-selection branch tags there with #678 now that it has merged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] backlog: record what landed on October 6

Moves the work merged since #677 to the Complete section with its PR
numbers, following the governance rule that items are completed, not
deleted:

- #690 and #692 had dropped their items on merge; Phases 1, 2 and 4
  and the perf track-count identity are now Complete entries.
- #678, #686 and #688 had left their finished work inline in the
  parent items under branch names; it moves to Complete and the
  parents keep only what remains.
- #682 completes the Tailscale long-poll item, #680 the mac half of
  the perf baseline item (the ci half stays), and #689's frame timing
  is recorded beside the solid-body item it informs.

The sprint review's R4 and R6 status lines and the PCAP read-in-place
report cite #686, #688 and #680 instead of branch names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
ddol added a commit that referenced this pull request Oct 7, 2026
…ico from it, stop embedding static/ (#704)

* [ai][go] embed all of web/build, including _-prefixed files

WebBuildFiles was `//go:embed web/build/*`. The glob names web/build/_app,
so that directory is kept, but Go then skips every file below it whose
name starts with "_" or ".". SvelteKit names shared chunks
_app/immutable/chunks/<hash>.js, and the hash alphabet includes "_"
(D_9rjNUa, start.BQyT_uoz.js). A chunk whose hash started with one would
be missing from the binary and 404 under /app in production, while the
--debug server, which reads web/build from disk, served it. Today's
single-chunk build has one hash-named file per build, so the odds were
small but never zero. The SvelteKit 3 split strategy would make dozens.

`all:web/build` keeps everything, as DocsSiteFiles already does. With
a stub build plus fake chunks _Ab12Cd3.js and Bx9_k2Lm.js, `go list`
showed the old directive embedding only the second; the new one embeds
both. StaticFiles (`static/*`) keeps its pattern: the server routes only
/favicon.ico to it.

TestWebBuildEmbedKeepsUnderscoreFiles pins the directive itself, since
no committed build contains a "_" file to prove the point at run time.
TestWebBuildEmbedMatchesDisk checks that every file under web/build is
readable from the embed, which CI's integration job runs against a real
build. With the old directive and the fake chunk on disk, both fail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][go] serve /favicon.ico from the web build and stop embedding static/

StaticFiles (`//go:embed static/*`) existed for one route, /favicon.ico,
and in production that route had been a 404: the handler was
http.FileServer(http.FS(radar.StaticFiles)), which looks for favicon.ico at
the root of a tree whose files sit under static/. Dev mode read ./static
from disk and worked, which is why it went unnoticed. The SvelteKit app
links /app/favicon.ico itself, but /docs/ declares no icon, so browsers
fell back to the broken /favicon.ico. The long-running local server
answers 404 there today.

The favicon now comes from the web build, web/static/favicon.ico by way of
web/build: fs.Sub of WebBuildFiles in production and ./web/build in dev,
the same tree /app is served from. This is items 1.1 and 1.3 of the
binary size reduction plan. The two icons are byte-identical, so nothing
visible changes except that the route works.

Dropping StaticFiles also stops the binary embedding whatever sits in
static/, which web/scripts/copy-build.js filled with a copy of the web
build. Identical files are stored once by the compiler, so in a local
build the binary shrinks by only 16,752 bytes. The cost was stale pages
that no longer matched the build (31 KB of them in a long-lived checkout),
and once the 172 MB of accumulated builds the plan measured.

TestStart_ProductionModeListenAndShutdown already requested /favicon.ico
but checked nothing, and it fails against the old handler with a 404. It
now requires 200 and web/build/favicon.ico's bytes, or a 404 when the
build is the index.html-only stub. TestStart_DevModeWithBuildDir checks
that dev mode serves the build's favicon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][js][make][cfg] stop copying the web build into static/

The web build's postbuild hook, web/scripts/copy-build.js, copied
web/build/* into the repo-root static/ so the server could embed it. #49
added the copy when /app was already served from web/build, and the
server never served anything from static/ but /favicon.ico. With the
favicon now taken from the web build, nothing reads static/, so the
hook and the script go, and so does the tracked static/favicon.ico,
which is byte-identical to web/static/favicon.ico.

- make clean-web removed three static/_app subdirectories; it now
  removes static/ outright, clearing what older builds left in existing
  checkouts.
- .gitignore keeps static/ ignored so those leftovers stay out of git
  status, and says why.
- The static-build Docker context no longer re-includes static/.

`make build-web` now leaves no static/ behind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] binary size plan: phase 1.1 and 1.3 landed

Ticks the plan's first three checklist items: the static/ embed and
StaticFiles are gone, and the favicon comes from the web build in
production and dev. A note at the top records what was measured on the
way. static/ held a byte-identical copy of the web build, which the
compiler's content-addressed storage kept almost free (16,752 bytes), plus
stale pages. The favicon it was kept for had been a 404 in production.

The two Markdown links to ../../static become code spans, since a clean
checkout no longer has that directory. The canonical hub's "currently
~211 MB" becomes "when the plan was written", and the stale static/ row
reads 0 MB. ARCHITECTURE.md says where /favicon.ico comes from.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [ai][docs] physical pose plan: British spelling of serialisation

#677 left "serialization" in the plan's effort table, which fails the
British-spelling step of `make lint-docs` on main. Same length, so the
table stays aligned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

2 participants