Skip to content

Retire the onboarding workarounds that four merged fixes made untrue - #2493

Merged
erikdarlingdata merged 1 commit into
devfrom
docs/onboarding-retire-fixed-workarounds
Aug 21, 2026
Merged

erikdarlingdata merged 1 commit into
devfrom
docs/onboarding-retire-fixed-workarounds

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

Why

docs/uat-onboarding.md merged (#2476) while the four #2479 fixes were still in flight. They have all landed, and the guide still documents the gaps as things a tester must work around.

That is worse than having said nothing. A tester who follows a workaround for a problem that no longer exists concludes the feature is missing — and the guide is the first thing a new UAT user reads.

What changed

Section Said Now
§1.1 install-darling.ps1 does not check for the runtimes It refuses on missing ASP.NET Core, warns on missing Desktop (#2481)
§2.3 No one place to see your seat; you learn it a surface at a time Seat indicator on the main window, reason in the tooltip (#2483)
§4.4 A rejected request leaves no trace; diagnose from the client Refusals logged with the gate that rejected them (#2486)
§3.5, §4.3 Token shown once; lose it and re-onboard every client --print-web-token / --print-mcp-token (#2487)
Part 6 Four entries claiming the above Removed; restart-only stays, since it is still true

Detail worth keeping

  • The runtime asymmetry is now stated rather than flattened: only ASP.NET Core stops the service, so it refuses; a missing Desktop Runtime just means the viewer will not open, so it warns.
  • The seat indicator's honesty is documented: before the probe returns it says so, and a viewer that cannot reach the store reports that rather than claiming read-only — a status line blaming your role while the service is down sends you to fix the wrong thing.
  • The reprint verbs carry their constraint: elevated, and on the box that encrypted the token, because DPAPI is LocalMachine-scoped. They write a live token to stdout, and the guide says to treat that console accordingly.
  • The rate limit is described (one line per gate per source per 10 minutes, with a folded count), including that a full source budget is itself the signal the port is being scanned.

How the strings were checked

Taken from shipped source, not from the PR descriptions — the earlier round of this work had a message promising a log line nobody wrote.

  • ViewerSeatIndicator.cs:63-64 → "Seat: read-only" / "Seat: read-write"
  • DarlingHttpRefusalLog.cs:345 template + DescribeOutcome (>= 400 → "refused") + Describe(SourceCidr) → the quoted 403 line
  • DarlingCliCommands.cs:247-248 → both verbs and their "run elevated; writes a LIVE token to stdout" caveat

Note

One draft of this added a Part 6 entry about viewer reconnect rate limiting. I had not verified it and removed it — Part 6 is the list testers are told not to file against, so an invented entry there suppresses a real report.

The guide documented four things as gaps a tester had to work around. All
four shipped, so the guide now teaches the workaround for a problem the
product no longer has -- which is worse than having said nothing, because a
tester who follows it concludes the feature is missing.

- 1.1 said install-darling.ps1 does not check the runtimes. It refuses on a
  missing ASP.NET Core runtime and warns on a missing Desktop one; the
  asymmetry is worth stating, since only the first stops the service.
- 2.3 said there is no one place to see your seat, so you learn it a surface
  at a time. There is a seat indicator on the main window now, with the
  reason for this connection in the tooltip.
- 4.4 said a rejected request leaves no trace and must be diagnosed from the
  client. Refusals are logged with the gate that rejected them, which is the
  "token or CIDR?" question answered outright.
- 3.5 and 4.3 said a lost token costs a regenerate and a re-onboard of every
  client. --print-web-token and --print-mcp-token reprint it, elevated and
  on the encrypting box, because the blob is LocalMachine-scoped.

Part 6 loses those four entries. The restart-only one stays, because it is
still true; it just notes that the service says so now.

Quoted strings taken from the shipped source rather than the PR summaries:
the indicator really renders "Seat: read-only", and the refusal line really
begins "MCP refused a request from" for a 403.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@claude

claude Bot commented Aug 21, 2026

Copy link
Copy Markdown

Reviewed. This is a docs-only change (docs/uat-onboarding.md), no T-SQL or C# code touched, so the Lite/Darling parity and T-SQL style checks don't apply here.

Verified every claim against the cited source, not just the PR description:

  • ViewerSeatIndicator.cs — Seat: read-only / Seat: read-write strings match exactly, including the "unreachable ≠ read-only" distinction the doc calls out.
  • DarlingHttpRefusalLog.cs — gate names, the 10-minute DefaultWindow, per-(gate,source) keying, and the aggregate-bucket fallback all match the doc's description of the rate limit.
  • DarlingCliCommands.cs — --print-web-token / --print-mcp-token exist, both documented as "run elevated ... writes a LIVE token to stdout," matching the doc's caveat.
  • install-darling.ps1 — confirmed the refuse-on-missing-ASP.NET-Core vs. warn-on-missing-Desktop-Runtime asymmetry.
  • The added "network blocks need a restart, and the service now says so at startup" line matches DarlingHostBinding.DescribeNetworkBlockLifetime, logged unconditionally in both loopback and LAN modes.

Also checked that removing the four Part 6 entries didn't leave any dangling "see Part 6" cross-references elsewhere in the doc — it didn't. No issues found; this is an accurate and well-sourced update. Nice touch pulling the invented rate-limiting entry per the PR note rather than leaving an unverified claim in a section testers are told not to file against.

@erikdarlingdata
erikdarlingdata merged commit fb5c871 into dev Aug 21, 2026
6 checks passed
@erikdarlingdata
erikdarlingdata deleted the docs/onboarding-retire-fixed-workarounds branch August 21, 2026 22:10
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