chrome-extensions.sgit.ai / rubric

The quality rubric

The founder's own words about the existing extensions: "all with different levels of quality." A site that says so without a way to measure it is asserting. Every row below comes from a specific incident in the four guides, so a score is a claim about which failures the extension can still suffer — not a style opinion. Grade with three values only: yes · no · not applicable. Never a number out of ten.

Machine-readable twin: rubric.json — the checklist an agent can walk before writing an extension, this site's most useful single artefact for its actual audience.
reported, not computed

The grades in the three columns below are reported from what the guides themselves claim, not independently verified by re-reading source. The recorder's ~3,400 lines live in a separate vault this site does not have access to (gap G2); a real pass would read it (G5, open question Q3). The recorder is graded yes throughout because every check describes behaviour the guides attribute to it. The March Key Vault and September secrets-manager efforts are graded n/a throughout because neither has code to check — a design is read at best, never measured.

#CheckWhyRecorderKey VaultSecrets mgr
A. Does it stay safe to leave running?
A1Never originates a request"Every fact in the dataset is something the target volunteered to a real user in a real session"yesn/an/a
A2Never blocks, delays or alters a response"A recorder that alters a response can break the page it is watching and you will spend a day thinking the target changed"yesn/an/a
A3Every hook wrapped in try/catch; never throws into the pageAn exception in a wrapper is a bug in the target's app, from the target's point of viewyesn/an/a
A4Never transmits; export is a manual downloadThe invariant that makes the tool defensibleyesn/an/a
A5A deny list that is a privacy floor, re-derived per transportMessage content never captured in any mode, including allyesn/an/a
B. Can it prove what it saw?
B1Build version stamped into every artefactTen days lost to a browser running an old build; "a quiet week on the target"yesn/an/a
B2Running build shown in the UI, on the surface opened first, coloured when staleThe badge shipped to the side panel while the popup "went on saying nothing for two versions — exactly the wrong way round"yesn/an/a
B3Coverage reported per surface, including zeroes"A surface absent reads as 'nothing happened'. A surface listed with zero reads as 'we never looked'"yesn/an/a
B4Truncation flagged, with the original length stored"A record that says truncated: true with 4 MiB of content is a fact you can act on. A dropped record is silence"yesn/an/a
B5Skips counted by endpoint in an unparsed tallyThat tally is the to-do list for the next parseryesn/an/a
B6An observations log recording what was refused, and whyTwice settled questions nothing else could, including proving an old build was runningyesn/an/a
C. Does it fail in the right direction?
C1Missing is null; never 0, '' or {}res || {} turned "no answer" into "an answer with nothing in it" and cost two runsyesn/an/a
C2No file constructed from an unchecked valuenew Blob([undefined]) writes the word "undefined" and calls it undefined.jsonyesn/an/a
C3Records with no stable identifier yield nothing, never the previous id"Losing two is correct; mislabelling two is not"yesn/an/a
C4Bulk data never crosses a size-limited channel113 MB export vs chrome.runtime.sendMessage; the fix is to remove the boundary, not widen ityesn/an/a
C5A circuit breaker over live counters, with generous thresholdsThree runs lost silently; "a breaker that trips on noise gets ignored, and an ignored breaker is worse than none"yesn/an/a
C6Failures loud at mechanisms, quiet at dataQuiet-and-counted for what you did not understand; loud-and-stop for what did not workyesn/an/a
D. Is the evidence separable from the interpretation?
D1Phase 0 first — a recorder with no parsers"This is not the product." The best decision in the projectyesn/an/a
D2captures/ read-only; everything else regenerableBeing wrong costs a re-derive, not a re-captureyesn/an/a
D3Derived format versioned, and refused when unknownSilently reading a v1 file understates the dataset without saying soyesn/an/a
D4Code and data in separate stores, with a per-folder publication ruleDifferent sensitivity, lifecycle, size and failure modeyesn/an/a
D5Exports split full / skeleton / debug, with a redaction verifierThe verifier counts what it checked, so "0 leaks" means somethingyesn/an/a
E. Is it built on evidence rather than one example?
E1A shape survey written before the parserFound 58 distinct type names in one run and answered a week-old questionyesn/an/a
E2Routing on what the response says about itselfRequest-side ids are "the caller's opinion"; three result sets shared a path and a prefixyesn/an/a
E3Derived facts verified against an artefact the system produced"Two independent clocks agreeing to within a round trip is strong. One clock agreeing with itself is nothing"yesn/an/a
E4Structural markers read instead of rendered EnglishParsing the sentence works "until the string is localised, pluralised, or A/B tested"yesn/an/a
E5Types in structured identifiers read as data, with branchingA variant means loosen; a different type means branchyesn/an/a
E6Sample caps checked for selecting against the evidence59 of 70 whole — because the whole ones were the small onesyesn/an/a
E7Timestamp provenance labelled (urn vs captured)Lets consumers filter on evidence qualityyesn/an/a
F. Do the tests pin the lessons?
F1Test files auto-discovered; exits non-zero on zero found"'No tests found' and 'all tests passed' must never look the same"yesn/an/a
F2Optional-dependency suites print SKIPPED loudlyA suite silently dropping 11 tests will eventually be why a bug shipsyesn/an/a
F3Test names state decisions, not behaviours"the label goes with the value" tells the next reader why the code looks that wayyesn/an/a
F4Fixtures hand-authored and synthetic; real captures never become test dataA privacy rule that turned out to be a design ruleyesn/an/a
F5A real browser drives anything with a real browser boundaryThe 113 MB messaging bug was "invisible to unit tests by construction"yesn/an/a

Why grade this project's own work

Publishing it means the recorder scores well, the March pack is a plan and mostly not-applicable, and the September brief has no code to grade. A rubric its author's own work does not pass everywhere is the only kind worth trusting — and the honest caveat above (reported, not computed) is itself an instance of the claim-state discipline the rest of this site asks of every number.