corpus(objective-c, typescript): re-bless args against engine main (gitgalaxy#2773) - #66
Merged
Merged
Conversation
…itgalaxy#2773) Pairs squid-protocol/gitgalaxy#2773, merged as PR #2786 (engine 0b2e9b20), which gave the `args` rule a stated contract -- "args matches the parameters a callable declares", docs/args_rule_contract.md -- and anchored objective-c's and typescript's rules to it. No authoring change: the probe shells are untouched and the fix lands both languages on the planted 13 exactly (one parameter per probe, SPEC.md), which is the mechanical check that the new anchors are correct and not merely narrower. ## Manifests - data/objective-c: main 6 -> 4, a/b/c 5 -> 3. The rule matched every keyword-message SEND (a send is lexically identical to the untyped `label:name` parameter shape #1335 added) and its plain-C arm accepted any `name(...)` followed by `{`/`;`. The extra hits were XCTAssert/NSAssert (test), os_log/DDLogInfo (telemetry), free/release (cleanup) and abort/exit (high_risk_execution) -- other signals' plants, re-counted as arguments. - data/typescript: a.ts 5 -> 3. The class-member arm was `^[ \t]*IDENT(...)` with no declaration anchor, so describe(kit)/expect(kit) -- both `test` plants -- scored as parameter lists. ## Ledger `ts-callparen-args` named four languages; #2773 fixed two of them. - The entry keeps its original verdict verbatim and appends the reversal (the #59-vs-#60 pattern), scoped to the two languages it is named for: `languages_seen` objective-c + typescript, `still_reproduces` false, `upstream_issue` gitgalaxy#2773. Not deleted -- both re-blessed manifests cite this id, and per docs/GATING.md step 4 the manifests change in the same PR that flips `still_reproduces`. - apex and groovy are NOT fixed and move to a new entry, `args-call-site-counting-apex-groovy` (disposition upstream-bug, still_reproduces true, upstream gitgalaxy#2783 / #2782). Same shape #2773 fixed elsewhere: a `^[ \t]*IDENT(...)` member arm whose return-type prefix can match zero times. Their manifests' `notes` are re-pointed at the new id; their numbers do not change. ## Verified - verify_language.py: 46/46 PASS against engine main (0b2e9b20). - na_check.py: 0 unreviewed n/a cells, no new absences.
squid-protocol
added a commit
that referenced
this pull request
Sep 6, 2026
…itgalaxy#2789 (#67) Corpus side of gitgalaxy#2770, step 2 of GATING.md's cross-repo flow. The engine half is gitgalaxy#2789, merged at 08a08c6a with the rosetta:rebless-owed label. No manifests move: dependency_density is a bias-report metric derived from the import_count and coding_loc recorder columns, not a SIGNAL_SCHEMA key, so no expected_signals.json cell changes and no verify_language gate moves -- confirmed by #2789's own rosetta-audit ("46 language(s) checked -- 0 regression(s), 2 pre-existing, 0 broken", the two pre-existing being the objective-c/typescript args drift already re-blessed here by #66). bias-history.yml regenerated the report against engine 08a08c6 in 8ba80c2, so the numbers are already on main. This is the ledger work automation cannot do. control-flow-ratio-denominator-is-a-vocabulary-tally -- NARROWED. Its reading of the SPREAD stands and its cells stay explained, but two other claims did not survive being checked against the engine source: 1. "No engine change is wanted" was scoped to control_flow_ratio itself and silently covered its derived consumer: dependency_density divided by max(int(coding_loc * control_flow_ratio), 1), so a GATED metric was reading this ungoverned denominator. #2789 removed that dependency. 2. The "gitgalaxy compares control_flow_ratio between files WITHIN one repository, where the vocabulary is held constant" defense has two holes the entry never tested. It is a WITHIN-language defect that control_flow_ratio is 0 for any branchless file -- measured over all 46 languages' 184 shells, 133 (72%) record 0, and in 39 of 46 languages exactly three of the four do, since only main.* carries the planted branches -- giving any consumer that multiplies by it a discontinuity of 21x on yaml and 6x on python when one `if` is added. And the within-repository premise holds only for a monolingual repo: security_auditor._build_feature_frame, the very consumer the entry cites, one-hot encodes language but applies no per-language normalisation and no groupby. still_reproduces stays true -- the vocabulary tally is still what control_flow_ratio's own cells measure. Under gitgalaxy#2770 shape (b), branch over coding_loc, the metric becomes plantable and this entry retires instead. no-dependency-capture-languages -- figures superseded, resolution unaffected. Its resolved m4/yacc profile quotes dependency_density "1.0 on a/b and 0.1667-0.2 on main", measured when the denominator collapsed to 1 on a branchless file, so "1.0 on a/b" was the raw import count rather than a density. Re-measured at the new definition: 0.02 on a/b/main and 0.0 on c for both languages -- still the healthy sibling shape, still_reproduces stays false. The old numbers are kept in place because they are what was measured at the time. docs/findings_by_language.md regenerates off the ledger, so #2770 joins the issue list for the languages the narrowed entry covers. That is its whole diff. Gates: bias_report.py --gate exit 0 (0 unexplained cells, 0 length leaks); na_check.py exit 0 (0 unreviewed n/a cells). bias_report.md, bias_data.json and bias_variance_chart.svg regenerate to a ZERO diff against 8ba80c2, confirming this PR changes no measurement. dependency_density's consistency badge reads 93%, up from 83% -- and the old 83% was itself an artifact of the denominator being the constant 1 for most cells. Claude-Session: https://claude.ai/code/session_016BHBDqfybkLJqnQt9AoyTt Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
squid-protocol
added a commit
that referenced
this pull request
Sep 6, 2026
…82, #2783) (#70) Pays the `rosetta:rebless-owed` label on squid-protocol/gitgalaxy PR #2790 (engine 2ca956ac, merged 2026-09-06), which fixed apex's and groovy's `args` rules. #2773's own corpus pairing (PR #66 here) re-blessed only objective-c and typescript, because those were the two languages #2786 fixed; it split apex and groovy out into `args-call-site-counting-apex-groovy` for exactly these two follow-ups. This is that entry being paid. No authoring change: the probe shells are untouched and the fix lands both languages on the planted 13 exactly (one parameter per probe, SPEC.md), which is the mechanical check that the new anchors are correct and not merely narrower. ## Manifests - data/apex: main.cls 7 -> 4, a.cls 5 -> 3. The member arm's return-type prefix carried a trailing `?`, so it could match zero times and the alternative degenerated to the shape of a bare call. The extra hits were the probeBranch/probeIo/probeRisk dispatch calls in main, and isAccessible / StripInaccessible (both `safety` plants) in a. - data/groovy: main 7 -> 4, a 4 -> 3, c 5 -> 3. Same shape, different cause for the zero-length prefix: the return-type run is `{0,3}`, and `def` means a Groovy method genuinely can have no return type. The extra hits were the three dispatch calls in main, assertEquals (a `test` plant) in a, and close/dispose (both `cleanup` plants) in c. b.cls and b.groovy already read the planted 3 and are unchanged. ## Ledger `args-call-site-counting-apex-groovy` -> `still_reproduces: false`, with the fixing PR, the per-file movements and the planted-13 check recorded. The entry is kept, per GATING step 4. ## Verification - `verify_language.py apex` / `groovy` -- PASS, 76 assertions each, 0 mismatches - `rosetta_audit.py` -- 46 languages, **0 regressions** (was 2) - `na_check.py` -- 0 unreviewed n/a cells, no new absences - `language_deviations.py` apex / groovy -- exit 0 Co-authored-by: Joe Esquibel <squid-protocol@users.noreply.github.com> Co-authored-by: Claude Opus 5 (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.
Pairs squid-protocol/gitgalaxy#2773, merged as PR #2786 (engine
0b2e9b20). That PR gave theargsrule a stated contract — "args matches the parameters a callable declares",docs/args_rule_contract.md— and anchored objective-c's and typescript's rules to it. This is step 2 of the cross-repo flow indocs/GATING.md: the engine PR merged withrosetta:rebless-owed, and the manifests + ledger catch up here.No authoring change. The probe shells are untouched. The fix lands both languages on the planted 13 exactly (one parameter per probe, SPEC.md) — which is the mechanical check that the new anchors are correct and not merely narrower.
Manifests
objective-cmain / a / b / ctypescriptmain / a / b / cEvery removed hit was another signal's plant, re-counted as an argument:
label:nameparameter shape #1335 added), and its plain-C arm accepted anyname(...)followed by{/;. SoXCTAssert/NSAssert(test),os_log/DDLogInfo(telemetry),free/release(cleanup) andabort/exit(high_risk_execution) each scored.^[ \t]*IDENT(...)with no declaration anchor at all, sodescribe(kit)/expect(kit)— bothtestplants — read as parameter lists.Ledger
ts-callparen-argsnamed four languages; #2773 fixed two of them.GATING.mdstep 4 requires the manifests to change in the same PR that flipsstill_reproduces). Its original verdict is kept verbatim with the reversal appended — the Plantable cells still unplanted (css/yaml/dockerfile safety), DISP=OLD and %union plants owed, and the pairings for gitgalaxy#2748–#2753 #59-vs-corpus(jcl): plant the PROC, teardown and executor idioms and re-bless against gitgalaxy#2755 (#2748–#2751) #60 pattern — and it is scoped to the two languages it is named for:languages_seen= objective-c + typescript,still_reproduces→false,upstream_issue→gitgalaxy#2773.args-call-site-counting-apex-groovy(upstream-bug,still_reproduces: true, upstream gitgalaxy#2783 / #2782). Same shape #2773 fixed elsewhere — a^[ \t]*IDENT(...)member arm whose return-type prefix can match zero times (apex's carries a trailing?; groovy's run is{0,3}, anddefmeans a method genuinely can have no return type). Baked in per the ledger'supstream-bugrule: the corpus measures what the engine does, not what it should. Their manifests'notesare re-pointed at the new id; their numbers do not change.Verified locally against engine main (
0b2e9b20)verify_language.py— 46/46 PASS, no other language moved.na_check.py— 0 unreviewed n/a cells, no new absences.Related
Two other findings from that audit turned out to be already settled in this ledger, which I had not checked before filing them upstream — corrected in gitgalaxy#2788:
haskell-caf-bindings-count-as-functions(gitgalaxy#2785 closed as not-planned) andm4-parameters-are-use-sites(gitgalaxy#2784 rescoped to theavg_func_argsarity gap only, which that entry does not cover). Nothing owed here for either.🤖 Generated with Claude Code