Skip to content

Overhaul docs tone guidance and rewrite platform overview as example - #606

Open
hongyi-chen wants to merge 4 commits into
mainfrom
docs-tone-overhaul
Open

Overhaul docs tone guidance and rewrite platform overview as example#606
hongyi-chen wants to merge 4 commits into
mainfrom
docs-tone-overhaul

Conversation

@hongyi-chen

Copy link
Copy Markdown
Collaborator

What this does

Makes the docs sound like they were written by a person, using the GitHub and Vercel docs as the reference tone. Three parts: expanded tone guidance, enforcement in the drafting/review/lint workflow, and one example page rewritten to demonstrate the target.

1. Tone guidance (AGENTS.md)

The Voice & tone section grows from 5 bullets to a full set of rules with before/after examples pulled from our own pages:

  • Define, show, link - introduce a concept in 1-3 plain sentences, give an example, link out (the GitHub Actions docs pattern).
  • Document the user-visible model, not our architecture - GitHub Actions runs on an orchestrator and a control plane; its docs never mention either. Ours shouldn't either.
  • Every sentence earns its place - no meta-openers ("This page covers..."), no restated cause-and-effect, no recap lines, no repeated caveats.
  • Words to avoid - seamless, powerful, robust, comprehensive, leverage, streamline, delve, "it's important to note", and friends.
  • Structural patterns to avoid - rule-of-three padding, rhetorical question openers, hedging stacks, bold-everything, bullets-as-prose.
  • Stricter callout budget - never consecutive, at most one per section (was "5+ loses impact").

.agents/rules/oz-style-guidelines.md is aligned with the new rules and its stale pre-rename "Ask Oz to..." preferred phrases are fixed.

2. Enforcement

  • draft_docs skill: tone bullets in the critical rules and the pre-publish checklist.
  • review-docs-pr skill: a tone/AI-ism review focus item.
  • style_lint: four report-only checks, never auto-fixed: tone-buzzword, tone-meta-opener, callout-consecutive, callout-density. Words with legitimate uses here (harness, unlock, elevated, journey) are deliberately excluded from the lint. Current baseline across the docs: ~27 pages with buzzwords, 43 meta-openers.

3. Example rewrite: platform/overview.mdx

Modeled on GitHub's "Understanding GitHub Actions": lead with what you can do, define each primitive in a few plain sentences, link out for depth.

  • 308 lines → 80 lines (~65% shorter); 5 callouts → 1 (the time-boxed rename notice).
  • The "Warp Orchestrator" / "cloud control plane" / lifecycle-state internals collapse into user-visible behavior ("Warp tracks every run as a task...").
  • Cut: "Key concepts" glossary dump, "In practice:" recap, "The sections below describe...", duplicated when-to-use lists that belong on child pages.
  • Fixed the one inbound anchor that pointed at a renamed section (environments.mdx: #execution-hosts#hosts).

Follow-ups (not in this PR)

  • platform/environments.mdx (9 callouts, a verbatim duplicated sentence) and platform/integrations/github-actions.mdx ("integrates seamlessly", consecutive callouts) are the next rewrite candidates.
  • A batch pass over the remaining ~27 buzzword-affected pages once this guidance lands.

Validation

  • npm run build passes (376 pages).
  • style_lint regression suites pass (11/11, 21/21); the rewritten overview passes the full lint with 0 issues; new tone checks verified to fire on known-bad pages.
  • Internal link checker: 0 broken links.

Plans:

Expand the AGENTS.md Voice & tone section with concrete anti-AI-slop rules
modeled on the GitHub and Vercel docs: define-show-link pattern, document
the user-visible model (not internal architecture), words to avoid,
structural patterns to avoid, and a stricter callout budget (never
consecutive, at most one per section).

Propagate the rules to the drafting/review workflow:
- draft_docs: tone bullets in critical rules + checklist
- review-docs-pr: tone/AI-ism review focus item
- style_lint: report-only tone checks (tone-buzzword, tone-meta-opener,
  callout-consecutive, callout-density), never auto-fixed
- oz-style-guidelines: align voice section; fix stale 'Ask Oz to...'
  preferred phrases from before the Automation Platform rename

Rewrite platform/overview.mdx as the example page: user-visible model
instead of orchestrator/control-plane internals, one callout instead of
five, ~65% shorter. Fix the one anchor that pointed at the renamed
section (environments.mdx: #execution-hosts -> #hosts).

Co-Authored-By: Warp <agent@warp.dev>
@cla-bot cla-bot Bot added the cla-signed label Aug 21, 2026
@vercel

vercel Bot commented Aug 21, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview Aug 22, 2026 12:46am

Request Review

Copy link
Copy Markdown
Collaborator Author

This PR was generated with Warp.

Comment @warp-agent on this PR to send it follow-up work.

View run View conversation

@warp-factories

Copy link
Copy Markdown
Contributor

Your GitHub account is not connected to Warp. Connect it here.

The tone rewrite over-cut: trigger context, the Warp-vs-customer
infrastructure diagram, API/SDK team use cases, the integration setup
pointer, and cloud provider credentials had no equivalent on linked
pages. Restore them in the new style. Details that live on dedicated
pages (when to use environments, task states, CLI command reference)
stay linked instead of restated.

Co-Authored-By: Warp <agent@warp.dev>
warp-factory-examples #10 (plain-language pass) and #11 (follow-up trims
from human review) surfaced patterns the tone section didn't cover yet:

- Relocate, don't delete: detail in the wrong register (provenance,
  pinned versions, maintainer process) moves to the surface whose
  audience needs it, with a pointer, instead of being cut outright.
- Say it once, across pages: shared boilerplate lives on the parent or
  reference page, not repeated on every sibling.
- Keep the author out of it: no self-commentary, rules stated calmly
  without defensive emphasis, describe the present rather than weaving
  rename history through pages.
- Slashed shorthand reads as notes, not prose.
- Cut again: a plain-language rewrite under-cuts on the first pass;
  follow with a deletion-only pass. #11 existed because human review
  asked for more cutting after #10 had already landed.

Also adds the second-pass and relocation items to the draft_docs
checklist.

Co-Authored-By: Warp <agent@warp.dev>
@hongyi-chen
hongyi-chen marked this pull request as ready for review August 22, 2026 00:43
@warp-for-oss

warp-for-oss Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

@hongyi-chen

I'm starting a first review of this pull request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@warp-for-oss warp-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Overview

This PR expands the docs tone guidance, adds report-only tone checks to style_lint, and rewrites the Automation Platform overview as an example of the new style. The content changes are generally coherent, and I did not find security issues or spec drift, but the new lint behavior is enabled without durable regression coverage.

Concerns

  • The new style_lint tone checks are wired into every scan without tests for the matching and exclusion behavior. Existing lint rules in this repository have focused test_*.py regression scripts, and these regex-heavy checks need the same coverage before they start affecting docs review automation.

Verdict

Found: 0 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

issues.extend(check_screenshot_widths(lines, str(filepath)))
issues.extend(check_video_embed_titles(lines, str(filepath)))
issues.extend(check_callout_syntax(lines, str(filepath)))
issues.extend(check_tone_buzzwords(lines, str(filepath)))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ [IMPORTANT] These new lint checks are enabled for every scan, but the diff does not add regression tests for their matching and exclusion behavior. Existing style_lint rules have focused test_*.py coverage; add cases for buzzwords, meta-openers, inline/code-block skipping, consecutive callouts, and density before wiring these into run_all_checks.

- Don't use corporate or disconnected language
- Skip theoretical posts without practical value
- Don't list features without context or problem-solving
- Don't use AI-slop buzzwords ("seamless," "powerful," "robust," "leverage," "streamline"): name the specific capability instead

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I've been seeing a lot of compound sentences with both em-dashes and colons. These stylistic choices are okay but sparingly, and I'm seeing them in more than 50% of paragraphs on new docs. Maybe we could add a "don't" about overuse of colons/em-dashes, and preferring concise, direct sentences.

@rachaelrenk rachaelrenk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think these changes are really valuable! A couple of things we might add, all on the brevity side.

Every new rule targets words and sentences. Nothing targets page length, which would be a useful thing to check against.

The section that owns length is untouched and prescribes the opposite remedy:

AGENTS.md L230: "If a page exceeds ~1500 words, consider breaking it into sub-pages or using clear anchor links."

Splitting a bloated page gives you two bloated pages. Suggest: cut first, split only if it's still long, with a pointer to "Cut again."

Some other thoughts:

  1. AGENTS.md's own quality checklist got nothing. draft_docs gained 4 tone/brevity items; the AGENTS.md checklist (L900-916) gained zero. That checklist is the authority this PR keeps pointing at, and the two have now diverged.

  2. 7 of 8 page templates carry no brevity guidance. Templates are where drafting starts, and one listing sections invites filling every one. Worth an explicit "delete any section you don't need; a short page is a finished page." (Also true of my template rewrite in #586 — shared gap, not yours.)

  3. 4 per-type drafting skills have no tone/brevity mention: draft_conceptual, draft_quickstart, draft_troubleshooting, draft_feature_doc. draft_quickstart is the sharpest miss — quickstarts have a hard ~600-word budget and it's the one type where length is the constraint.

Note for posterity: there's a small conflict with #586.

CONFLICT (content): Merge conflict in .agents/skills/draft_docs/SKILL.md

Both PRs add bullets to the same "Critical formatting rules" list and the same checklist. AGENTS.md merges clean. Small, but shouldn't be auto-resolved — both sets should survive.

# "harness" (agent harness), "unlock" (login/keychain unlock), "elevate(d)"
# (elevated permissions), and "journey" stay out of the lint and are covered
# by AGENTS.md only.
TONE_BUZZWORDS: List[Tuple[str, str]] = [

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The lint covers 2 of the 6 filler frames in AGENTS.md. Missing: designed to, ensures that, allows you to, in order to. Also missing landscape and realm from Abstract dramatics.

in order toto and allows you to are the highest-frequency AI tells here and are trivially matchable.

The four intentional exclusions are documented in the comment above; these six just aren't here, which reads as oversight rather than judgment. Either add them or note why not.

if in_code_block:
continue
prose = _strip_inline_code(line)
for pattern, suggestion in TONE_BUZZWORDS:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The three new checks ship without tests. style_lint/ already has test_factory_proper_noun.py, test_hardcoded_var_exemptions.py, and test_platform_determiner.py — and the SKILL.md edited in this PR says "Regression cases live in test_factory_proper_noun.py."

Regexes over prose are exactly where false positives creep in. A test_tone_checks.py with the intentional exclusions as negative cases would lock in the judgment calls you already made.

5. **Astro Starlight structure**: Verify `src/sidebar.ts` updates if files were added, moved, or renamed, and that redirects are added to the `redirects` array in `vercel.json` when needed.
6. **Product name variables**: Check whether any product names with a corresponding entry in `src/data/vars.ts` are hardcoded as literal strings instead of using `{VARS.KEY}` (prose) or `{{TOKEN}}` (frontmatter). Key strings to watch for: "Oz CLI", "Oz web app", "oz.warp.dev", "Oz dashboard", "Oz run". Flag as `⚠️ [IMPORTANT]` if a new file adds these without using the variable system. For existing files, flag as `💡 [SUGGESTION]`.
7. **AEO/source-data fit**:
7. **Tone and AI-isms**: Flag marketing buzzwords (seamless, powerful, robust, comprehensive, leverage, streamline), meta-openers ("This page covers/explains/walks through..."), restated cause-and-effect ("This process ensures..."), recap lines, consecutive callouts or more than one callout per section, and internal-architecture detail the reader can't act on (orchestrators, control planes, lifecycle states). Reference the "Voice & tone" section of `AGENTS.md`. Use `💡 [SUGGESTION]` for isolated instances; use `⚠️ [IMPORTANT]` when the pattern is pervasive in new content.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This covers tone thoroughly but never mentions length or the "Cut again" deletion pass. The only adjacent word in the whole skill is "Scannability."

So a reviewing agent flags leverage and misses a 2,000-word page that should be 600 — the more expensive problem, and the one we're actually seeing.

Suggest adding length as its own item: flag pages that could be materially shorter, and check that a deletion pass happened.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants