Phase 17b · The fine-tune of 4 and 5 October 2026¶
Status: decided by the owner on 2026-10-05. Folded into the phase doc, the run model and the domain model on 2026-10-05 (§ 8). This record was the single input for that work. It says what the owner decided, what changed in the design prototype, which findings and issues each change touches, what changes in the backend contract, and how the amendment must be carried out and checked.
It sits beside phase-17b-walk-corrections.md (the phase doc),
phase-17b-run-model.md (what a run is) and
phase-17b-domain-model.md. Those three are amended now. Where this
record and one of them disagree, the amended doc wins, because it carries the corrections of the
fast /reassess that § 8 lists.
1. What happened¶
- 2026-10-03. Phase 17b was split into 246 issues (backbone 94, UI 147, engine 5). None is built.
- 2026-10-04. The owner reviewed the Phase 17b prototype (v2) and raised eight points: the
three Explore dock tabs did not read as a flow, Scope looked insurer-only with no visible way to
run a country, a region or several countries, the hazard grid and the measures list ate the
dock, the chip bar over the map repeated the form, the damage curve was hidden under
"Advanced", Adapt and Admin drew empty, "Analysis" and "Analyses" collided, and no indicator
showed a run in flight. A discussion and a fast
/reassess(two refuters and a critic) produced a set of changes. - 2026-10-05. The prototype was rebuilt with every change and with each open choice switchable on screen. The owner compared them, decided all eleven, asked for four more changes on Scope (round 2), and marked every live entry of the review board "Looks right".
- The owner's definition of done for what follows: every issue that
/phase-buildwill run is compliant and optimised so that the built result is identical to the prototype's design. Phase 17 closed 115 issues and failed its walk on exactly this point. It must not happen again.
2. Sources of truth, in this order¶
- The prototype snapshot in the UI repo,
docs/prototype/v2/at artifact version1791210282-291b(UI commit7714726, PR ui#858). It is the visual and behavioural target. Its live original is the private artifactclaude.ai/artifact/RdKme3VFxnicnbznFjCAEG. Run it withcd docs/prototype/v2/source && python -m http.server 8000. - This record.
- The change registry inside the snapshot,
js/changes17b*.js(window.CL17B): one entry per change with an id such asexplore-29, a title, what the owner sees, and a hash that shows it. 221 entries. Nine are titled "Superseded:" and name the entry that replaced them. The entries added by the fine-tune carry a provisionalFT-ntag infindings. - The briefs the fine-tune was built from, UI repo
docs/prototype/v2/briefs/. They hold the exact behaviour and copy asked of each change (the key-figure popover texts, for example). - The artifact's database, for provenance only: collection
options17b(the owner's eleven picks) andreview17b(212 live entries markedok).
Every figure in the prototype is illustrative and never ships (ADR-077). Layouts, states, copy and behaviour are the target.
3. Decisions¶
Each is the owner's. A reversal is one line in the phase doc.
| Id | Decided | Not chosen | What it reverses or amends |
|---|---|---|---|
| FD-1 | The Explore dock is two numbered steps, 1 Scope then 2 Run. Layers is a button in the map's control group that opens a popover | Three tabs in the order Scope, Run, Layers | K13's three tabs, EX-16, run model § 7, the phone sheet of D12 (two tabs) |
| FD-2 | Scope asks "What do you want to assess?" through two doors: A place (opens first) and My assets | The same doors opening by role lens. One path "Where, then what" | EX-16's Scope paragraph, run model § 3.1, § 7 and the § 12 line "Scope opens on What is at risk" |
| FD-3 | One caption over the map: "Showing" hazard, scenario and year, engine, status. Only scenario and year open a menu, it lists computed cells and never changes the run | Four menu chips that edit the run form | EX-9 and its issue ui#764 |
| FD-4 | The hazard picker is one row that opens a grouped list with the reason beside each hazard that cannot be picked | A row of seven icons | EX-16's hazard grid |
| FD-5 | Measures in the run form are chips plus "Add measures" (a searchable picker over the map) and "Use a saved plan" | A shortlist pinned in Adapt | EX-16's measure list. The pin control of registry entry adapt-19 is not built |
| FD-6 | Several countries with no single hazard dataset: the hazard is off with its reason and "Run one country" | A per-country batch | Nothing. The batch goes to the Phase 18 stub |
| FD-7 | A run in flight shows as a pill in the top bar that opens a short list | A count badge on the rail entry | Nothing |
| FD-8 | The saved-work list is named History in the rail, the top bar and every sentence. The route stays /analyses |
Analyses, Results, Library, Runs | Phase 17's label "Analyses". Button "Save analysis" keeps its words |
| FD-9 | The rail logo is the shield, the same mark as the browser tab (assets in UI public/brand/, PR ui#857) |
The wave mark | Nothing |
| FD-10 | Admin shows two groups of tabs gated by level: Organisation (organisation admin) and Platform (platform admin) | One list of eight tabs | SH-15 and SH-16's Admin line |
| FD-11 | Home shows a four-step "Get started" card to an organisation with no data, in this phase | Phase 18 | Nothing. It is an empty state, not the guided tour of issue #273 |
| FD-12 | The damage curve is a visible select with the resolved default first and a curve preview | A read-only line with an "Advanced" override | EX-16, run model § 3.5, § 5, § 7 |
| FD-13 | The dock tab that was "Analysis" is named "Run" | Analysis | EX-16, run model § 7 |
| FD-14 | Two nouns in all copy: "portfolio" (the user's own assets) and "exposure layer" (a reference dataset). "Book" is gone from the copy | Book, catalogue | Run model § 11: "An upper bound for a dispersed portfolio", "For a portfolio's loss, open it in Explore", "typical intensity across the portfolio" |
| FD-15 | A clip may hold several regions or several municipalities: one country, one level | One unit only | Run model § 3.2, § 6 (scope), § 7 (clip). See BC-1 |
| FD-16 | In the scenario matrix a tick puts a cell in the run and a click on the cell shows it | One click doing both | EX-3 |
| FD-17 | The strip's third figure is labelled "Expected annual impact" and every strip figure opens "How this is made" | "Annual impact", no explanation | EX-10 |
4. The changes¶
One block per change. "Registry" names the prototype entries that show it. "Plan" says which finding it amends, or the new finding it needs (ids continue each series of the phase doc). "Issues" lists the issues known to be touched: the audit of § 7 must confirm and complete them.
FT-1 The dock is two steps. Registry explore-28. Plan: amend EX-16, add decision K36
(reverses K13). Issues: ui#745 (dock), ui#753 (Layers becomes a map popover holding hazard surface,
return period, opacity, results, the scope's assets, event footprints, "Add a layer from Data"),
the phone item of D12. The palette stays in the map's own palette menu. The scale test of the
prototype is a demo, not a target.
FT-2 Scope: two doors. Registry explore-29, explore-43, shell-15. Plan: new finding
EX-18, amending EX-16. Issues: ui#746, ui#744, ui#767. A place: country chips from coverage, several
may be on. The exposure layer fills in by itself, one line per country, default by the rule money
unit first, then exposure type buildings, then newest. "Change" opens a list inside the card (radio
rows with "default" and "score only" tags, last row "Upload your own exposure"). A country with no
layer reads "No exposure layer for
FT-3 With Scope open the map shows exposure only. Registry explore-30. Plan: amend EX-14.
Issues: ui#754. No hazard surface, no result tiers, no caption, no horizon player. The legend reads
the exposed-value ramp in the exposure's unit. Leaving Scope restores what was shown.
FT-4 A caption instead of four chips. Registry explore-31. Plan: reverse EX-9, decision K37.
Issues: ui#764 is rewritten. With the dock collapsed the caption carries "Edit run".
FT-5 Tick selects, click shows. Registry explore-32. Plan: amend EX-3. Issues: ui#748. A
click on a cell that is not computed selects it. Completed progress tiles show their cell.
FT-6 The hazard picker is one row. Registry explore-33. Plan: amend EX-16. Issues: ui#747.
Groups: Computable, Score only, Not available here.
FT-7 Measures are picked. Registry explore-34, adapt-17, adapt-18. Plan: amend EX-16 and
AD-1. Issues: ui#751. "Use a saved plan" needs the saved plans of AD-8
(ui#834, #1632, #1641, #1642), which land in a later wave: its box belongs on the AD-8 issue, with a Deps: on ui#751.
FT-8 The damage curve is a select. Registry explore-35. Plan: amend EX-16. Issues: ui#749.
A non-money exposure keeps the score-only refusal and shows no select.
FT-9 The key figures explain themselves. Registry explore-36. Plan: amend EX-10. Issues:
ui#755, with the provenance fields of #1595. The five popover texts are in the brief
(finetune-brief.md, FT-9) and are the copy to ship.
FT-10 Several countries. Registry explore-37. Plan: new finding EX-19. Issues: ui#747 or a
new UI issue, and BC-3. In the place door with two or more countries a list "Hazards for
FT-11 Names. Registry shell-12, analyses-16. Plan: new finding SH-25. Issues: every UI
issue whose copy or acceptance says "Analyses" as the list's name or "Analysis" as the tab's name.
The i18n key changes, the route does not.
FT-12 A run in flight. Registry explore-38, shell-13, shell-14, analyses-15,
home-15. Plan: new finding EX-20, and a box on EN-1. Issues: ui#766, ui#844, ui#748, #1569. The
run keeps going when the user leaves Explore. Coming back, or opening the run's address with
batch=<id>, shows its progress grid or its results without pressing Run again. A "Stop" beside the
running row cancels the remaining cells and keeps the completed ones. The top bar pill counts the
viewer's runs in flight and lists them with "cell k of N", a time estimate labelled as an estimate,
and Open. The backend serves no progress fraction, so no progress bar. One shared poll serves the
pill and History's "Running now". A finished run of the viewer's raises a toast with Open and an
item in the bell. Nothing ever blocks navigation while a run is going: see BC-6 for the proof.
FT-13 The Lookup pin opens a place card. Registry lookup-12, lookup-13, lookup-14. Plan:
new finding LK-14. Issues: a new UI issue. Name, coordinates, "Worst of n hazards", scenario and
year, the no-exposure line, and Place report, Watch, Open in Explore (the place door for that
country, clipped to the municipality). A click on the pin never moves it.
FT-14 Adapt has a landing page. Registry adapt-16, adapt-17, adapt-18, adapt-20. Plan:
new finding AD-17. Issues: ui#790, ui#794, and AD-8's. With nothing chosen: "What do you want to
adapt?", the two doors, and the saved plans (name, scope, hazard, measures, avoided loss, Open).
FT-15 Admin by level. Registry admin-8 to admin-13. Plan: new finding SH-26. Issues: ui#840
to ui#843, #1652. Organisation: Users and roles, Audit log, Usage, Data requests. Platform: System
health, Organisations, Ingest approvals, Engines, Live feeds. Usage by organisation is a platform
block. Each tab's gate names the route dependency it relies on (BC-9).
FT-16 Two nouns, and uploads that say what they create. Registry portfolios-11 to
portfolios-15, data-10 to data-17, settings-10. Plan: new findings PF-12 and DT-7. Issues:
ui#738, ui#821 to ui#825, ui#767, #1633. Each upload dialog says what it creates and where it shows
up. An upload runs as an ingest job the user can follow. The hazard upload asks for hazard type,
country, scenario, horizon years and return periods. HDF5 from CLIMADA is named. "Use in Explore"
is on the row, the drawer and the page, and carries exposure=datasets:<id>.
FT-17 A first-run card on Home. Registry home-10, home-11. Plan: new finding SH-27.
Issues: a new UI issue. Four steps that tick themselves from coverage, the jobs list and saved
work: add hazard data, add what is at risk, run, save or report.
FT-18 Reopening saved work restores the whole run. Registry analyses-10 to analyses-14,
analyses-17. Plan: new finding EX-21. Issues: ui#767 (add the History page's link), ui#845. All
keys of run model § 7, including a clip list and batch.
FT-19 The assistant runs a place. Registry assistant-6. Plan: new finding AS-4.
Issues: #1603, #1604, ui#770. See BC-4.
FT-20 Saving a run of several cells. Registry explore-39, analyses-12. Plan: new finding
EX-22. Issues: ui#748. Save stores the batch id and the completed cells only, says "Saved 3 of 4
cells (1 failed)", and is off with its reason until one cell is completed.
FT-21 Compare. Registry explore-40. Plan: amend EX-11. Issues: ui#752. Save stores a
comparison, the address carries a, b and engines, a side that is running cannot be started
twice, the dock shows one "Comparing" card, the empty state has a button to Scope.
FT-22 Events. Registry events-17. Plan: new finding EV-19. Issues: a new UI issue. "Save
replay" and "Add to report" in the Events header.
FT-23 Reports invent nothing. Registry reports-9 to reports-14, shell-16. Plan: new
finding RP-2. Issues: the Reports issues under SH-16 and #1637. A widget with no stored result
reads "Not computed yet" with "Run it in Explore". The share link names this report. The event
report carries the event id. "Added to the report" offers "Open the report".
FT-24 is folded into FT-16.
FT-25 The shield in the rail. Registry shell-11. Plan: new finding SH-28. Issues: a new
small UI issue.
FT-26 Home. Registry home-12, home-13, home-14. Plan: amend SH-22. Issues: ui#727,
ui#846. "New analysis" starts from a clean run form on Scope. A hazard that is not computed offers
"Run it". Every link into Explore carries an exposure.
FT-27 Notifications. Registry settings-9. Plan: amend SH-24. Issues: the Settings issues.
"An analysis finishes" and "An analysis fails" switch the bell item and the toast.
FT-29 Narrowing a place. Registry explore-41, explore-42. Plan: new finding EX-23. Issues:
ui#746, ui#744, the EX-15 issue that implements scope. Whole country, Region, Municipality and
Draw area exclude each other. A chosen unit is a chip with a remove button. Several units of one
level and one country can be chosen, in the dock or by clicking the map. See BC-1.
Prototype only, never a target: the review board (shell-7), the Options button and board
(shell-8 and the Options entry of shell-10), the two preview switches, the error line
(shell-9), the retired layout variants B and C (explore-27, added by the reassess of § 8), the
"where" variant's group outline (explore-44), the pin control (adapt-19), the scale test.
5. Backend contract changes¶
Nothing of the Phase 17b backend is built, so each is an amendment to an open issue, not a migration. The run model § 6 is amended to match.
- BC-1
scopetakes a list of boundaries.scopeis{"admin_boundary_ids": [UUID, ...]}(one level, one country, the union), or the existing{"admin_boundary_id": UUID}as a one-element alias, or{"bbox": [...]}. Refusals: mixed levels, mixed countries, an unknown id. The clipped set,scope_total, the persistedresult.metadata.scope, the cache key and the provenance all take the list. The address isclip=admin:<id>,<id>. - BC-2 The place door needs no new route. It lists
GET /v1/exposure-datasets?country=<ISO3>and picks the default in the UI (corrected in § 8: the backbone chooses it and servesdefault_dataset_id). The country chips come fromGET /v1/catalog/coverage. - BC-3 What each hazard can do for a set of countries, before Run. The UI must know, for an
exposure selector, which hazard types resolve to one dataset. Check whether the
list_hazard_optionswork of #1604 is an HTTP route the UI can call. If it is assistant-only, the same rule needs a read route. One rule, one implementation, shared with run model § 6's hazard resolution. - BC-4 The assistant. A read-only query tool
find_exposure_datasets({country, region})returning id, name, unit, type and the default flag.set_scopetakesexposurein thedatasets:form and acliplist. The sequence for "Run river flood today for Greece" is find_exposure_datasets, open_view, set_scope, list_hazard_options, set_analysis, compute_cell, get_job, get_result_summary. - BC-5 Saved work. A saved run carries every run key, the batch id and which cells completed. A saved comparison carries its two sides. A saved event replay carries its watch. Check the Scenario schema for each before adding a field.
- BC-6 Proof that a run blocks nothing. The API is one process and prod runs one compute worker until EN-1 lands. Add a stack box to the Explore end-to-end issue (ui#766): while a matrix run is in flight the test opens Data, Portfolios and Lookup, gets a Lookup answer, returns to Explore and sees the run's progress. Add to EN-1 (#1569) a prod box: during a matrix run a Lookup request answers within its normal time.
- BC-7 Jobs for the pill.
GET /v1/jobsfilters one status per call. Either the UI makes two calls behind one shared hook, or the route accepts several statuses. Pick one and write it on ui#844. - BC-8 Open in Explore from a Lookup pin needs the municipality that contains a point. Check whether Lookup's response already names it before adding a route.
- BC-9 Admin gates. Organisation tabs rely on
require_role(Role.ORG_ADMIN)routes (api/v1/admin/usage.py,catalog.py,downloads.py, the user routes ofmanagement.py). Platform tabs rely on the platform-admin checks (pending_ingests.py, the organisation routes ofmanagement.py). Engines and live feeds have no admin route: name their gate before placing them.
6. The compliance bar for an issue¶
An issue is ready for /phase-build only when all of this holds.
- It names its design. A "Design" block gives the snapshot version (
1791210282-291b), the hash to open in the snapshot, and the registry ids it implements. - It builds the decided variant only, named in words (§ 3), and never offers a variant that was not chosen.
- Its acceptance proves the design. Guardrail 1's parity box compares the built view with the
snapshot at 1440×900 with the snapshot's defaults, and lists every difference. Behaviour is
proved by checks in the framework's
command → expected outputform, at least one per registry id the issue implements. - Its copy is the snapshot's copy, quoted where it matters: labels, empty states, refusals, the honest-limit lines.
- It contradicts neither this record nor the run model: no "Analysis" tab, no Layers tab, no chip menus, no "Advanced" curve override, no "book", no list named Analyses.
- Its
Files:list is complete and itsDeps:reflect the new order (a UI box that needs a backend change names that issue). - Every live registry entry is owned. Each of the 212 live entries maps to at least one
acceptance box of one issue, or to the "prototype only" list of § 4. The inventory of SP-3
(#1565) is the place that prints
unmapped:empty: point it at the registry ids.
7. How to carry it out¶
The work is orchestration. Use fresh subagents for reading and writing, keep a ledger file, and never start a build. All of it is docs and issue text.
- Read this record, the phase doc's structure (findings tables, decisions, issue map, wave
table, lanes, exit criteria), the run model, the
/phase-splitskill and the collaboration framework. Read the registry by running the snapshot or by readingjs/changes17b*.js. - Amend the plan docs on one docs branch of this repo, then one PR:
- the phase doc: a "Fine-tune of 4 and 5 October" block in the findings (the new findings of § 4 as full rows: finding, change needed, acceptance), the amended rows marked as amended with a pointer, decisions K36 and up for every FD that reverses an earlier decision, exit criteria 8 and 10 reworded for the two doors, the out-of-scope list (per-country batch, pinned shortlist), a guardrail that states § 6, and the Phase 18 stub entries;
- the run model: § 3.1, § 3.2, § 3.5, § 5, § 6, § 7, § 10, § 11, § 12;
- the domain model where it names saved plans, uploads or the vocabulary;
- check tables for a raw
|inside a code span before the PR, and build the docs strictly. - Reassess the amended docs (fast) before touching an issue.
- Audit every open issue of the milestone against § 6, in parallel by ranges, each auditor
with the snapshot, this record and the amended docs. For each issue: compliant, or an amended
body. The owner asked on 2026-10-05 for issues to be fixed, so an open, unbuilt issue's body is
edited with
gh issue edit <N> --body-file, and one comment says what changed and why. Keep every issue's framework shape: behaviour, acceptance checks,Files:, out of scope,Deps:. - Split the new findings with the delta
/phase-split docs/plan/phase-17b-walk-corrections.md: new issues, sizing, and the wave table and lanes re-planned. W0's rows stay first. A new issue that a walk stop should see lands before that stop. - Prove coverage: the registry-to-issue map of § 6 point 7, with nothing unmapped.
- Reassess the whole (fast): the docs, the snapshot and the issues say the same thing. Fix what it finds, then report to the owner with counts taken from commands run in that session.
Rules that bite here: no build and no CI dispatch. Docs PRs follow the repo's docs PR rule and
merge through squash_merge.sh. gh pr merge runs alone, never chained. Bare issue numbers are
ambiguous across the three repos, always pass -R. A status is read from gh before it is
stated.
8. Folded into the plan¶
Done on 2026-10-05 by the orchestrator session of § 7. The ids the amendment gave:
| Decision | K line | Decision | K line | Decision | K line |
|---|---|---|---|---|---|
| FD-1 | K36 | FD-7 | K42 | FD-13 | K48 |
| FD-2 | K38 | FD-8 | K43 | FD-14 | K49 |
| FD-3 | K37 | FD-9 | K44 | FD-15 | K50 |
| FD-4 | K39 | FD-10 | K45 | FD-16 | K51 |
| FD-5 | K40 | FD-11 | K46 | FD-17 | K52 |
| FD-6 | K41 | FD-12 | K47 |
New findings: EX-18 (FT-2), EX-19 (FT-10), EX-20 (FT-12), EX-21 (FT-18), EX-22 (FT-20), EX-23 (FT-29), SH-25 (FT-11), SH-26 (FT-15), SH-27 (FT-17), SH-28 (FT-25), LK-14 (FT-13), AD-17 (FT-14), PF-12 and DT-7 (FT-16), AS-4 (FT-19), EV-19 (FT-22), RP-2 (FT-23). The compliance bar of § 6 is guardrail 12 of the phase doc.
A fast /reassess (two refuters and a completeness critic) checked the amended docs against the
snapshot, this record and the backbone code before any issue was touched. It confirmed the quoted
copy and every code fact, and it corrected this record on the points below. The amended docs hold
the corrected form.
- Parity (§ 6 point 3). The harness compared a view with the product's own earlier render, and nobody could write the difference list the box asked for, because builders cannot render. K53: SP-2 renders a prototype capture per view and per distinct registry state, the wave gate captures the product at the same states, reads both and posts the difference list on the issue, and the box ticks only when no design difference is left (guardrail 1 of the phase doc).
- BC-2. The default exposure layer is chosen once, in the backbone, and served as
default_dataset_idonGET /v1/exposure-datasets?country=. The UI reads it. The assistant's tool marks the same row. - BC-3.
list_hazard_optionsis an assistant tool the UI cannot call. A read route over the same core function serves the per-hazard state. ui#747 and #1604 are rewritten for it. - BC-7. The pill also needs who started a run, which no read served. One new backbone issue
adds
created_by_user_idto the batch and job rows and a repeatedstatusfilter. - FT-12 Stop needs a backend cancel, which this record did not name. It lands in W6 with the cancel route (#1654), the cancelled job state (#1639) and ui#844, because #1639 owns migration 0114 and moving it into W2 would renumber ten later migrations (K54). Stop cancels the cells that have not started, a running cell finishes. The rest of FT-12 is W2 work.
- BC-8. Lookup's
locationblock names the country only. It gains the containing admin units. - FT-22 in W3 is proved by the saved scenario and the report basket. Its History card and the event id in the report are W6 boxes on the EX-21 and RP-2 issues.
- Prototype only.
explore-27joins the list.home-10,home-11,admin-10andadmin-12are targets, proved on an organisation with no data and on an organisation admin's account. - § 2 point 3 and § 4. The registry tags the fine-tune entries FT-0 to FT-28 and R2-1 to R2-4, which do not match this record's FT numbers one to one (FT-24 is folded into FT-16, the round 2 entries are FT-29 and FT-2). The registry ids are the reference, not the tags.
Delta split 2026-10-07. Steps 4 and 5 of § 7 ran on 2026-10-07. The audit amended 246 open
issues against § 6, and the delta /phase-split filed 33 new issues, 11 in the backbone (#1660
to #1670) and 22 in the UI (ui#859 to ui#880). By the finding each was filed for: AD-8 ui#875,
AD-17 ui#874, DT-7 #1667 #1670 ui#876 ui#877, EV-19 ui#868, EX-10 #1664 ui#873, EX-11 ui#872,
EX-18 #1660, EX-19 #1661 ui#865, EX-20 #1662 ui#866, EX-21 #1663 ui#878, EX-22 ui#871 ui#879,
EX-23 ui#870, LK-14 #1668 ui#867, PF-7 #1666 ui#860, PF-11 #1665, PF-12 ui#861, RP-2 ui#869,
SH-25 ui#862, SH-26 #1669 ui#880, SH-27 ui#864, SH-28 ui#863 and SP-2 ui#859. Four planned
backbone items were folded into issues already filed instead: AS-1's default_effort into #1602,
EV-1's window_start into #1614, EV-14's insured figures into #1611 (the watch summary) and #1617
(the watch_update payload), and EV-3's per-asset intensity into #1612. Eleven of the new UI
issues were cut out of existing ones that the audit found too large for one build: ui#870 from
ui#746, ui#871 from ui#748, ui#872 from ui#752, ui#873 from ui#755, ui#874 from ui#790, ui#875
from ui#834, ui#876 from ui#822, ui#877 from ui#825, ui#878 from ui#845, ui#879 from ui#848 and
ui#880 from ui#840. #1670 was cut from the new #1667 in the same way. Every amended issue carries a
comment, headed "Body amended on 2026-10-05", that names its changes. The decisions the split
settled are K55 of the phase doc, and its issue map and wave table are the phase doc's
Split record.