Skip to content

release: promote 2026-Q3 to master - #187

Merged
michaldengusiak merged 561 commits into
HoareLea:masterfrom
SAM-BIM:sow/2026-Q3
Oct 6, 2026
Merged

michaldengusiak merged 561 commits into
HoareLea:masterfrom
SAM-BIM:sow/2026-Q3

Conversation

@michaldengusiak

Copy link
Copy Markdown
Contributor

2026-Q3 quarter-close promotion (Hoare Lea promotion pilot)

This PR promotes SAM-BIM's sow/2026-Q3 branch to Hoare Lea master, per the standard SAM quarter-close release convention.

Source (SAM-BIM sow/2026-Q3): 9f515c4c7204b6833c8bd4cd4eb23717426b8d70
Target (Hoare Lea master): dd12dfbc93c7031c354b917b5aa9e3d32ad1fb28

Hoare Lea master is a clean ancestor of sow/2026-Q3 (190 commits ahead, no divergence, no unrelated-history issue).

Q3 scope summary (from git history)

  • Part O UI: iteration 2/2b/3 orchestration, automatic optimisation and review tests, TAS warm-start, equipment-selection UX, result review/persistence, defaults closeout, consistency polish.
  • Part F: terminal transfer compliance, design overlay readability, ventilation-properties-by-Part-F, transfer-air-chain-direction tests, floorplan overlay.
  • TM59: mapping-dialog stabilisation and stale-occupancy clearing on remap.
  • Platform/UI migration: WinForms progress host → WPF (refactor/progress-to-sam-windows, feature/wpf-progress-host), drop net48 Windows config, WPF datagrid edit/owner-crash fix, multiselection treeview fix.
  • HoneybeeSchema 2.6 upgrade, correctness/perf closeouts (2b correctness, large-model lookup, bulk context).

CI / checks

Combined check-runs on Q3 HEAD (9f515c4c): PASS — build success.

Notes

  • This is the 2026-Q3 quarter-close promotion. No 2026-Q4 work is included or intended in this PR.
  • Merge convention: merge commit, no squash, no rebase — to be merged in a later, separate step after review.
  • This PR is opened as part of a four-repository pilot batch (SAM, SAM_UI, SAM_Systems, SAM_Tas). No cross-repo merge-ordering dependency is required, but reviewers should be aware the other three pilot PRs land from the same Q3 cut.
  • Synchronising SAM-BIM master with Hoare Lea master is a later, separate step and is explicitly out of scope for this PR.

🤖 Generated with Claude Code

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

SAM-BIM-AI and others added 28 commits September 28, 2026 11:23
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Active cooling On/Off per dwelling, orthogonal to the ventilation
strategy (Natural / MVHR / Optimised MVHR), connected to the merged PR3B
authority:

- Mixed Design: "Active cooling is allowed" project rule (default on,
  persisted), an Active cooling column (plain text, grid stays
  virtualised) and bulk Cooling on / Cooling off. On is refused for a
  dwelling without an MVHR supply; Natural is refused for a cooled
  dwelling until cooling is turned off; product / airflow-basis edits
  keep the cooling intent; Off is never blocked. Corridors are not rows.
- Check and Build pass the catalogue's descriptors AND templates to
  MaterialisePartODwellingStrategies (templates only with the
  catalogue); SAM's refusals are shown as SAM states them.
- When SAM's record puts the model on the Systems route, the whole
  model runs through the new SimulatePartOMaterialisationSystems:
  one mixed SAM_Systems call (PartOIteration3Pipeline.MaterialiseMixed,
  GuidanceTemplate MVRE for the cooled units only, checked against
  SAM's recorded cooling airflow), no-IZAM thermal source, one TPD,
  guidance read-back per cooled unit, bridge, TM59 with the
  materialiser's scenarios, run model persisted to the bridge results.
  No hybrid; uncooled designs keep the unchanged IZAM route.
- Evidence records route, TPD and the guidance read-back; staleness is
  SAM's record rule with the templates.
- Gate harness now calls the production mixed call.

Tests: PartOMixedCoolingTests (17) + window test updated; env-gated
acceptance inspection. Red-first: base window test + 6 mutations
(documentation/evidence/parto-mixed-pr3c). WPF 1384/1384.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- documentation/PartO-MixedDwellingStrategies-PR3C.md: before/after,
  pipeline, validation, licensed acceptance through SAM Analytical.exe
  (cooled Systems-route run, save/reopen, cooling off -> IZAM rebuild,
  143 l/s Optimised + cooling refused), limitations.
- Evidence: driver log, inspections, fixture SHAs, key screenshots,
  driver scripts (as .txt).
- Mixed Design grid: Dwelling / Selected columns narrowed by the new
  Active cooling column's width, so PR3C adds no horizontal overflow.
- PROJECT_PROGRESS: PR3C entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…progress is a post-merge closeout)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a PR branch

Owner convention (28 Sep 2026): code + tests + evidence -> final PR CI ->
merge -> PROJECT_PROGRESS.md closeout (with the merge SHA) as a direct
docs-only commit on the base branch. While a PR is open, its status and
evidence live in the PR record document and PR description. Unrelated
stream entries are never modified. Same wording in SAM, SAM_Systems,
SAM_Tas, SAM_UI and SAM_Deploy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-2026-09-28

Part O mixed strategies PR3C: per-dwelling active cooling in Mixed Design
…ess-dialog pattern

Extract the Part O progress window's look into a neutral SAM.Core.UI.WPF
Themes/ProgressStyles.xaml and ProgressStageRow; PartOProgressWindow now
draws with them unchanged. SpaceReportPdfBatchWindow shows heading, run
summary, stage rows with right-aligned times, real percentage, elapsed,
and the cancel note beside Cancel, plus completed/cancelled/failed final
states. Ribbon Print Room Data Sheets shows its four stages in the same
pattern (own-thread host). No batch, report or RDS behaviour change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Part O mixed dwelling strategies: PR3C (per-dwelling active cooling in
Mixed Design) is COMPLETE/CLOSED. Licensed TAS acceptance passed;
CI green; merged directly (base had moved by one unrelated docs-only
AGENTS.md commit, mergeStateStatus was CLEAN). Next: PR4, not started.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…at the result's count

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… PR record, evidence

Per-tick rendering flooded the dispatcher in the 5k UI run (Cancel ~10 s);
the window now renders from state on its 500 ms timer like
PartOProgressWindow (Cancel 0.06 s). Adds documentation/ProgressDialogPattern.md
(recommended SAM progress-dialog pattern, Part O source as reference,
audit of reporting/export/print progress surfaces), the PR record, and
render + dev-app UIA evidence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed style only

Owner review: hosting the RDS progress on its own topmost thread was an
unverified behaviour change (no Excel on the acceptance VM). The window is
now created on the calling UI thread, modeless, no owner, not topmost, not
in the taskbar, activated and pumped once per stage - exactly as the
replaced SAM ProgressWindow - and only draws in the shared progress style.
PartOProgressHost is back to the base branch. Test pins the window's
behaviour; RDS evidence re-run (same UI thread, not topmost).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…2026-09-28

UX: SAM progress-dialog pattern for Space report export and Print RDS (Part O reference)
SAM progress-dialog pattern (Part O reference) for Export Space Reports
and Print RDS (ribbon, style only) is MERGED. CI green (build + SPDX),
no review comments, merged pinned to the reviewed head 0da90c8.
Deployment via SAM_Deploy is owner-led; follow-ups are listed in
documentation/ProgressDialogPattern.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…test, replicated real fixture, licensed harness

- PartOMixedLargeProjectTests: 500 dwellings / 5,000 spaces, thirds Natural / MVHR / MVHR + cooling:
  one mixed model on the Systems route, truthful scenarios, ONE SAM_Systems graph with a DX coil on
  exactly the cooled units' air systems, Build & Run with a TAS stand-in, no model growth over
  rebuilds and cooling off -> on. Plus the replicator's own test.
- PartOMixedLargeProjectFixture: replicates the real clean baseline into independent blocks.
- PartOMixedLargeProjectAcceptance (env-gated, licensed TAS): the production Build & Run at scale,
  every stage timed, every dwelling's TM59 outcome against its block reference.
- PR4 record (draft) and evidence: x10 PASSED; x30 measurements and TSD read probes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ut folder (M1/M2)

M1: SpaceReportPdfBatch's doc comments and documentation/Reporting-SpaceReportPdfBatch.md called
Create.DocumentContext's read of AnalyticalModel.AdjacencyCluster a "snapshot"/"model copy", which reads as
an isolated copy. It is a shallow copy: a fresh cluster wrapper, but the same Space/Panel object references
as the live model. Reworded to say that plainly, and to explain why it is safe here (the export window is
modal, so nothing else mutates the model while the batch runs).

M2: SpaceReportPdfBatch.Run wrapped Directory.CreateDirectory and opening the log's StreamWriter in one
try/catch, so a directory failure was swallowed and every document was still attempted, each failing at the
Output stage - one failure per document instead of one clear reason. Split the directory creation into its
own try/catch that fails fast (throws IOException, with Trace.TraceError) before any document is attempted.
The window's existing "Space report export stopped" handling for a Run exception now covers this directly;
no window code changed.

Two new regression tests. WPF tests: 1397/1397 (was 1395; +2 new). SAM_UI.sln Debug and Release: 0 errors.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…2-2026-09-28

Reporting hardening: accurate DocumentContext wording, fail-fast output folder (M1/M2)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ASSED, TSD read scaling measured

x10 cooled 27:54, x30 cooled 4:33:29, x10 uncooled (IZAM) 6:44 - all ACCEPTANCE PASSED, every
dwelling's TM59 outcome equal to its block reference. The full-year route grows ~N^2.1: TAS TSD
per-zone result reads (thermal-source results, bridge, TM59) are CPU-bound in TSD.exe and grow with
the file; one annual read costs the same as 365 daily reads at x30. TPD conversion linear (~21 s per
air system). The ~5,000-space full-year run is recorded as not practical on current TAS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-suite rerun 1,400/1,400

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Part O mixed PR4: large-project acceptance evidence (tests + licensed harness)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PartOTM59Assessment now converts the TSD with SAM_Tas#73's TSDConversionSettings.RequireFullYear = true
(new internal PartOTSDConversionSettings()) and refuses a part-year file, with SAM_Tas's reason, before
anything is assessed. HourCount_Expected could not detect it: TSD pads unsimulated hours with -1 and always
answers 8760. Generic TSD conversion defaults, TM59 rules and the bridge are unchanged. An internal Assess
overload takes the conversion so the path is testable without TAS COM.

Tests: PartOTM59FullYearGuardTests (5; mutation-checked), SAM.Analytical.UI.WPF.Tests 1405/1405.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
michaldengusiak and others added 29 commits October 5, 2026 13:17
…-coverage

Test Iteration 3 modified-weather and dwelling review journeys
Reorganise the User Libraries and Builder guide around the engineer's
journey: workflow-at-a-glance and Save-versus-Apply diagrams up front,
separate glazing and opaque/Target-U workflows, and detail moved into a
Reference section. Corrections from source verification: Target-U
Alternatives behaviour, generated-variant default, Builder auto-selection
from Change..., and My library having no Apply. Documentation only.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…uide

Beginner-usability additions only: a short key-terms table, how to open
the Thermal Performance panel (verified View > Panels ribbon toggle and
3D right-click route), and a which-source-to-use table. Documentation only.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e-restructure

docs: restructure user libraries and builder guide
…caller (#58)

400 box-shaped spaces whose floor-plan sections crowd a 2 m square, solved end
to end through ToSAM_GeometryObjectModel. Locks two things:

- No drawn label overlaps another. Before the SAM Solver2D fix
  (SAM-BIM/SAM perf/solver2d-clustered-anchors) this plan spent the whole
  500 000-unit budget and dropped 257 of the 400 labels untested at their
  anchors on top of the others (143 solved / 257 over budget, ~5.5 s). With
  it, 400 solved / 0 over budget, 78 887 work units, ~0.3 s.
- The same plan drawn by two separate views (no shared label cache) puts every
  label in the same place.

Test only; no SAM_UI source change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rewrite Part O guide around engineer workflow
test(floor plan): clustered-anchor label regression through the real caller (#58)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
WpfCollectionTests.EveryClassWithStaTests_IsInTheWpfCollection failed on
sow/2026-Q3 because PartOIteration3RoomBindingTests runs [WpfFact] tests
without [Collection(WpfCollection.Name)], so it could load BAML
concurrently with other WPF test classes.

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

test: enrol PartOIteration3RoomBindingTests in the WPF collection
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…167/#168)

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

Internal progress record; not part of the upstream contribution. It remains in sow/2026-Q3 history and will be restored in sow/2026-Q4.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Removes reviewer-name provenance (Codex/Kimi/Michal) from code comments and
PR-record docs, and the trailing PROJECT_PROGRESS.md / AGENTS.md closeout
sentences (PROJECT_PROGRESS.md is not shipped upstream). Comment-only changes
in .cs files; technical rationale preserved.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@michaldengusiak
michaldengusiak merged commit 6dd74d9 into HoareLea:master Oct 6, 2026
2 checks passed
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