docs: rewrite README and npm page around what the gate catches - #304
Open
EivMeyer wants to merge 4 commits into
Open
docs: rewrite README and npm page around what the gate catches#304EivMeyer wants to merge 4 commits into
EivMeyer wants to merge 4 commits into
Conversation
release: promote Opcore 0.2.2 nested-workspace fix
Both pages led with "changed-file validation gate", a category husky and lint-staged already occupy, and spent the hero example on a TS2322 that tsc already reports. The graph, which is the part nothing else does, sat in a subtitle clause. - lead with the whole gate and one exit code, not one check family - hero example shows a blocking FAIL next to two graph-only WARNs, with severities visible, so nobody reads dead-code as blocking - document introduced report mode, which was undocumented on both pages despite being the reason the gate is usable in a repo with existing debt - group checks by the decay they find rather than by language, so a Python or Rust reader is not told they are second tier before seeing any value - surface the ten documentation checks and clone.duplication, previously absent from both pages entirely - state 41 checks with 25 in the default gate, verified against the check-id arrays and against a real `check --changed` manifest, rather than no number - add Known limits covering five distinct failure modes: graph must be built, docs checks are opt-in, higher-order usage reads as dead (#299), public entrypoints need declaring, Python maturity - add `opcore graph build` to the command list; a fresh repo reports nothing structural until it runs - drop four denial sentences that answered accusations nobody made, and the internal term "evidence" everywhere it was not naming a graph edge Counts verified on main @ ab887a7: typescript 10, rust 11, python 9, docs 10, clone 1. Python grew from 6 with the ruff and pytest checks from #258/#259. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TytwH459JMysvWDj1PopjH
opcore emits graph findings before compiler diagnostics. Verified on a live run: TS_DEAD_CODE_UNUSED_EXPORT lands at position 2, the TS2322 errors at 3 and 4. The example had FAIL first, which was a rhetorical reordering rather than a transcript, and it buried the findings nothing else produces. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TytwH459JMysvWDj1PopjH
check-workspace.mjs enforces a machine-checked copy contract that the rewrite broke in three places, which is why CI went red on this branch: - README.md must include "hybrid" (check-workspace.mjs:178); the architecture sentence had been reworded to drop it - packages/opcore/README.md must include "Unsupported platforms return typed degraded status" and "freshly `git init` repo with no commits" Also removes "fan-in hotspots" and "god modules". No adapter implements either. rust.graph-signals emits RUST_GRAPH_DEAD_PUB_EXPORT, RUST_GRAPH_MODULE_CYCLE, RUST_GRAPH_MODULE_ORPHAN and RUST_GRAPH_UNTESTED_SURFACE, and it is Rust-only, so attributing fan-in detection to TypeScript was wrong twice over. The claim predates this branch; it is on main today in both the hero subtitle and the TypeScript row. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TytwH459JMysvWDj1PopjH
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.
Summary
Rewrites
README.mdand the npm page atpackages/opcore/README.md. No code changes.Both pages opened with "changed-file validation gate", which is the category husky, lint-staged and every pre-commit config already occupy, and then spent the hero example on a
TS2322thattsc --noEmitalready reports. The Rust graph, which is the only claim on the page a competitor cannot copy, was a subtitle clause beginning "Backed by".What changed
Lead with the gate, not one check family. The hero is now the whole pass and the single exit code. An earlier draft of this led with dead exports instead, which was worse:
TS_DEAD_CODE_UNUSED_EXPORTiswarningseverity and exits 0, so headlining it would have promised blocking behaviour the check does not have.The example shows the mix. One blocking
FAILnext to two graph-onlyWARNs, severities visible. The type error demonstrates the gate is sufficient; the dead export and the missingTESTED_BYedge demonstrate what a per-file linter cannot reach.Introduced report mode is documented. Neither page mentioned it.
check --changeddefaults to--report-mode introduced(packages/opcore/src/check.ts:167, and the CLI help says so at:246), so a pre-existing error in a file you touched does not block you. That is the reason the gate survives contact with a repo that has debt, and it was invisible.Checks grouped by decay type, not by language. Structure, untested surface, duplication, size and complexity, documentation, correctness. The old table sorted by stack with a
Deep / Useful / Experimentalcolumn, so a Python reader met "Experimental" before meeting any value. Stack maturity survives as a small reference table with counts instead of adjectives.The documentation checks exist now. Ten of them, named, labelled opt-in. They were absent from both pages.
clone.duplicationwas too.Numbers. "41 checks, 25 in the default gate." Neither page carried a quantity.
Known limits, five distinct failure modes. Graph must be built first, docs checks are opt-in, higher-order usage reads as dead (#299), public entrypoints need declaring, Python maturity. A specific admitted flaw with an issue number buys more trust than the four denial sentences it replaces.
Removed. "not for remote publishing or opaque ratings", "does not publish, install packages, run wrapper tools, or edit source files", "does not invent findings or ratings", and the "Providers assess; ASP hosts decide" slogan. Four denials of accusations nobody made. Also "Metric output is named evidence and deltas", which parses to nothing, and the term "evidence" everywhere it was not naming a graph edge.
Added
opcore graph buildto the command list. On a fresh repo I got zero structural findings until I ran it, then nine. Real first-run cliff, undocumented.On the count
Counted against the
check-ids.tsarrays onmain @ ab887a7: typescript 10, rust 11, python 9, docs 10, clone 1 = 41.Worth flagging: python grew from 6 to 9 when
python.ruff-lint,python.ruff-formatandpython.pytestarrived with #258 and #259. Anything still saying 38 is counting againstaf09b7c.The default gate is 25, taken from an actual
check --changedmanifest rather than inferred:{ typescript: 7, rust: 11, python: 6, clone: 1 }. The 16 opt-in checks reconcile exactly: 10 docs,typescript.lint, two config-gated TypeScript checks, and the three new Python ones, all carryingdefaultScopes: [].Verification
tests/launch-claim-scrub.test.mjs8/8npm run release:hygienepassestests/package-identity.test.mjs5/5. This one caught a real mistake: my first draft reworded the ASP provider section and dropped the required "opcorepackage exposes both" phrasing, which the test asserts against both this README anddocs/quickstart.md. Restored.packages/validation-*/src/.Open question
I regrouped into six buckets rather than the deck's CLEAN / CONTEXT / SHAPE, because three buckets made "Shape" and "Clean" carry too much. If the deck and README should use identical language, say so and I will collapse them back.