Skip to content

Add full-surface documentation refresh spec - #1049

Merged
aram356 merged 4 commits into
mainfrom
spec-docs-refresh
Sep 24, 2026
Merged

aram356 merged 4 commits into
mainfrom
spec-docs-refresh

Conversation

@aram356

@aram356 aram356 commented Aug 20, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Important

Retargeted on 2026-09-21: the base changed from rc/202608 to main and the head was force-pushed from the rc-scoped refresh (1c6b23a54, preserved at branch spec-docs-refresh-rc) to a docs-only transplant verified against main. The three earlier approvals were given for the rc-scoped diff and predate this change — please re-review.

Brings the documentation content of the refresh to main now, rather than waiting for the rc/202608 release merge. Scope is documentation surfaces only: the docs site, top-level and crate READMEs, the four adapter smoke scripts the guides teach, and the documentation-snippet compile test. The refresh's Rust doc-comments, route-contract tests, startup diagnostics, and CI workflow changes are not included; they land with the release merge from spec-docs-refresh-rc.

What differs from the rc-scoped version reviewers approved

Everything was re-verified against main, and the guides were re-pointed where the branches diverge:

  • The rc-only ts audit ad-templates and ts config ad-templates command families are removed from the CLI guide. Every remaining documented command was probed against a ts binary built from this branch.
  • check-documentation.sh is not included: main's rustdoc does not yet pass with warnings denied (29 intra-doc-link errors that the rc-scoped refresh fixes). testing.md documents the two documentation checks that do run on main.
  • scripts/README.md lists only scripts that exist here; CI-gate links point at AGENTS.md (CLAUDE.md is a symlink on main).
  • Conflicts with main's newer CHANGELOG.md, README.md, TESTING.md, and auction README resolved to main's side; configuration.md keeps both main's initial-deployment steps and the refresh's secret-field migration guidance.

Verification

  • cd docs && npm run lint && npm run format && npm run build — clean; the build fails on dead links and passed.
  • cargo test --test documentation_snippets — the documented integration fixture compiles against main's core.
  • ./scripts/smoke-axum.sh — boots main's Axum adapter end to end.
  • A claims scan extracted every referenced script path, repository path, and route from the transplanted docs and checked each against this tree; the only remaining flags are deliberate (the sentence stating docs/public/CNAME intentionally does not exist, and the gitignored dist/ directory).

Relation to the release branch

The full rc-scoped refresh (with the code changes and the review history above) is preserved at spec-docs-refresh-rc and merges into rc/202608 with the release. When rc later merges to main, its versions supersede these files and restore the rc-only material. Merging this PR publishes the docs site from main via deploy-docs.yml.

Follow-ups

@aram356 aram356 self-assigned this Aug 20, 2026
@aram356
aram356 marked this pull request as draft August 20, 2026 06:53
@aram356 aram356 added this to the 202608 milestone Aug 20, 2026
@aram356
aram356 requested a review from jevansnyc August 20, 2026 16:07
@aram356
aram356 changed the base branch from main to rc/202608 August 20, 2026 17:39
@aram356
aram356 force-pushed the spec-docs-refresh branch 2 times, most recently from 392c994 to 087e1a7 Compare August 21, 2026 03:45
@aram356
aram356 force-pushed the spec-docs-refresh branch 3 times, most recently from f11ad3c to 0ddbb88 Compare August 28, 2026 21:28
@aram356
aram356 removed the request for review from jevansnyc September 1, 2026 02:36
@aram356 aram356 modified the milestones: 202608, 202609 Sep 1, 2026
@aram356
aram356 marked this pull request as ready for review September 8, 2026 19:21
@aram356
aram356 requested a review from dhruv8sh September 16, 2026 19:34
@jevansnyc

Copy link
Copy Markdown
Collaborator

The PR description no longer matches the branch. It still describes the docs-parity tooling that 9dfb956 removed: the "Settings parity (WP3)" block, the settings --check / generate --check / check --all gates, the docs-parity lock hash, and the CLI golden provenance. The "Final documentation-refresh acceptance" section cites head f682c05d and a 107-commit, 140,494-insertion range. The head is 5c043a32, and the diff against rc/202608 is 202 files, +6,113 / -3,602. The WP8 row says cargo doc -D warnings and doctests run in CI, but CLAUDE.md on this branch now lists them under "Manual documentation gates" and says CI does not block on them.

The description becomes the merge record, so please rewrite it against the current head. A short summary of what changed plus the test plan is enough. The generated ledger sections (SHA-256 manifests, "immutable inputs", artifact digests, the Spin receipt with an expiry date) can go; the decision record under docs/internal/audits/ already carries that material.

@jevansnyc

Copy link
Copy Markdown
Collaborator

On the "Review feedback" comment from 2026-09-14 (#1049 (comment)): it is posted from the PR author's account but written as a third-party review, down to "Verdict: Merge it". It also has a "Correction to something I said earlier" about {{RUST_VERSION}} rendering literally, and nobody said that anywhere on this PR. That reads like an automated review pasted verbatim. If a tool produced it, say which one at the top. A merge verdict under the author's name is confusing for anyone reading this thread later.

Two related items:

@prk-Jr prk-Jr left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary

Full-surface documentation refresh plus deterministic parity enforcement: 202 files, ~6.1k insertions / ~3.6k deletions against rc/202608. Reviewed the whole diff — the Rust and TypeScript changes are overwhelmingly doc comments, new #[cfg(test)] route-contract tests, and test-fixture hardening; the only runtime deltas are additive startup diagnostics on Cloudflare and Spin. Public APIs, routes, status codes, and successful-request behaviour are unchanged. All 21 GitHub checks pass on the reviewed head.

1 of the inline comments below carries a one-click GitHub suggestion — use Commit suggestion to apply it as a commit on the PR branch.

Non-blocking

♻️ refactor

  • Canonical CI gate list omits the two template-cache harness steps — see inline at CLAUDE.md:382

Cross-cutting / body-level findings

  • 📝 Spin startup diagnostic now writes directly to stderr — crates/trusted-server-adapter-spin/src/logging.rs replaces log::error! with a direct writeln!(io::stderr(), ...). This is a deliberate, well-documented deviation from the repo's "use log macros, not println!/eprintln!" convention: the EdgeZero Spin logger initializer is a no-op, so the boot failure would otherwise be invisible, and writing directly avoids claiming the process-global logger. Flagging it only so the exception is visible to future reviewers — no action requested.
  • 📝 Cloudflare startup errors now log the full Report debug — crates/trusted-server-adapter-cloudflare/src/app.rs adds worker::console_error! with {error:?} under #[cfg(target_arch = "wasm32")]. The response body still exposes only user_message(), and this matches the pre-existing Spin behaviour, so it is not a new disclosure class. worker is an unconditional cfg(target_arch = "wasm32") dependency, so the cfg gate compiles on both the native and --features cloudflare wasm legs.
  • 👍 Smoke scripts never mutate the tracked working tree — scripts/smoke-fastly.sh copies fastly.toml/edgezero.toml into an isolated mktemp -d project and symlinks crates/, so ts config push --local and the seeded ts_secrets blocks land only in the throwaway workspace. smoke_remove_workspace additionally refuses to rm -rf any path outside the generated prefix. That is a meaningfully safer shape than "mutate and restore on trap", and the three sibling scripts follow the same pattern. Secret values are obviously synthetic (smoke-admin-password-32-bytes-ok, etc.).
  • 👍 Route-registration contract tests across all four adapters — complete_route_registration_set_matches_the_prechange_contract in the Fastly/Axum/Cloudflare/Spin route suites pins the exact (method, path) set, and the matching startup_error_route_set_... tests pin the fallback router. Combined with the existing parity suite this makes a silent route/method regression during a docs-driven refactor very hard to land.
  • 👍 docs/public/CNAME removal and deploy-docs.yml provenance assertion — dropping the your-custom-domain.com placeholder is correct (it would have hijacked the Pages custom domain), and the new grep -R --fixed-strings "$GITHUB_SHA" .vitepress/dist step is backed by a real emitter: docs/.vitepress/config.mts injects provenanceBanner() into every page's parsed markdown and validates the SHA shape, so the assertion cannot silently pass on an unstamped build.
  • 📝 Docs build is enforced on PRs — worth recording since the new Documentation checks workflow is workflow_dispatch-only: the dead-link-failing VitePress build still runs on every PR via format.yml's format-docs job ("Build with VitePress (fails on dead links)"). TESTING.md and the new ## Manual documentation gates section both state the manual-only scope explicitly, so the split is intentional and documented.

CI Status

  • cargo fmt: PASS
  • cargo test: PASS
  • cargo test (axum native): PASS
  • cargo test (cloudflare) / cargo check (cloudflare native + wasm32-unknown-unknown): PASS
  • cargo check/build/test (spin native + wasm32-wasip1): PASS
  • cargo test (cross-adapter parity): PASS
  • cargo test (ts CLI, native): PASS
  • vitest: PASS
  • format-typescript: PASS
  • format-docs: PASS
  • prepare integration artifacts: PASS
  • integration tests: PASS
  • integration tests (Fastly EC lifecycle): PASS
  • browser integration tests: PASS
  • adapter first success (axum): PASS
  • adapter first success (fastly): PASS
  • adapter first success (cloudflare): PASS
  • Analyze (rust): PASS
  • Analyze (javascript-typescript): PASS
  • Analyze (actions): PASS
  • CodeQL: PASS
  • Documentation checks: not run (workflow_dispatch only, by design)

No required checks are configured on this branch.

Comment thread CLAUDE.md Outdated

@jevansnyc jevansnyc left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

checks out sans 2 minor comments which are fine to move forward with outside of housekeeping

@aram356

aram356 commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

Housekeeping from the two 2026-09-17 comments is done:

  • The PR description is rewritten against the current head (1c6b23a): the withdrawn docs-parity tooling sections, stale head SHA, old diff counts, and ledger material are gone, and the rustdoc commands are described as manual gates, matching CLAUDE.md.
  • The 2026-09-14 "Review feedback" comment now opens with an attribution note: it was generated by an automated Claude Code review agent and posted from my account, and its verdict and self-correction are the tool's, not a maintainer's.
  • The "independent review found no Critical or Important issues" line is removed from the status comment; it referred to an automated pass I cannot attribute precisely, so it is dropped rather than named.
  • Add a new-engineer setup page alongside the onboarding guide #1165 is now actually closed as superseded (the earlier claim that it was already closed was wrong, and the status comment says so).
  • prk-Jr's gate-list suggestion is applied in 1c6b23a, adding the two template-cache harness steps to the canonical list.
  • ChristianPavilonis's shared_secret storage-contract follow-up is filed as Resolve trusted_client_ip.shared_secret through the secret store instead of the app-config blob #1186.

…aces

Transplant the reader-facing content of the rc/202608 documentation
refresh (PR #1049) onto main so the docs ship ahead of the release merge:

- Rebuilt guides (adapters, configuration, testing, creative processing,
  integrations inventory, telemetry, tsjs, CLI, API reference), the
  restored public onboarding page, ten crate READMEs, and the internal
  decision and evidence records
- The four adapter smoke scripts plus scripts/README.md, and the
  documentation-snippet compile test
- docs/public/CNAME placeholder removed; VitePress config updated

Re-pointed at main where the release branch differs: the rc-only
`ts audit ad-templates` and `ts config ad-templates` command families are
removed from the CLI guide (every remaining documented command probed
against a main-built binary); CI-gate links target AGENTS.md; the
documentation-checks aggregate script is left out because main's rustdoc
does not yet pass with warnings denied, and testing.md lists the two
commands that do run here; scripts/README.md lists only scripts present
on main. Merge conflicts with main's newer CHANGELOG, README, TESTING,
and auction README resolved to main's side.

Verified: VitePress lint/format/build (dead links fail the build),
documentation_snippets compiles against main's core, smoke-axum.sh boots
main's adapter, and a claims scan checked every referenced script, repo
path, and route against this tree.
@aram356
aram356 changed the base branch from rc/202608 to main September 21, 2026 02:38
@aram356

aram356 commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

Retargeted per maintainer decision: base is now main and the head is force-pushed to a docs-only transplant verified against main (853eb45). The rc-scoped refresh that ChristianPavilonis, prk-Jr, and jevansnyc approved is preserved unchanged at spec-docs-refresh-rc (tip 1c6b23a) and remains the content that merges into rc/202608 at release time. The approvals above predate this retarget and applied to that rc diff, so please re-review against the new, smaller diff; the description lists exactly what changed relative to the approved version. #1187, which briefly carried this transplant, is closed in favor of this PR.

Comment thread docs/internal/audits/documentation-refresh-decisions.md Outdated
Comment thread docs/internal/audits/documentation-refresh-evidence.md Outdated
Comment thread scripts/smoke-common.sh
Comment thread scripts/smoke-axum.sh Outdated
Comment thread docs/guide/cli.md Outdated
Comment thread docs/guide/configuration.md
Comment thread CONTRIBUTING.md Outdated
- Remove the documentation-refresh decision and evidence records: they
  declare rc/202608 as the delivery target and describe code decisions
  (Spin logger, workflow scoping, policy split) that this docs-only diff
  does not carry; both stay accurate on spec-docs-refresh-rc
- Keep the full ts audit and ad-templates command index: PR #823 landed
  on main and the merge from main restored those subcommands, so every
  documented chain is re-verified against a freshly built binary
- Add the missing js_asset_proxy integration to the configuration
  inventory (with a field-level section), the integrations overview, and
  both API-reference tables; the deploy-validated set has 15 entries
- Correct CONTRIBUTING.md: TESTING.md is an auction-orchestration runbook
  that repeats the adapter aliases, not a link index, and the gate link
  points at AGENTS.md
- Give each smoke script a distinct default origin port outside every
  claimed adapter port range, and make smoke_stop_process capture child
  PIDs via pgrep, wait for them to exit after signaling, and escalate to
  KILL on timeout; pgrep is now a declared requirement in all four
# Conflicts:
#	docs/guide/configuration.md
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.

5 participants