Skip to content

Repo docs: SECURITY.md, CONTRIBUTING, READMEs and working docs brought up to date - #553

Merged
fstubner merged 20 commits into
mainfrom
docs/repo-docs
Oct 7, 2026
Merged

fstubner merged 20 commits into
mainfrom
docs/repo-docs

Conversation

@fstubner

@fstubner fstubner commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Audit fixes for the repository's own documentation (areas/repo-docs.md, local only). The release docs (docs/RELEASE.md, docs/PUBLISHING.md) are in the release-pipeline PR, because they have to match its workflow changes.

What changes

  • SECURITY.md:
    • It keeps the private-reporting and email channels. Private vulnerability reporting still has to be switched on in the repository settings, which I could not do.
    • The dead Dependabot link is replaced.
    • A new "What is signed" section covers checksums, Sigstore, Authenticode since 0.3.3, ad-hoc macOS, and how the in-app updater trusts an update.
  • npm package README: its first command was npx netscli scan-ports, which does not exist. It is now npx netscli scan. Every netscli <command> in the owned Markdown was checked against the CLI's real subcommands.
  • netscli-core README: the quick-start compiles. It was checked by compiling it, and fails without the fix.
  • CONTRIBUTING:
    • Node 22, not 18.
    • The Linux GTK/WebKit packages cargo test --all needs.
    • A PR checklist that matches CI.
    • The Npcap SDK path the script actually uses. ARCHITECTURE.md has the same path fix.
  • Working documents:
    • docs/ACCEPTANCE-2026-08-29.md is deleted.
    • PRODUCT.md's origin story now matches the README.
    • ux-walkthrough.md's stale website half is updated. It stays at the root for the acceptance tooling.
  • CHANGELOG: a 0.3.5 Security entry for the dependency advisories fixed since 0.3.4.
  • Smaller fixes:
    • packaging READMEs
    • AGENTS.md drifts
    • the README screenshot retaken from the app's screenshot mode
    • .gitignore gains keys, env files and crash dumps
    • orphaned and duplicate docs images removed. Nothing in the repo links to them.
    • crates.io keywords and categories, and netscli.com as the crates' homepage
  • OUI vendor data: no NOTICE is needed. IEEE asserts no copyright in the listings, according to Debian's ieee-data copyright file. One provenance sentence is added to the core README.

Checked

  • The core README example compiles. A temporary doc-test include passed, and failed without the ?.
  • cargo publish --dry-run --no-verify packages all three crates.
  • A relative-link check over the changed Markdown found 0 broken links.
  • The prose checker passes, plus manual dash, semicolon and colon greps.

Follow-ups not in this PR

  • SECURITY.md describes the release pipeline as it is today. If the release-pipeline PR adds signature checks to the install scripts or signs the .mcpb bundles, SECURITY.md needs a matching line. I'll do that when both are in.
  • scripts/generate-oui.rs stores IEEE's short and long company names together. So 199 vendor names read like "DeltaSolutio Delta Solutions LLC". Found by this pass, not by the audit.

Add the in-app updater and the release assets to the scope, and a section
on what each release asset carries (checksums, Sigstore signatures,
Authenticode on Windows, ad-hoc signing on macOS, the updater key) read from
release.yml and scripts/release. Say the updater key cannot be replaced
quietly, replace the Dependabot alerts link that 404s for everyone but a
collaborator, drop the snapshot of moderate advisories that has gone stale,
and take the em dashes, semicolons and inline colons out of the prose.
The npm package page opened with 'npx netscli scan-ports', a subcommand that
does not exist (the CLI's is 'scan'; scan_ports is the MCP tool). Also bring
the packaging READMEs in line with the pipeline: the Scoop GUI manifest no
longer carries an installer block, the AUR and Scoop publish jobs re-hash
assets rather than reading the sidecar, winget is submitted by the publish
jobs, the macOS dmg is ad-hoc signed rather than unsigned, and a single
registry is re-run with the 'only' input. Drop two private finding ids.
The netscli-core quick example iterated a Result (scan_host returns
Result<Vec<PortResult>>), so result.port did not compile. Add the ? and mark
the fence no_run. Checked by compiling it, and by including the README as a
doctest on a scratch copy of lib.rs, which failed on the old text and passed
on the new.

Also list the mdns feature, UdpScanner, OsHint and trace_route, say where the
OUI data comes from, point the CLI crate page at CONTRIBUTING.md for building
from source (the main README does not cover it), say --json and --yaml are on
every subcommand that returns a result, and drop the em dashes.
…, Npcap path

CONTRIBUTING said Node 18+, but .nvmrc and the desktop app's engines field
need 22. Add the apt packages cargo test --all needs on Linux (the list ci.yml
installs), replace the three-command PR block with what CI actually runs, and
name the Npcap SDK location the scripts read (NPCAP_SDK, then
%LOCALAPPDATA%\netscli\npcap-sdk) and scripts/check-linux.sh.

ARCHITECTURE named C:\tmp\netscli-npcap-sdk, which test-pcap.ps1 stopped
using on 2026-08-15. Also fix the ownership map's scan.rs (only scan/ exists),
say the CLI embeds the MCP crate, and add npm run lint to the gate list.
It was one agent's verdict on one workstation, written in the builder
context, and most of what it records is no longer true (the site nav, a
deleted v0.3.0 tag, pages.yml being manual-only). Nothing links to it, the
current acceptance tool writes its report under the git-ignored
.agent-evidence/, and the history still has it.
The origin paragraph said the MCP server was built first and quoted a line
the README no longer contains. The README (rewritten 2026-09-17) says the
terminal UI came first, then MCP, then the CLI, then the desktop app. Drop the
'tension' paragraph, which claimed the README and website both lead with the
agent story, and point the Rust version at rust-toolchain.toml.
Add os_hint to the module table, MICROSOFT-STORE.md and release/ to the layout,
say tauri 2 rather than 2.0, mark test:tauri-render as local only (it is not a
PR check and fails on the hosted runner), point the Node and Rust versions at
.nvmrc and rust-toolchain.toml, and name the two required checks (CI Gate,
Site Gate). Same test:tauri-render note in ARCHITECTURE's gate list.
The desktop screenshot predated the 0.3.4 UI (no Version column, no TCP/UDP
selector) and showed a single e2e row with a real-looking LAN address. Retake
it from the app's screenshot mode (the documented Store route: the production
frontend served locally, ?demo=screenshot&tab=scan, headless Chrome), which
uses the documentation address range 192.0.2.0/24.

Also say --json and --yaml are on every command that returns a result (setup,
serve, completions, man and mcp-service have no result), mention the npx and
.mcpb routes next to the MCP config, list the interface coverage docs page,
and link the licence.
docs/assets/overview.svg and docs/screenshots/tui-preview.svg were dropped
from the README in the 2026-09-17 rewrite and are referenced nowhere. The
overview diagram also still names internals that have since changed (it says
ipconfig and arp -a, and raw ICMPv4 and TCP connect). History keeps both.
docs/screenshots/gui-discover.png, gui-dns.png and gui-interfaces.png are
byte-identical to site/public/assets/, which is what the docs site serves
(desktop.md points at /assets/...). Nothing in docs/ or the README links to
the copies here. Separate commit so it can be dropped if they are kept as
originals on purpose.
Add *.key, *.pem, .env*, *.stackdump and *.dmp. git check-ignore showed none
of them were ignored (Git Bash leaves *.stackdump files behind when a command
crashes), and git ls-files -ci shows no tracked file matches the new patterns.
Drop two private finding ids from comments, and say the DEVLOG was committed
once and removed on 2026-05-03 rather than that it was never public.
The workspace defines keywords and categories, but members only inherit
authors, license, repository, edition and rust-version, so crates.io showed
none for netscli, netscli-core or netscli-mcp. netscli inherits the workspace
values. The two libraries get their own, because 'tui' and 'cli' do not
describe a library. Metadata only. Checked with cargo metadata and a
cargo publish --dry-run --no-verify of all three, which packages without
uploading. Takes effect on the next publish.
Three npm advisories were cleared since v0.3.4, all in build tooling.
source-map-js (GHSA-68fv-2mgg-jv7q) was in both lockfiles and
http-cache-semantics (GHSA-ch52-4w7c-c8xp) in the site's, found from the
commit log. smol-toml (GHSA-r4xh-jqrq-34v2, published 2026-10-05) is the
third. It is not in the log, so it was found by running npm audit against the
v0.3.4 and current lockfiles, which differ by exactly those three. cargo
audit reports the same three allowed warnings on both Cargo.lock files.

Also turn the one mid-sentence colon in 0.3.4's nmap line into a full stop.
Re-walked a production build of main (0.3.5) at 1440px and 375px, and read
the app source for the desktop half. Fixed what was wrong: the hero's release
now lives in the badge (the star count, download total and View source link
share a line), the FAQ has 5 groups not 4, the landing page has a Compare
section, the docs have no visible breadcrumb (narrow screens get an On this
page bar), an unreleased entry is unlinked because there is nothing behind
it (its tag page does load, so 'a link would 404' was wrong), and with
GitHub unreachable no entry is labelled Not yet released. docs/ is not where
the CLI, TUI and MCP docs live any more.

Known gaps: removed the ones that no longer reproduce (the two header
controls now match exactly, the install panel was slimmed, the coverage
matrix uses check marks and says the interfaces share a binary, the theme
control has a correct focus ring and a styled menu, anchors scroll smoothly,
the active sidebar marker stays put, there is no visible breadcrumb) and
updated the padding numbers. The desktop gap about test:tauri-render now says
what the weekly workflow does. Required headings (Primary job, Steps, States)
are untouched.
The tool list used ' — ' between each name and its description, and the prose
had a spaced em dash and two semicolons. Put the tools in two tables, and make
inspect_host's row match what the tool now reports (it also gives MAC vendor
and an OS hint, not just ping, scan and DNS). Same text otherwise.
docs/screenshots/gui-scan.png now comes from the same screenshot mode as the
Store images. Record the one flag that differs, so the next retake after a UI
change can use the same recipe.
@github-actions

github-actions Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Site preview: https://pr-553.netscli-site-preview.pages.dev

Built from 2e276bb with NETSCLI_PREVIEW=1 — noindex, and analytics disabled so it does not report into netscli.com's numbers.

Production is unaffected: netscli.com is served from GitHub Pages via pages.yml, which is manual-only.

# Conflicts:
#	CHANGELOG.md
#	apps/netscli-cli/README.md
@fstubner
fstubner merged commit 76877df into main Oct 7, 2026
20 checks passed
@fstubner
fstubner deleted the docs/repo-docs branch October 7, 2026 23:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant