docs(security): #84 ends with the hardware, not another window - #500
Merged
Merged
Conversation
#84 was holding a reboot window open for an overwrite that had already been carried out on 2026-09-12, and it was holding it on the strength of STILL ACCEPTED verdicts that the same day's measurement withdrew. neo does not check the community on GETBULK at or below sixteen characters, so every earlier sighting of the old string and of stock public/private was that bypass rather than a table row. SECURITY.md, docs/security.md and docs/roadmap.md were brought in line at the time; the issue was not, so it was the last artefact still directing a reader to overwrite a community row and reboot the switch the whole house runs through. Rewritten, and it stays open. docs/security.md carried a live contradiction. Its credentials-in-history table still asserted that neo "still accepts its previous community, and the stock public and private besides - measured 2026-09-06 and 2026-09-09", which are precisely the withdrawn GETBULK artefacts, while SECURITY.md recorded the row as unverified. The rotation runbook names this file as the one that must move with SECURITY.md and warns that leaving it stale "makes the two disagree, which is worse than either being stale alone". It had been disagreeing since 2026-09-12. SECURITY.md's transcript-leak row justified not rotating the switch community on the grounds that rotating it "means the neo residual above all over again". That reasoning is spent: the overwrite it feared was done and persisted, and per #444 the CRS326 is commissioned with v2c off entirely, so the leaked value is retired along with the PDU that served it rather than replaced by a fresh one. Recorded, so commissioning cannot quietly carry it across. Also sharpened "the string was not to hand in the window", which read as not yet. It is not recoverable, so the previous community's row retires with the hardware rather than by measurement - and noted that measuring it was never the expensive part, since --old is a single GET and the agent outage the issue warned about belonged to the deletion attempts. Delivery of the replacement is recorded as estimated 2026-09-23, a courier estimate rather than an arrival, and the swap is a house-wide outage sharing a rack visit - so it is the earliest a window could be picked, not a date this closes on. No device was touched: no render, no reload, no rotation, no reboot. docs/hardware.md, README.md and ADR-0018/0041 are deliberately untouched; a concurrent session owns those and was sent the delivery date and the commissioning requirement directly. make validate and python3 scripts/check_docs.py both pass. Refs #84 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
6 tasks
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.
What changed
Three documents, no device, no code.
SECURITY.md— the 2026-08-20 transcript-leak row justified not rotatingthe switch community on the grounds that rotating it "means the
neoresidualabove all over again". That reasoning is spent, and the row now says so.
Gave the accepted residual a stated horizon. Sharpened "the string … was not
to hand in the window", which read as not yet, to what is actually true: it
is not recoverable, so the previous community's row retires with the hardware
rather than by measurement.
docs/security.md— corrected a stale claim that contradictedSECURITY.md. Its credentials-in-history table still asserted thatneo"still accepts its previous community, and the stock
publicandprivatebesides — measured 2026-09-06 and 2026-09-09". Those are precisely the GETBULK
artefacts withdrawn on 2026-09-12. Mirrored the transcript-leak update and
added the delivery estimate.
docs/roadmap.md— the Retire the MokerLink switch's previous SNMP community #84 entry block only.Plus issue #84 rewritten (body,
comment),
and its dead links to #231 and #232 dropped — neither issue exists in this
repository.
Why
#84 was holding a reboot window open for an overwrite that had already been
carried out on 2026-09-12, and holding it on the strength of
STILL ACCEPTEDverdicts that the same day's measurement withdrew:
neodoes not check thecommunity on GETBULK at or below sixteen characters, so every earlier sighting
of the old string — and of stock
public/private— was that bypass ratherthan a table row.
SECURITY.md,docs/security.mdanddocs/roadmap.mdwere meant to movetogether at the time. Two of the three did. The issue was the last artefact
still directing a reader to overwrite a community row and reboot the switch the
whole house runs through, and
docs/security.mdhad been contradictingSECURITY.mdfor five days — the rotation runbook names that file as the onethat must move with it, and warns that "leaving this one stale makes the two
disagree, which is worse than either being stale alone."
What is actually left on #84 is not a window. It is one unmeasurable thing: the
pre-rotation string was purged from git history and the operator confirms it is
not recoverable, so
--oldhas nothing to type. Worth recording that measuringit was never the expensive part either —
--oldis a single GET, and the agentoutage the issue warned about belonged to the deletion attempts.
So #84 closes when the MokerLink hardware leaves the rack. It stays open until
then.
Blast radius
secrets/*.sops.yamlNothing was run against a device: no
make render, nomake reload, norotation, no reboot. Documentation only.
docs/hardware.md,README.md, ADR-0018 and ADR-0041 are deliberatelyuntouched — a concurrent session owns those for #444 and was sent the delivery
estimate and the commissioning requirement directly. It confirmed the leaked
community is handled there: per ADR-0041 the CRS326 comes up with v2c off
entirely, so the value is retired along with the PDU that served it rather than
replaced by a fresh one.
Verification
make validatepasses —all checks passed (3 skipped), exit 0, zeroFAILs, run against these exact files. Notable sections:documents agree with the configs(docs OK — 82 Prometheus + 18 Loki rules, 7 dashboards, 141 panels, 10 assertions), all six Lint checks including markdownlint,and
snmp inventory consistent across targets, generator, render and example. The 3 skips are validate's standard ones, not new.git diff --statshows only the three intended files.Refs #84
🤖 Generated with Claude Code