[sergo] Sergo Report: New 29th Linter ssljson — Impl Narrower Than Its Own Embedded Spec - 2026-06-16 #39495
Closed
Replies: 1 comment
-
|
This discussion was automatically closed because it expired on 2026-06-17T05:39:55.639Z.
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Executive summary
The custom-linter registry grew 28 → 29:
ssljsonis the new addition — and unlike its 28 siblings it is not a Go-pattern linter at all, but a validator of.github/skills/*/ssl.jsonskill artifacts against the SSL Pass-4 enum + graph rules. It has never been audited in 38 runs. The audit found the implementation is narrower than the linter's own embedded spec: the repo's ownssl.jsonenumerates the Pass-4 rules, and two of them are unimplemented. Filed 2 spec-backed issues (sg38a1, sg38a2). Reconciliation also recovered an uncommitted run and confirmed two prior landings.Tool & registry updates
All N-timeafterleak)ssljson(pkg/linters/ssljson/ssljson.go) uses the anchor-package-once idiom (runreturns early unlesspass.Pkg.Path()==anchorPkg,:207) so it emits diagnostics exactly once pergolint-custominvocation — clean.Strategy — 50/50 split
new_linter_precision_audit+enforce_readiness_run_on_prod+phantom_issue_reconcile. Reconciled all 9 open sergo issues + issues created sincelast_runviagh api.ssljson, a project-specific JSON-artifact validator — a linter class never examined in 38 runs. New land-argument crystallized: impl_narrower_than_own_spec (diff the implementation against the spec the artifact itself embeds).Findings
The repo's own
.github/skills/ssl/ssl.json:150(step_verify_validatedescription) defines the Pass-4 rule set the analyzer is meant to enforce:ValidateDoc(ssljson.go:93-149) implements enum membership + entry/transition pointers, but two named rules are missing:sg38a1 — graph-integrity FN: logic-step
scene_idparsed but never validatedSSLStep.SceneIDis decoded (ssljson.go:61) and populated on all 19 logic steps across the 4 productionssl.jsonfiles (reporting,jqschema,error-messages,ssl), yetValidateDocnever references it.entry_scene→scenes,entry_logic_step→steps, transitiontarget→scenes, stepnext→steps). The step→scene back-reference is the only declared relationship left unchecked — a parsed-but-dead field.scene_idnames no scene (typo / rename orphan) passes with zero diagnostics.entry_logic_stepcheck shape (:116-118). Small, single-file + one testdata case.sg38a2 — duplicate scene/step IDs silently deduped: the spec's "unique IDs" rule is unimplemented
sceneIDs/stepIDsare built asmap[string]bool(ssljson.go:96-103), so two scenes (or steps) sharing anidcollapse silently — the second overwrites the first and downstream reference checks resolve against an ambiguous table.ValidateDoc.if m[k] { report }; m[k]=true) in each of the two existing loops. Small.Reconciliation (since last committed run, 06-14)
Recovered run + landings + open-issue status
27525869216auditedtimesleepnocontext(26th) → timesleepnocontext precision: false positive on time.Sleep inside deferred cleanup closures #39323 precision (FP ontime.Sleepin deferred cleanup closure,mcp_inspect.go:138) + timesleepnocontext enforce-readiness: zero production violations after the defer-cleanup FP fix — add to CI #39324 enforce-readiness. Both OPEN. Reconstructed into strategy history. Not refiled — not mine.-timeafterleakis now incgo.yml:1123(14 flags); the 3-site conversion shipped, though the issue is not auto-closed.doc.gonow reads "All 29 active analyzers" with all bullets present; issue still open but no code gap remains.Metrics
27596186434)Recommendations & next-run focus
ssljsonhas more graph rules worth auditing: empty requiredids,entry_scene == ""slipping past the!= ""guard (:106), and unreachable-scene / terminal-reachability checks. Also assess-ssljsonenforce-readiness (the 4 prod files validate clean under current rules).gh apifor sergo issues created sincelast_runbefore picking a strategy.References:
Beta Was this translation helpful? Give feedback.
All reactions