From 9b86a76ce56dfe47c1960b731a15ff7c0a7b0678 Mon Sep 17 00:00:00 2001 From: Eric Andrechek Date: Wed, 21 Oct 2026 02:44:24 -0400 Subject: [PATCH] parity-surface: on the frozen 1.x line, re-cite the closed issues to #511 21 allowlist entries on main cited closed issues (#500: 19, #499: 1, #487: 1), so the report-only parity-surface job's --check-issues step was red. Those issues closed because their fixes landed on v2 (#500 by #608), not on 1.x: main's surface is frozen, and every interface change goes to the 2.x line, which #511 (open) tracks. By the allowlist's own rule an entry's `issue` is the open issue its fix waits on, so each of the 21 now cites #511. No entry, name or reason changes. v2's allowlist cites only #511 already. Fixes #666 Co-Authored-By: Claude Opus 5.5 --- scripts/parity-surface-allow.json | 42 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/scripts/parity-surface-allow.json b/scripts/parity-surface-allow.json index f2b7eead..929cd384 100644 --- a/scripts/parity-surface-allow.json +++ b/scripts/parity-surface-allow.json @@ -40,7 +40,7 @@ "ArtifactError.Request", "ArtifactError.Source" ], - "issue": 500, + "issue": 511, "reason": "Go has one ArtifactError for the loader's refusals and the fetch layer's errors (§4: 'the fetch layer's and the loader's errors are one family'), so it also carries the fetch error's message, the platform, request and source it was answering, and the wrapped cause (Unwrap). §4 names only the refusal's fields." }, { @@ -70,7 +70,7 @@ "CodeSourceUnreachable", "CodeCacheUnusable" ], - "issue": 500, + "issue": 511, "reason": "The typed values of ArtifactError.Code, which §4's Go column names (`*ArtifactError` with `Code` CHTYPES_…): one constant per code in spec/fetch-v1/constants.json, re-exported from the fetch layer, with the code's CLI exit status and sentinel. Python keeps the same codes as CODE_* constants (its own entry); §4 gives no spelling for them." }, { @@ -100,7 +100,7 @@ "FetchOptions.IdleReadTimeout" ], "reason": "Go-only: the fetch layer's connect and idle-read timeouts (spec/fetch-v1/constants.json `timeouts`), settable on Go's FetchOptions alone. Principle 2 says this convenience belongs in all four or in none; it is carried here as found, not changed, because removing a published field is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "python", @@ -149,7 +149,7 @@ "SourceUnreachableError.code", "CacheUnusableError.code" ], - "issue": 500, + "issue": 511, "reason": "The fetch codes of spec/fetch-v1/constants.json, and each artifact class's code: the attribute §4's Go column calls ArtifactError's `Code` (Go's own entry). §4's Python column names the classes only." }, { @@ -184,7 +184,7 @@ "SourceUnreachableError.retry_after" ], "reason": "The fetch layer's retry hints on an unreachable source (fetch-v1.md §7, the retry table): whether a retry may help, and the server's Retry-After. §4 names the class, not its fields.", - "issue": 500 + "issue": 511 }, { "binding": "python", @@ -214,7 +214,7 @@ "TrustedKey.public_key" ], "reason": "Python's trusted keys are TrustedKey records (key id and raw public key) where Go's FetchOptions.TrustedKeys takes hex strings: a shape difference inside §6's 'trusted keys', carried as found. Changing either is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "python", @@ -235,7 +235,7 @@ "errors.misuse" ], "reason": "Found by this gate: the binding's own constructors for InternalError and UsageError, listed in chtypes.errors.__all__ and so public through the submodule, though the package does not re-export them and the doc gives neither. Dropping them from __all__ is a public-API change for its own pull request; carried here until then.", - "issue": 499 + "issue": 511 }, { "binding": "rust", @@ -287,7 +287,7 @@ "names": [ "Error.code" ], - "issue": 500, + "issue": 511, "reason": "The fetch code of an artifact variant (spec/fetch-v1/constants.json): the Rust spelling of Go's ArtifactError.Code and Python's `.code` (their own entries). §4 gives no Rust spelling." }, { @@ -319,7 +319,7 @@ "names": [ "Refusal.detail" ], - "issue": 500, + "issue": 511, "reason": "Rust's loader refusal carries a free-text detail beside §4's reason, path, want and got (noted in the 1.0 comparison, #435). It is Rust-only, carried as found: removing a published field is a breaking change." }, { @@ -358,7 +358,7 @@ "FetchOptions.platform" ], "reason": "Rust-only: the platform to fetch for, where the other bindings fetch for the host. Principle 2 says this belongs in all four or in none; it is carried here as found, not changed, because removing a published field is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -366,7 +366,7 @@ "doc": "Format.chName", "as": "formatChName", "reason": "§3's vocabularies are const objects in TypeScript (`Format.JSONEachRow` is a number, not an object), which cannot carry a member, so each fact is a free function named for its vocabulary (the 1.0 comparison, #435). Generated from the description by scripts/abi-v1/gen.py; a rename is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -374,7 +374,7 @@ "doc": "Reason.lossy", "as": "reasonLossy", "reason": "§3's vocabularies are const objects in TypeScript (`Format.JSONEachRow` is a number, not an object), which cannot carry a member, so each fact is a free function named for its vocabulary (the 1.0 comparison, #435). Generated from the description by scripts/abi-v1/gen.py; a rename is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -382,7 +382,7 @@ "doc": "Source.isStored", "as": "sourceIsStored", "reason": "§3's vocabularies are const objects in TypeScript (`Format.JSONEachRow` is a number, not an object), which cannot carry a member, so each fact is a free function named for its vocabulary (the 1.0 comparison, #435). Generated from the description by scripts/abi-v1/gen.py; a rename is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -390,7 +390,7 @@ "doc": "Verdict.answered", "as": "verdictAnswered", "reason": "§3's vocabularies are const objects in TypeScript (`Format.JSONEachRow` is a number, not an object), which cannot carry a member, so each fact is a free function named for its vocabulary (the 1.0 comparison, #435). Generated from the description by scripts/abi-v1/gen.py; a rename is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -402,7 +402,7 @@ "ArtifactError.got" ], "reason": "TypeScript keeps a loader refusal's fields (§4: reason, path, want, got) on the classes a refusal raises, ArtifactIncompatibleError and LoaderCorruptError (both implement LoaderErrorFields; their own entry), not on the ArtifactError base the fetch layer's errors share, which carries the code. §4 names the carrier for Go (*ArtifactError) and Rust (Refusal) only; the gate reads Go's for TypeScript and Python, and Python's base does carry them.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -424,7 +424,7 @@ "LoaderErrorFields.got" ], "reason": "Where TypeScript keeps §4's refusal fields (see its `missing` entry for ArtifactError): LoaderCorruptError is the loader's corrupt refusal, a subclass of ArtifactCorruptError so that catching ArtifactCorruptError still catches both (§4's one family); TypeScript-only, noted in the 1.0 comparison (#435). LoaderErrorFields is the interface both refusal classes implement.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -433,7 +433,7 @@ "ArtifactError.code", "ArtifactError.exitStatus" ], - "issue": 500, + "issue": 511, "reason": "The fetch code (spec/fetch-v1/constants.json) and its CLI exit status: TypeScript's spelling of Go's ArtifactError.Code and ErrorCode.ExitCode, Python's `.code` and Rust's Error.code (their own entries). §4 gives no TypeScript spelling." }, { @@ -474,7 +474,7 @@ "BatchOutcome.Unsupported" ], "reason": "The description's batch_outcome vocabulary on its own, generated by scripts/abi-v1/gen.py and exported by TypeScript alone; §3 folds row_outcome and batch_outcome into one Outcome, which TypeScript also exports. TypeScript-only, carried as found: removing an export is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -485,7 +485,7 @@ "DiscoverQueryParam.Table" ], "reason": "The description's discover_query_param vocabulary (the discovery query's two parameters, which §5 names in prose), generated by scripts/abi-v1/gen.py and exported by TypeScript alone. TypeScript-only, carried as found: removing an export is a breaking change.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -510,7 +510,7 @@ "SourceUnreachableError.retryAfterRefused" ], "reason": "The fetch layer's retry hint on an unreachable source (fetch-v1.md §7, the retry table): the Retry-After the client refused to wait for. Python carries retryable and retry_after instead (its own entry): the two bindings differ here, carried as found.", - "issue": 500 + "issue": 511 }, { "binding": "ts", @@ -519,7 +519,7 @@ "isChtypesError" ], "reason": "True for any error the package throws on purpose. TypeScript's ArtifactError (the fetch layer's error class, re-exported) does not extend ChtypesError, so one guard covers the call errors and the artifact errors together; Python's ArtifactError is a ChtypesError, Go has no base and Rust has one Error enum, so none of them needs it. TypeScript-only, carried as found.", - "issue": 487 + "issue": 511 } ] }