Summary
While working a content PR (#7469) from a Claude Code on-the-web / remote
sandbox session, I hit two recurring friction points worth fixing so future
agent (and human sandbox/devcontainer) sessions don't have to work around
them:
- Vale can't run in this class of session — neither of its two
supported execution paths works, forcing every commit to use
--no-verify and skip style linting entirely.
yarn lint leaves assets/jsconfig.json modified as an apparent
side effect, adding unrelated noise to otherwise-scoped diffs.
1. Vale is unusable in Docker-less, GitHub-egress-restricted sessions
.ci/vale/vale.sh supports two run modes:
- Local binary (preferred, per the
vale-linting skill and the script
itself)
- Docker fallback (
jdkato/vale:v3.15.1)
Both are unavailable in this session type:
- Docker fallback: no Docker daemon running in the sandbox
(failed to connect to the docker API at unix:///var/run/docker.sock).
- Local binary install: the CI-documented install command —
curl -sfL "https://github.com/errata-ai/vale/releases/download/v3.15.1/vale_3.15.1_Linux_64-bit.tar.gz" \
| sudo tar xz -C /usr/local/bin vale
— returns HTTP 403 from the session's proxy:
{"message":"GitHub access to this repository is not enabled for this session. Use add_repo to request access.","documentation_url":"..."}
errata-ai/vale isn't (and shouldn't need to be) a repo added to a
docs-v2 session's scope just to fetch a release binary.
Impact: core-lint, enterprise-lint, lint-instructions, and every
other product-specific Vale job in lefthook.yml fail outright in this
environment, regardless of whether the changed content has any real style
issues. The only way forward is git commit --no-verify, which skips
all pre-commit hooks for that commit, not just the Vale jobs — including
checks that would otherwise run fine and are useful (link/anchor checks
partially overlap here too, see below). PR #7469's Vale checks did pass
cleanly in real CI once pushed, confirming the content itself was fine — the
gap is purely environmental.
Suggested directions (pick whichever fits docs-v2's constraints best):
- Mirror the Vale binary to a host this proxy allows (e.g., an internal
artifact bucket, npm registry, or one of the already-allowlisted hosts
like registry.npmjs.org/pypi.org), so the documented local-binary
install path works without needing errata-ai/vale in scope.
- Vendor the Vale binary (or a thin installer script fetching from an
allowed mirror) into the repo/devcontainer setup so sandbox sessions get
it automatically, similar to how CI installs it directly in
pr-vale-check.yml.
- Document this specific gap (proxy-blocked GitHub release downloads +
no Docker) in the vale-linting skill or AGENTS.md's existing
"Network-restricted environments" note, with the recommended
--no-verify justification spelled out, so agents don't have to
re-derive it each time.
2. yarn lint (via lefthook) leaves assets/jsconfig.json dirty
Running yarn lint in this session consistently left an uncommitted change
to assets/jsconfig.json:
"paths": {
"*": [
- "*"
+ "*",
+ "../node_modules/*"
]
}
This happened twice in the same session, each time after running the full
yarn lint (pre-commit + pre-push lefthook chain) — not tied to any specific
content change, and unrelated to anything intentionally edited. I reverted it
each time with git checkout -- assets/jsconfig.json to keep the commit
scoped, but didn't track down the exact script/tool responsible (candidates
worth checking: build:ts/tsc --project tsconfig.json, or some
IDE/language-server-style tool invoked transitively during
validate-agent-instructions or packages-audit).
Impact: minor, but it's silent noise that a less careful commit could
pick up unintentionally (git add -A-style staging would include it), and
it suggests some tool in the lint/build chain treats jsconfig.json as a
generated file without that being documented anywhere.
Suggested directions:
- If
jsconfig.json's paths entry is meant to be regenerated
automatically, document that (e.g., a comment in the file, or a note in
assets/AGENTS.md) and consider gitignoring the generated portion or
committing the "correct" post-generation state so it stops diffing.
- If it's not meant to be touched by tooling at all, find and fix
whatever step is writing to it (likely something invoked via yarn lint
or yarn build:ts) — happy to help track it down further if useful,
I just didn't want to block the PR this surfaced on chasing it down.
Context
Both surfaced while working PR
#7469 (InfluxDB 3
canonical frontmatter fix) from a Claude Code remote/cloud session — not
specific to that PR's content, but to the session environment itself.
Summary
While working a content PR (#7469) from a Claude Code on-the-web / remote
sandbox session, I hit two recurring friction points worth fixing so future
agent (and human sandbox/devcontainer) sessions don't have to work around
them:
supported execution paths works, forcing every commit to use
--no-verifyand skip style linting entirely.yarn lintleavesassets/jsconfig.jsonmodified as an apparentside effect, adding unrelated noise to otherwise-scoped diffs.
1. Vale is unusable in Docker-less, GitHub-egress-restricted sessions
.ci/vale/vale.shsupports two run modes:vale-lintingskill and the scriptitself)
jdkato/vale:v3.15.1)Both are unavailable in this session type:
(
failed to connect to the docker API at unix:///var/run/docker.sock).{"message":"GitHub access to this repository is not enabled for this session. Use add_repo to request access.","documentation_url":"..."}errata-ai/valeisn't (and shouldn't need to be) a repo added to adocs-v2 session's scope just to fetch a release binary.
Impact:
core-lint,enterprise-lint,lint-instructions, and everyother product-specific Vale job in
lefthook.ymlfail outright in thisenvironment, regardless of whether the changed content has any real style
issues. The only way forward is
git commit --no-verify, which skipsall pre-commit hooks for that commit, not just the Vale jobs — including
checks that would otherwise run fine and are useful (link/anchor checks
partially overlap here too, see below). PR #7469's Vale checks did pass
cleanly in real CI once pushed, confirming the content itself was fine — the
gap is purely environmental.
Suggested directions (pick whichever fits docs-v2's constraints best):
artifact bucket, npm registry, or one of the already-allowlisted hosts
like
registry.npmjs.org/pypi.org), so the documented local-binaryinstall path works without needing
errata-ai/valein scope.allowed mirror) into the repo/devcontainer setup so sandbox sessions get
it automatically, similar to how CI installs it directly in
pr-vale-check.yml.no Docker) in the
vale-lintingskill orAGENTS.md's existing"Network-restricted environments" note, with the recommended
--no-verifyjustification spelled out, so agents don't have tore-derive it each time.
2.
yarn lint(via lefthook) leavesassets/jsconfig.jsondirtyRunning
yarn lintin this session consistently left an uncommitted changeto
assets/jsconfig.json:"paths": { "*": [ - "*" + "*", + "../node_modules/*" ] }This happened twice in the same session, each time after running the full
yarn lint(pre-commit + pre-push lefthook chain) — not tied to any specificcontent change, and unrelated to anything intentionally edited. I reverted it
each time with
git checkout -- assets/jsconfig.jsonto keep the commitscoped, but didn't track down the exact script/tool responsible (candidates
worth checking:
build:ts/tsc --project tsconfig.json, or someIDE/language-server-style tool invoked transitively during
validate-agent-instructionsorpackages-audit).Impact: minor, but it's silent noise that a less careful commit could
pick up unintentionally (
git add -A-style staging would include it), andit suggests some tool in the lint/build chain treats
jsconfig.jsonas agenerated file without that being documented anywhere.
Suggested directions:
jsconfig.json'spathsentry is meant to be regeneratedautomatically, document that (e.g., a comment in the file, or a note in
assets/AGENTS.md) and consider gitignoring the generated portion orcommitting the "correct" post-generation state so it stops diffing.
whatever step is writing to it (likely something invoked via
yarn lintor
yarn build:ts) — happy to help track it down further if useful,I just didn't want to block the PR this surfaced on chasing it down.
Context
Both surfaced while working PR
#7469 (InfluxDB 3
canonical frontmatter fix) from a Claude Code remote/cloud session — not
specific to that PR's content, but to the session environment itself.