Skip to content

corpus(objective-c, typescript): re-bless args against engine main (gitgalaxy#2773) - #66

Merged
squid-protocol merged 1 commit into
mainfrom
corpus/2773-args-declaration-anchor
Sep 6, 2026
Merged

corpus(objective-c, typescript): re-bless args against engine main (gitgalaxy#2773)#66
squid-protocol merged 1 commit into
mainfrom
corpus/2773-args-declaration-anchor

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

Pairs squid-protocol/gitgalaxy#2773, merged as PR #2786 (engine 0b2e9b20). That PR 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. This is step 2 of the cross-repo flow in docs/GATING.md: the engine PR merged with rosetta: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

file before after
objective-c main / a / b / c 6 / 5 / 5 / 5 = 21 4 / 3 / 3 / 3 = 13
typescript main / a / b / c 4 / 5 / 3 / 3 = 15 4 / 3 / 3 / 3 = 13

Every removed hit was another signal's plant, re-counted as an argument:

  • objective-c — 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 {/;. So XCTAssert/NSAssert (test), os_log/DDLogInfo (telemetry), free/release (cleanup) and abort/exit (high_risk_execution) each scored.
  • typescript — the class-member arm was ^[ \t]*IDENT(...) with no declaration anchor at all, so describe(kit)/expect(kit) — both test plants — read as parameter lists.

Ledger

ts-callparen-args named four languages; #2773 fixed two of them.

Verified locally against engine main (0b2e9b20)

  • verify_language.py46/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) and m4-parameters-are-use-sites (gitgalaxy#2784 rescoped to the avg_func_args arity gap only, which that entry does not cover). Nothing owed here for either.

🤖 Generated with Claude Code

…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
squid-protocol merged commit f52daf2 into main Sep 6, 2026
1 check passed
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant