Story: Clear the local-check failures on main

Table of Contents

This page documents a story in Sprint 27. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

1. Goal

The local check gate stops failing on drift that predates any branch.

2. Status

Field Value
State DONE
Parent sprint Sprint 27
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-13

3. Acceptance

  • Every script the shell recipes tangle to is committed and matches.
  • The DSH plugin package versions match the product version.
  • The local gate's `tangle-shell`, `component-drift` and both `dsh-*` checks pass.
  • Every pgTAP suite passes against a recreated database.

4. Tasks

Task State Start End Description
Scaffold story: Clear the local-check failures on main DONE 2026-10-07 2026-10-07 Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR.
Regenerate the drifted shell scripts DONE 2026-10-07 2026-10-07 Six committed scripts drifted from their recipes, and six more the account_credential recipe produces were never committed.
Bump the DSH plugin package versions DONE 2026-10-07 2026-10-07 The two DSH plugin packages declare version 0.0.25 against a 0.0.27 product, so their manifest checks fail.
Fix the red pgTAP suites DONE 2026-10-09 2026-10-09 Task for: Clear the local-check failures on main
Carry the book purpose through the publisher DONE 2026-10-09 2026-10-09 Task for: Clear the local-check failures on main
Clear the remaining local-check failures on main DONE   2026-10-13 Ten local-check gates fail on main after the provider feed merge, and the macOS and Windows CI builds break on a floating-point from_chars and a direct std::getenv.
Drop the generation stamp from the ER diagrams DONE   2026-10-13 The ER PlantUML diagrams carry a wall-clock Generated timestamp that changes on every render, so a no-op regeneration rewrites all 22 files. The drift check normalizes the stamp, so no gate fails, but the churn is pure noise.
Point the integer-bearing models at cstdint DONE   2026-10-13 A release-preset build fails on three generated protocol headers and one domain header that name std::int64_t without including <cstdint>. The debug include graph hid it.
Pass the system caller in the feed filter test DONE   2026-10-13 feed_filter_tests.cpp still calls where_clause with two arguments; the function gained a system_caller parameter, so the synthetic api test target does not compile.
Refuse a leading plus in parse_double DONE   2026-10-13 parse_double accepts a leading plus, but std::from_chars, which it replaced, does not; the manual point service therefore took +0.09 and the marketdata core test failed.
Accept a leading plus in parse_double again DONE   2026-10-13 The estate's decimals are signed, so strike_label::parse reads +25RR through decimal::parse and canonicalises it to 25RR; mirroring from_chars' sign rule in parse_double broke the strike label tests.
Take a manual point value as the estate's number DONE   2026-10-13 The manual point service refuses +0.09 with a private gate, while decimal – the estate's one definition of a number, used by the key codec – accepts it, and the service accepts other non-canonical spellings such as 0.090.
Key the plus-value test before the snapshot's cut DONE   2026-10-13 The new manual point case keyed +0.09 at now, but the snapshot is read as of 2017-09-12, so the point was in the cut's future and the snapshot still showed the imported value.

5. Decisions

  • The shell drift is fixed by committing what the recipes tangle to, not by editing the scripts or the recipes. The scripts are generated, and the recipes are the source: the drifted ones were last regenerated before the recipes gained their arguments.
  • The missing account_credentials scripts are the same defect on the other side. git diff --exit-code cannot see a file that was never added, so only the untracked-files step of shell-script-drift.yml catches them; it was added after the recipe landed, which is why main stayed red without a signal.
  • The plugin versions are bumped to the product version rather than the product version being questioned. The plugin ships with the product and is upgraded with it, and check-manifest.mjs reads the version from CMakeLists.txt.

6. Out of scope

7. Result

The shell and HTTP tangles are clean, both recipe inventories are current, component-drift passes, and both DSH plugins carry 0.0.27 and pass their manifest checks. Two failures remain and neither is this change's: lint and site-page both name a dangling id link in projects/ores.iam/modeling/ores.iam.account_credential.org, which PR #2730 introduced. The model's prose is emitted into generated SQL and C++, so correcting it is its own change.

The story closed with one check left red. pgtap failed on ten of its thirty-two suites, six of which ran no test at all, and the cause was the trading model rather than the suites: no trading entity has been immutable since the model became versioned, and the trade's children stopped copying the party, so twenty-one fixtures named no audit column and thirteen named a column that no longer existed. Every suite passes now, and the cases that proved the removed guarantees are rewritten to the versioned behaviour.

One of them could not be. Nothing refuses a report into another party's portfolio any more: the check and its message are gone from the generated SQL, so the guarantee is missing rather than the test stale. That and the unguarded version rewrite are filed on their own story. The same sweep found the ER diagram stale after the rates-family header, and it is regenerated here.

Emacs 29.3 (Org mode 9.6.15)