Repository navigation
fix(gitignore): anchor runtime output paths so video/export source is tracked - #4
paopaonyapi-creator wants to merge 1 commit into
Conversation
… tracked `export/` was written for one root-level directory -- export-package-builder defaults its output to join(process.cwd(), "export", jobId) -- but an unanchored pattern matches at every depth, so it also covered src/agent-os/video/export/ and kept a real source file out of the index. Two tracked modules import that file, so every fresh clone failed `bun run typecheck` with TS2307, which reddened the gates job and therefore the ci aggregate on every branch since 2026-09-09. It stayed invisible because the file compiles on the machine that wrote it and `git add` on an ignored path is a silent no-op unless forced. Anchor /data/, /export/ and /scratch/. Leave go/ unanchored: that tree is retired at every depth and its pattern is deliberately broad, with its own repo-hygiene guard. Add the regression test so the class is caught, not just this instance: every relative runtime import of a tracked src/ module must resolve to a tracked file. It asserts against the git index rather than the filesystem, which is the only way to see this failure at all -- the developer disk and the repository disagree here, and existence checks cannot tell them apart. Verified red on the two importing modules before the fix, green after.
|
✅ Deterministic PR hygiene checks passed. |
|
Correction to the Verification section above. It says this PR "clears
So the fix does what it claims for its own scope — The next layer is unrelated to this PR: Nothing in this PR touches i18n or the dashboard, so I am leaving it out of scope rather than |
…ied launch plan Add FlociAwsAdapter and the launch-plan layer that configures it, against the upstream configuration reference rather than LocalStack habits. The decisive fact is that FLOCI_PORT exists, which is what makes one emulator instance per sandbox possible and therefore makes the isolation guarantee in section 11.2 real instead of aspirational. Pin by digest, not tag: the published channel is only latest and dated nightlies with no stable semver, so the section 66 rule can only be satisfied immutably. Record that, the Java and Vert.x runtime, the absence of npm and PyPI packages, and the per-service image variables, in docs section 10.2 -- those variables are also the answer to the section 74 question about where the image allowlist lives. Two refusals that matter more than the features: - listResources throws RESOURCE_DISCOVERY_FAILED instead of returning an empty list. An empty list would tell the observatory, the diff engine and the promotion gate that the sandbox holds nothing, and a "no leaks" verdict built on that is worse than no verdict. Inventory comes from Terraform state in M3, and upstream documents no resource-listing endpoint or core health route. - The launch plan has no path to process.env and emits no AWS_ variables. Upstream's own quickstart is `eval $(floci env)`, which would put fake credentials and a local endpoint into every later process; configuring the emulator and configuring a client of it are kept as separate surfaces for exactly that reason. Also corrects three fidelity markers against upstream's own service table -- EventBridge and API Gateway REST are in-process, so the old PARTIAL would have forced a section 43 production retest the emulator does not need. Step Functions stays PARTIAL because upstream says nothing about it, and a guessed fidelity is precisely what section 42 forbids. Verified: 175 pass / 0 fail across the subsystem, policy and hygiene sets; typecheck reports zero errors from src/agent-os/cloud-sandbox (the three remaining TS errors are issue #3, removed by PR #4); privacy:scan clean.
…ied launch plan Add FlociAwsAdapter and the launch-plan layer that configures it, against the upstream configuration reference rather than LocalStack habits. The decisive fact is that FLOCI_PORT exists, which is what makes one emulator instance per sandbox possible and therefore makes the isolation guarantee in section 11.2 real instead of aspirational. Pin by digest, not tag: the published channel is only latest and dated nightlies with no stable semver, so the section 66 rule can only be satisfied immutably. Record that, the Java and Vert.x runtime, the absence of npm and PyPI packages, and the per-service image variables, in docs section 10.2 -- those variables are also the answer to the section 74 question about where the image allowlist lives. Two refusals that matter more than the features: - listResources throws RESOURCE_DISCOVERY_FAILED instead of returning an empty list. An empty list would tell the observatory, the diff engine and the promotion gate that the sandbox holds nothing, and a "no leaks" verdict built on that is worse than no verdict. Inventory comes from Terraform state in M3, and upstream documents no resource-listing endpoint or core health route. - The launch plan has no path to process.env and emits no AWS_ variables. Upstream's own quickstart is `eval $(floci env)`, which would put fake credentials and a local endpoint into every later process; configuring the emulator and configuring a client of it are kept as separate surfaces for exactly that reason. Also corrects three fidelity markers against upstream's own service table -- EventBridge and API Gateway REST are in-process, so the old PARTIAL would have forced a section 43 production retest the emulator does not need. Step Functions stays PARTIAL because upstream says nothing about it, and a guessed fidelity is precisely what section 42 forbids. Verified: 175 pass / 0 fail across the subsystem, policy and hygiene sets; typecheck reports zero errors from src/agent-os/cloud-sandbox (the three remaining TS errors are issue #3, removed by PR #4); privacy:scan clean.
|
Reviewer note: this PR cannot turn its own
So
#2 is currently stacked on this branch, so this PR merging first is also what unblocks that base. |
Closes #3
Summary
export/in.gitignorewas written for one root-level runtime output directory —export-package-builder.tsdefaults its output tojoin(process.cwd(), "export", jobId)— but anunanchored pattern matches at every depth, so it also covered
src/agent-os/video/export/andkept a real source file out of the index for its entire existence.
src/agent-os/video/index.ts:23,src/agent-os/video/mcp-tools.ts:8), so every fresh clone failedbun run typecheckwiththree
TS2307/TS2305errors. That reddened thegatesjob, andgatesfeeds theciaggregate, which is why
Cross-platform CIhas failed on this repository on every branch since2026-09-09 — including pull requests that touch nothing related.
/data/,/export/and/scratch/, and adds the previously untrackedsrc/agent-os/video/export/export-package-builder.ts(260 lines, unchanged content — it is beingcommitted as written, now that git can see it).
go/is deliberately left unanchored. Its breadth is intentional: the comment block above itrecords that
go/internal/cli/config_parity.gowas swept into the index by a broadgit addthree times and reached
devonce, andtests/repo-hygiene.test.tsguards it. Narrowing thatpattern would reopen a documented recurring accident.
import of a tracked
src/module must resolve to a tracked file.Verification
The test asserts against the git index (
git ls-files), not the filesystem, which is the only waythis failure is visible at all: the developer's disk and the repository disagree here, and an
existence check cannot tell them apart. It reuses the existing
trackedFiles()helper and theruntime-import matcher shape from
tests/core-lab-boundary.test.ts, including dynamicimport().Scope was measured before anchoring, not assumed. Of 72 ignored paths sitting in nested
data//export//scratch/directories, exactly one was owned solely by a bare pattern — thesource file above. The rest are held by independent rules (
docs-site/.gitignore:6:node_modules/,.gitignore:2:dist/), so anchoring frees nothing unintended. Verified after the change:/data/,/export/,/scratch/still ignore root-level runtime output, andgo/still matches atevery depth.
Not fixed here, stated so it is not mistaken for scope creep or for silent acceptance: the
remaining baseline failures —
test 1/4–test 4/4(a Windows process-spawn group:ocx restart,ocx status --json, journal ownership),npm-globalon all three OS at the "downloads bundledbun" step,
storage policyandapi usage— are separate defects with separate causes. This PRclears
gates/ci-aggregate causality only. On a local full runbun run teststill exceeded itsown 900s budget on this machine, so repository CI is the authoritative signal for the shards.
One follow-up observation now that the file is reviewable:
buildPackageaccepts a caller-suppliedoptions.destinationDirand writes eight files into it without constraining it to a workspace root(
export-package-builder.ts:165). Its callers are management-API routes, so this is not reachableanonymously, and I have left the behaviour unchanged rather than widen this fix.
Checklist