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_credentialsscripts are the same defect on the other side.git diff --exit-codecannot see a file that was never added, so only the untracked-files step ofshell-script-drift.ymlcatches 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.mjsreads the version fromCMakeLists.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.