Repository navigation
Refuse a current observation whose unit carries a scale word - #422
Merged
Merged
Conversation
Chronicle stores plain numbers since Max's 2026-10-21 ruling, and the base-unit restatement leaves no current row in a scaled unit. This turns any new one into a catalog refusal, which Thesis's preflight reports as CATALOG REFUSED. It reads current observations only. A superseded row keeps the unit it was written in, and a docket-only row keeps the unit its contract registers in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…feat/refuse-scaled-units
Its synthetic corrections moved six series to millions, which the catalog now refuses. A plain unit that Chronicle stores for none of them moves their unit on any ledger, before or after the base-unit restatement. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…feat/refuse-scaled-units
…test The 12 Table A-19 rows gave each of the six series later months in count, so a correction that moved only June's record to persons put the series in two units and turned Arch checks red on the ledger branch (chronicle#433). The test now corrects every current record of the six series, and it carries each synthetic digest and unit into the row's projection, which the append gate holds to the row's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review of this PR found two mutants that survived: a case-sensitive regex and a refusal that read only the last row. Three more unit parameters and a Hypothesis property now kill both. The property spells out its scaled units, so its answer doesn't come from the regex under test. The prefix-correction test had stopped correcting a prefix row: the restatement moved June's active version, so its corrections named the restatement rows. It now drops the later versions of those six records and asserts that all six June corrections name a prefix address. The refusal moves below the unit's validity check, which drops a second read of the unit and a guard that check makes redundant. Every row it refuses stays refused, and a period error now reports first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The move below the validity check left the null-unit guard with no test, and the property's comment claimed every journal when it holds for otherwise valid ones: a unit conflict stops a build with no scale word in it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
November 9, 2026 09:53
Contributor
Author
|
Merge audit, at head 1e7466d.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of the migration Max ruled on 2026-10-21. It follows chronicle#404 and the restatement run (42526506760), which left no current row in a scaled unit.
What this does
scripts/build_series_catalog.pyrefuses a current observation whosemeasure.unitcarries a scale word: thousand, million, billion or trillion, in any case. Thesis's catalog preflight then reports such a row asCATALOG REFUSEDand appends the rest.targetUnit, because a contract registers in that unit. Its first observation stores the base unit.No gate-surface file changes.
Invariant
A scale word in the current view always stops the build, and one in a superseded row never does, wherever the row sits.
test_a_catalog_builds_exactly_when_no_current_unit_is_scaledchecks this with Hypothesis, on journals valid in every other respect, against a literal list of units rather than the regex under test.The word list stays coarse on purpose. It would refuse a rate unit such as
per_thousand, which holds no scaled figure, and it missesMMBtu. No current unit falls in either group, and a series in a refused unit fails closed withCATALOG REFUSED.The test this also fixes
Chronicle's CI has failed on this branch since the 12 Table A-19 rows landed (chronicle#433):
test_correction_of_a_prefix_row_is_accepted_like_the_gatemoved only June's record to a new unit, and the later months put each series in two units. The test now corrects every current record of the six series and carries each synthetic digest and unit into the row's projection.It also corrects a prefix row again. The restatement had moved June's active version, so the test's corrections named restatement rows. The test now drops the later versions of those six records and asserts that all six June corrections name a prefix address.
This fixes the failure chronicle#433 reports. GitHub acts on closing keywords only for merges into the default branch, and this PR targets
codex/thesis-ledger-facts, so this session closes the issue by hand at merge.Evidence
tests/test_build_series_catalog.pypasses on the ledger at 810b8c7 (284 passed), and--checkreports the catalog current (221 series).trillion, and a refusal that reads only the last row.🤖 Generated with Claude Code