docs(humanizer): v5.1.0 release notes across plugin + marketplace docs
- Plugin README: add "What's New in v5.1.0" section with humanizer overview, before/after example, plain-language vocabulary table, --raw flag docs. Bump version badge 5.0.0 → 5.1.0. Add Version History row. - Plugin CLAUDE.md: add humanizer.mjs + humanizer-data.mjs to Scanner Lib table. Add "Plain-Language Output (v5.1.0)" section documenting output modes, vocabularies, and Wave 5 lessons. Bump test count 635 → 792 across 52 test files. - Marketplace root README: bump config-audit entry 5.0.0 → 5.1.0, update one-line description to mention plain-language UX, add bullet for the v5.1.0 humanizer, bump test count 635+ → 792+. Test-normalizer hardening (consequence of growing CLAUDE.md): walkClaudeMdCascade walks upward from the marketplace-medium fixture into this plugin's own CLAUDE.md, so any docs edit ripples into `scanners[*].activeConfig.claudeMdEstimatedTokens`. The v5.0.0 byte-stability contract is about scanner internals being unchanged, not ancestor input content being frozen. Normalizers in json-backcompat, raw-backcompat, posture-humanizer, scan-orchestrator-humanizer, and snapshot-default-output now strip claudeMdEstimatedTokens to <ANCESTOR_DERIVED>. The default-output snapshot for scan-orchestrator was re-seeded via UPDATE_SNAPSHOT=1 (intent: Wave 6 docs additions; humanizer prose unchanged). Verify: - grep -E "5\.1\.0|v5\.1\.0" README.md CLAUDE.md ../../README.md | wc -l = 12 - node --test 'tests/**/*.test.mjs' = 792/792 pass - self-audit configGrade A (97), pluginGrade A (100), readmeCheck.passed true
This commit is contained in:
parent
819fd47ce0
commit
fc8808d6e4
9 changed files with 170 additions and 10 deletions
|
|
@ -67,9 +67,24 @@ async function ensureDriftBaseline() {
|
|||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Normalizers — strip time / path fields that vary between runs.
|
||||
// Normalizers — strip time / path / ancestor-derived fields that vary
|
||||
// independently of scanner internals. `claudeMdEstimatedTokens` is computed
|
||||
// by walking the FS cascade upward from the fixture; any edit to this
|
||||
// plugin's own CLAUDE.md ripples into it, even though scanner behavior is
|
||||
// unchanged. The byte-stability contract covers scanner output shape, not
|
||||
// the size of ancestor input docs.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
function stripAncestorDerived(envOrEnvelope) {
|
||||
if (Array.isArray(envOrEnvelope?.scanners)) {
|
||||
for (const s of envOrEnvelope.scanners) {
|
||||
if (s?.activeConfig && 'claudeMdEstimatedTokens' in s.activeConfig) {
|
||||
s.activeConfig.claudeMdEstimatedTokens = '<ANCESTOR_DERIVED>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeScanOrchestrator(env) {
|
||||
const out = JSON.parse(JSON.stringify(env));
|
||||
if (out.meta) {
|
||||
|
|
@ -81,6 +96,7 @@ function normalizeScanOrchestrator(env) {
|
|||
s.duration_ms = 0;
|
||||
}
|
||||
}
|
||||
stripAncestorDerived(out);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
|
@ -96,6 +112,7 @@ function normalizePosture(p) {
|
|||
s.duration_ms = 0;
|
||||
}
|
||||
}
|
||||
stripAncestorDerived(out.scannerEnvelope);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue