Add AGENTS.md, CHANGELOG.md, CONTEXT.md, CONTRIBUTING.md, LICENSE, and
SECURITY.md to the pull_request paths-ignore block in ios.yml,
android.yml, linux.yml, macos.yml, ci.yml, and size.yml. These
root-level docs files were the only gap left after docs/**,
website/**, and README.md — PRs #1568 (SECURITY.md only), #1697
(CONTEXT.md + docs/adr only), and #1722 (AGENTS.md + docs/) each still
triggered a full 9-15 min macOS iOS run despite touching only prose.
Why each file is safe to ignore for every one of these six workflows:
- None of the four device workflows (ios/android/linux/macos) or their
composite actions read any of these six files at runtime; the only
hits from `grep -rln` across scripts/, src/, test/, and
.github/actions/ are prose comments pointing humans at CONTEXT.md or
AGENTS.md sections (e.g. scripts/layering/check.ts,
scripts/wire-compat/run.ts, src/mcp/tool-ref-pins.ts) — never an
`fs.readFileSync`/`readFile` of the file itself.
- The check-affected selector (scripts/check-affected/model.ts)
already classifies all six as pure docs: `isDocs()` matches any
`.md` file plus the literal `LICENSE`, and `docsOwnership()` only
special-cases `website/docs/docs/commands.md` (unrelated). So these
files already select zero checks — they only ever produced
`docsOnlyPaths` entries, never `SelectionReason`s.
- Because they select zero checks, the gate-manifest's path-coverage
category derivation (`scripts/gate/model.ts` `categories()`, which
iterates `plan.reasons`) never records a category for them, so
ci.yml has nothing check-manifest-only that these six files would
need to keep reachable. `pnpm check:gate-manifest` and
`pnpm check:gate-manifest:test` both stay green after the change
(48 checks / 33 lanes, 28/28 gate tests passing).
- size.yml's bundle-size job (scripts/size-report.mjs) measures the
`pnpm build` dist output and startup timing only — no reference to
any of these six files. (npm packs LICENSE/README.md into the
publishable tarball, but that's a `pnpm check:package` node-22.12
concern in ci.yml's packaged-cli job, which is driven by `dist`
contents and `package.json`, not by LICENSE/README prose — already
evidenced by README.md being ignored here since before this change.)
Scope disclosure: `mutation-affected.yml` uses a `paths:` allowlist
(not paths-ignore) so it's structurally unaffected; `test-app-build-cache.yml`
has no path filter at all. Neither was touched.
actionlint and `pnpm check:gate-manifest`/`:test` pass on the changed
workflows.
Summary
#1781 item A9-1: the
pull_requestpaths-ignoreblocks inios.yml,android.yml,linux.yml,macos.yml,ci.yml, andsize.ymlalready excludeddocs/**,website/**, andREADME.md, but not the root-level docs filesCONTEXT.md,AGENTS.md,SECURITY.md,CHANGELOG.md,CONTRIBUTING.md,LICENSE. Verified against history: PR #1568 (SECURITY.md only), #1697 (CONTEXT.md + docs/adr only), and #1722 (AGENTS.md + docs/) each still triggered a full 9-15 min macOS iOS run for a prose-only change.This adds those six files to the
paths-ignoreblock in all six workflows, identically.Files added, per workflow
Same six lines added to
ios.yml,android.yml,linux.yml,macos.yml,ci.yml, andsize.yml(kept identical across all of them, as the existing list already was):Why each is safe (what I grepped)
grep -rln "CONTEXT.md|AGENTS.md|SECURITY.md|CHANGELOG.md|CONTRIBUTING.md|LICENSE"acrossscripts/,src/,test/, and.github/actions/finds only prose comments pointing humans at a CONTEXT.md/AGENTS.md section (e.g.scripts/layering/check.ts:2,scripts/wire-compat/run.ts:12,src/mcp/tool-ref-pins.ts:159) — never anfs.readFileSync/readFileof the file itself. No workflow step, script, or test parses any of these six files.scripts/check-affected/model.ts'sisDocs()already classifies all six as pure docs (.mdglob + the literal'LICENSE'), anddocsOwnership()only special-caseswebsite/docs/docs/commands.md(unrelated). So these files already select zero checks in the affected-selector model — they only ever produceddocsOnlyPathsentries, never aSelectionReason.scripts/gate/model.ts'scategories()(which iteratesplan.reasonsper tracked file) never records a category for any of these six files, so the gate-manifest's path-coverage assertion has nothing that requires these paths to stay reachable in any lane, includingci.yml.size.yml's bundle-size job (scripts/size-report.mjs) measurespnpm build'sdistoutput and startup timing only — no reference to any of the six files. (npm does packLICENSE/README.mdinto the publishable tarball, but that'sci.yml'spackaged-cli-node-22-12job /scripts/check-package.ts, which is driven bydistcontents andpackage.json, not by doc prose — already evidenced byREADME.mdbeing ignored here since before this change.)Scope disclosure
mutation-affected.ymluses apaths:allowlist, notpaths-ignore— structurally unaffected, not touched.test-app-build-cache.ymlhas no path filter at all — not touched.pr-preview.ymluses apaths:allowlist scoped towebsite/**— a root-level docs file was never in its trigger set, so there's nopaths-ignorelist to touch. Not touched.deploy.ymltriggers onpushtomainwith no path filter at all — deliberately not scoped, so nothing to touch. Not touched.ci.ymlwas included: nothing in its jobs (static-checks, layering-guard, typecheck, coverage, fallow, etc.) reads any of the six files at runtime, and the gate-manifest model confirms no check category depends on them.Test plan
pnpm check:gate-manifest— green (48 checks wired across 33 lanes, 1 declared unprovable)pnpm check:gate-manifest:test— green (28/28)actionlinton all six changed workflow files — no output (clean)gh pr list --search "paths-ignore" --state openbefore starting — no conflicting open PRCI note
CodeQL
Analyze (java-kotlin)/Analyze (javascript-typescript)are red from GitHub's 2026-08-17 503 outage during result upload; default-setup scans can't be rerun via API; they will clear on the next push or a UI re-trigger. Nothing in this PR is analyzable by them (YAML only).