chore(missing_docs): audit bookkeeping for the 2026-08-24 drift-watch run - #614
Conversation
…aleness false positives
Map POST /factory/{uid}/runs and POST /factory/automations/{id}/run as
internal, regenerate the surface snapshot, and stop the staleness audit
from matching link/image destinations and the generated telemetry table.
Co-Authored-By: Oz <oz-agent@warp.dev>
Co-Authored-By: Warp <agent@warp.dev>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This PR was generated with Warp. Comment |
|
Your GitHub account is not connected to Warp. Connect it here. |
|
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 Powered by Oz |
There was a problem hiding this comment.
Overview
This PR updates missing-docs audit bookkeeping for two Factory API surfaces and adjusts the staleness audit to ignore non-prose link targets and the generated telemetry table. I found one correctness issue in the telemetry-table exclusion that can suppress stale-terminology findings outside the intended page.
Concerns
- The generated telemetry table skip is applied to every document, so any page with the same heading can hide stale terms below it instead of limiting the exception to the privacy telemetry table.
Verdict
Found: 0 critical, 1 important, 0 suggestions
Request changes
Comment /warp-agent-review on this pull request to retrigger a review (up to 3 times on the same pull request).
Powered by Oz
Co-authored-by: warp-for-oss[bot] <277970191+warp-for-oss[bot]@users.noreply.github.com>
… titles The convention I introduced, "missing_docs bookkeeping: <version>", quietly contradicted create_pr's existing rule that docs PR titles carry a prefix. It also invented a third naming shape in a change whose whole point is that two competing shapes are what let #614 and #624 miss each other. "chore(missing_docs): bookkeeping for <version>" matches the shape #614 already used, matches the repo's conventional-commit practice, and still carries both terms the documented search keys on -- verified against #614, whose title has exactly this form and which the search finds. Co-Authored-By: Warp <agent@warp.dev>
#614 landed the same two /factory map entries this branch adds, so the surface map conflicted. Resolved in favour of main: #614 placed each route beside its logical neighbours with a comment explaining why it is internal, which is what the skill asks for. This branch had both as bare uncommented lines in one spot. Dropping the duplicates leaves each route mapped exactly once. The snapshot auto-merged cleanly and needed no regeneration: this branch's regen is a strict superset of #614's. Both contain the two /factory route additions; this one additionally records CtrlCCancelsThirdPartyHarness going dogfood -> ga and OpenWarpNewSettingsModes being removed. Verified the merged snapshot is byte-identical to this branch's original. Both of those flag changes were already triaged here -- CtrlCCancelsThirdPartyHarness has a map ignore entry explaining it has no setting, menu, or CLI surface, and OpenWarpNewSettingsModes was pruned from the map. Neither is silently swallowed by the advancing snapshot. The ledger anby the advancing snapshot. The ledger anby the advancing snapshot. The ledger-Authored-By: Warp <agent@warp.dev>
* missing_docs: keep at most one bookkeeping PR open The PR strategy said a bookkeeping PR "is independently mergeable in any order." That is true against feature PRs, which is the case it was written for. It is false against a second bookkeeping PR: both edit feature_surface_map.md and surface_snapshot.json, and the snapshot is a wholesale regen, so a conflict between two of them cannot be resolved by hand at all -- it has to be regenerated on the merged tree. #614 and #624 are that collision, sitting open right now. Two drift-watch runs a day apart independently triaged the same two /factory routes, reached the same Gate 0 verdict, and each added the same two map lines. Neither looked for the other's PR, and they used different branch-naming schemes, so there was no way to find one from the other. Run #2's ledger eway to find one from the other. Run #2's ledger eway to find one from the other. Run #2's ledger eway to find one from the other. Run #2's ledger eway to find one from the other. Run #2's ledgeran stays rare. Changes: - Scope the independence claim to feature PRs, and add the rule: check for an open bookkeeping PR first, extend that branch, and re-run --commit and --update-snapshot there so the marker and snapshot stay one regen covering every release the PR carries. Wait for the merge instead when it is already approved. - Standardize the title (missing_docs bookkeeping: <version>) and branch (missing-docs/boo (missing-docs/boo (mise search (missing-docs/boo (missing-docs/boo (mise search (missing-docs/boo (miste their inconsistent titles. - Triage now reads the ledger and map as they stand on any open bookkeeping PR, not just on main. A verdict in an unmerged PR is still a verdict. - Carry both into drift-watch step 8 and the scheduled-agent prompt, which is the only copy a cron run is guaranteed to read. Co-Authored-By: Warp <agent@warp.dev> * missing_docs: use the repo's existing prefix style for bookkeeping PR titles The convention I introduced, "missing_docs bookkeeping: <version>", quietly contradicted create_pr's existing rule that docs PR titles carry a prefix. It also invented a third naming shape in a change whose whole point is that two competing shapes are what let #614 and #624 miss each other. "chore(missing_docs): bookkeeping for <version>" matches the shape #614 already used, matches the repo's conventional-commit practice, and still carries both terms the documented search keys on -- verified against #614, whose title has exactly this form and which the search finds. Co-Authored-By: Warp <agent@warp.dev> * missing_docs: restrict bookkeeping-PR search to avoid self-match The gh pr list --search "missing_docs bookkeeping in:title" query ANDs the two words anywhere in the title, so it also matches this rule-only PR's own title ("...keep at most one bookkeeping PR open"). The next drift-watch run would then check out and extend this PR's branch instead of a real bookkeeping PR. Restrict the search to the quoted "bookkeeping for" phrase, which matches the canonical and legacy bookkeeping-PR titles but not this PR's title, and add reviewDecision to the output so the already- approved exception can be applied without a second query. Apply the same corrected query to the recommended scheduled-agent prompt. Co-Authored-By: Warp <agent@warp.dev> --------- Co-authored-by: Warp <agent@warp.dev> Co-authored-by: warp-agent-staging[bot] <240773466+warp-agent-staging[bot]@users.noreply.github.com>


Summary
Bookkeeping companion to the
missing_docsdrift-watch run of 2026-08-24: surface-map entries for the two newly detected Factory REST routes, a refreshed surface snapshot, and two fixes to the staleness audit that were producing permanent false positives.The run found no undocumented features, CLI commands, slash commands, or settings, and no map-hygiene, stale-doc-reference, unlisted-page, or changelog-verification findings. No feature doc PRs accompany this one. The only other output is #613, which syncs the OpenAPI spec.
Changes
references/feature_surface_map.mdTwo new
/factoryroutes appeared in warp-server since the last snapshot. Both are mappedinternal, matching every other route in that namespace:POST /factory/automations/{id}/run— fires an automation's cron trigger immediately; markedx-internal: truein warp-server's canonical spec, so its own publish filter strips it.POST /factory/{uid}/runs— dispatches a run to a factory. This one is not markedx-internalupstream, so it needed a separate rationale: it stays out of the docs copy because thesync-openapi-specpolicy excludes the entire/factorynamespace (factoryinEXCLUDED_TAGSplus the/factorypath prefix) while the Factory REST API is unreleased. The map comment records that distinction and points at the exclusion to revisit when the API ships.Neither is hand-documented: warp-server is private, and per the skill's "Public vs. private surfaces" guardrail an endpoint absent from the released spec is treated as not-yet-public.
references/surface_snapshot.jsonRegenerated with
--update-snapshot. Only those two routes changed.scripts/audit_docs.py— staleness false positivesThe staleness audit reported 29 findings, none of them actionable. Two causes were mechanical and are fixed here; the rest are triaged below.
Link and image destinations were matched as prose.
strip_code_spansremoved code spans so CLI examples wouldn't trip terminology rules, but left](...)targets in place. Every singleagent-modehit was a URL slug or an asset filename —](/knowledge-and-collaboration/warp-drive/agent-mode-context/),](../../assets/terminal/agent-mode-suggestion-1.png). Neither is fixable wording: renaming a published page to chase a terminology change breaks inbound links, and image filenames are not reader-visible. The[...]label is left alone, since that half is prose. Removes 5 findings, two files entirely.The generated telemetry table was matched as prose. All three
privacy.mdxhits (warp ai,ai command,ambient agent) were inside the exhaustive telemetry table, which therelease_updatesskill'supdate_telemetry.pyregenerates wholesale from the client's event definitions. Those strings are code-derived; editing them here is reverted on the next release, and the real fix is upstream in the event definition. The audit now stops at the### Exhaustive telemetry tableheading, mirroring the same constant that script uses. Removes 1 finding.Net: 29 → 23 findings, with the remainder being genuine style-guide questions rather than audit noise.
Deferred findings
Nothing below was silently dropped — each was checked against source and left for the owning skill or a human decision.
Deferred to
style_lint(23 low-severity terminology findings)The
missing_docsskill delegates pure wording tostyle_lint, and each of these is a wording judgement rather than a docs gap. Grouped by term:ai credits(10 files) — needs a style-guide decision first.AGENTS.mdline 831 says "credits (lowercase, not 'AI credits')" and line 837 says to drop the "AI" prefix throughout, but line 833 uses "AI credits" itself when defining compute credits: "Used alongside AI credits and platform credits when describing credit types." The docs consistently follow the second reading, naming the inference bucket in the three-bucket model (AI / compute / platform).AGENTS.mdcontradicts itself here; resolving that is a style-guide change, not an audit fix, so the rule was left as written.warp terminal(7 files) — the rule already permits this "unless distinguishing," and every hit is the distinguishing case: client vs. backend in the enterprise architecture diagram, the local terminal vs. the cloud platform on the harness pages, and the product name in the enterprise product list. The one arguable hit isterminal/more-features/index.mdx("Explore additional Warp terminal features").warp ai(3 files) —faqs.mdxis a deliberate historical reference ("What happened to the old Warp AI chat panel?"). The other two are the phrase "Warp AI credits," which folds into theai creditsdecision above.ai command(1 file) — "AI Command Search" is a live feature name, still present in the client source (app/src/terminal/input.rs,app/src/settings/input.rs,app/src/tips/tip_view.rs).generate command(1 file) — a word-boundary artifact: the page says "generate command suggestions," a verb phrase, and Generate still ships (the page is already titled "Generate (Legacy)"). The rule was left intact rather than narrowed, since weakening it to kill one benign match risks missing a real one.Deferred elsewhere
scripts/suggest_reviewers.pyresolved no owner forpublic_api/openapi.yaml,router/handlers/public_api/factories.go, orrouter/handlers/public_api/factory_automations.go— warp-server's.github/CODEOWNERSand.github/STAKEHOLDERShave no rule coveringpublic_api/orrouter/handlers/public_api/. Adding one there (a job for thesync-stakeholdersskill) would let future spec syncs route themselves.Validation
test_audit_docs.py→ 12 tests, OK (including the accounting-totality and snapshot-roundtrip checks)test_suggest_reviewers.py→ 15 tests, OK--diff: exit 0,api_routesfindings 0 (was 2),surface_changes0 (was 2),unaccounted: nonenpm run build→ exit 0Reviewers
No reviewer assigned. The docs repo has no
CODEOWNERS, and recent history on.agents/skills/missing_docs/is almost entirely the account opening this PR, so there is no second owner to route to automatically.Unverified claims
None — this PR adds no page content. Every claim about route visibility was checked against
warp-server/public_api/openapi.yamlandpublic-openapi-filter.yaml, and every claim about a live feature name against the publicwarpdotdev/warpcheckout.Co-Authored-By: Oz oz-agent@warp.dev
Co-Authored-By: Warp agent@warp.dev