feat(laws): reach agency adjudications — committee decisions and 행정심판 재결 (WI-P7)#101
Merged
Merged
Conversation
The oversight question the package could not answer was "did the supervising body actually act?" The statute was reachable and the court ruling was reachable, but the disposition in between was outside the surface entirely: a 개인정보보호위원회 의결, a 공정위 과징금 처분, a 조세심판원 재결. The audit doc had them all listed as optional, gated on demand being proven — and a harness whose whole purpose is asking whether a regulator did its job is that proof. Seventeen bodies, one code path: twelve committees (ppc ftc fsc sfc kcc nhrck acr nlrc eiac iaciac oclt ecc), the general 행정심판 docket, and four special tribunals. The request shape is identical everywhere; only the vocabulary differs, and that is normalization's job rather than seventeen near-copies of one method. All seventeen were probed live on 2026-07-19 with the shared default OC — every one answers list and detail, no 활용신청 needed. Authority is a field, not decoration. A 위원회 결정 is an administrative disposition by the regulator itself; an 행정심판 재결 reviews another agency's disposition and can itself be overturned in court. Neither is precedent. They get separate kinds (committee_decision_text vs administrative_appeal_text) and separate authority sentences, because sharing one is how a reviewable disposition ends up cited as a settled one. The zero-hit discipline matters more here than anywhere else in the package. This family gets used to ask whether a regulator failed to act, and reading 0건 as "never disposed of anything" is wrong in exactly that direction — 비공개, 미접수, and wrong-docket all return zero. The signal says so, and points at the special tribunals, whose 소청·조세·해양안전 cases are absent from the general decc list. Four normalization traps, all found by probing rather than by reading: - The special tribunals answer a request for `acrSpecialDecc` with rows keyed `decc`, so matching on the requested target returns nothing and reads as "this tribunal has no records". Rows are found by shape instead. - Several targets return the literal string "null" for absent fields, which renders as a plausible case number in an answer. - Committees write dates as `2020.6.8.` — unpadded, trailing dot — which the shared compact_date passes through untouched. In an oversight question the date is the finding, so it is normalized here. - Field values arrive as bare strings, arrays, or single-key objects for the same concept depending on the body; `str()` on those yields a repr. Also fixes brief mode to reset each field to its own declared default rather than a blanket "": `text: str` and `full_text: str | None` mean different things by absence, and blanking a nullable field to "" turns "not loaded" into "loaded and empty" — a claim about the document rather than about the request. --brief now also drops `reasoning`, the bulk of an adjudication. Verified live: ppc search+load (id 9745), ftc search+load (id 17363), decc search+load (id 273321), and the 조세심판원 special docket. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Why
The oversight question this package could not answer was "did the supervising body actually act?"
The statute was reachable. The court ruling was reachable. The disposition in between was not — a 개인정보보호위원회 의결, a 공정위 과징금 처분, a 조세심판원 재결. The audit doc listed all of them as
optional, gated on demand being proven; a harness whose purpose is asking whether a regulator did its job is that proof.What
Seventeen bodies, one code path. Twelve committees (
ppc ftc fsc sfc kcc nhrck acr nlrc eiac iaciac oclt ecc), the general 행정심판 docket (decc), and four special tribunals (acr adap tt kmst). The request shape is identical everywhere; only the vocabulary differs, and that's normalization's job rather than seventeen near-copies of one method.All seventeen probed live on 2026-07-19 with the shared default OC — every one answers list and detail, no 활용신청 needed (this was the plan's blocking pre-check).
Authority is a field, not decoration
A 위원회 결정 is an administrative disposition by the regulator itself. An 행정심판 재결 reviews another agency's disposition and can itself be overturned in court. Neither is precedent.
They get separate kinds and separate authority sentences. Sharing one is how a reviewable disposition ends up cited as a settled one.
The zero-hit discipline matters most here
This family gets used to ask whether a regulator failed to act, so reading 0건 as "never disposed of anything" is wrong in exactly that direction — 비공개, 미접수, and wrong-docket all return zero. The signal says so, and points at the special tribunals, whose 소청·조세·해양안전 cases are absent from the general
decclist.Four normalization traps, all found by probing rather than reading
acrSpecialDeccwith rows keyeddecc"null"for absent fields2020.6.8.(unpadded, trailing dot)compact_datepasses it through; sorts wrong — and in oversight the date is the findingstr()yields a Python repr that travels as the agency's wordingAlso
--briefnow resets each field to its own declared default rather than a blanket"".text: strandfull_text: str | Nonemean different things by absence, and blanking a nullable field to""turns "not loaded" into "loaded and empty" — a claim about the document rather than about the request.--briefalso dropsreasoning, the bulk of an adjudication.Verification
Live: ppc search+load (id 9745), ftc search+load (id 17363), decc search+load (id 273321), 조세심판원 special docket. 511 deterministic tests pass (25 new).
🤖 Generated with Claude Code