Chore: remove the accidentally committed output.txt from the repository root - #429
Open
AmaadMartin wants to merge 1 commit into
Open
Chore: remove the accidentally committed output.txt from the repository root#429AmaadMartin wants to merge 1 commit into
AmaadMartin wants to merge 1 commit into
Conversation
This was referenced Aug 1, 2026
…ry root output.txt (contents: 'hello', 5 bytes, no trailing newline) was committed by accident in google#276, the change that introduced materializeFiles and the skill script tools. It is not source, a fixture, documentation, or a build input, and nothing in the repository references it: the only four occurrences of the string "output.txt" in the tree are an in-sandbox filename in the unsafe local code executor test and in-memory fixture names for a mocked materializeFiles. Deletion only. No ignore rule is added: the skill script integration tests do materialize files into process.cwd(), but constraining that producer belongs to the change that fixes the cwd default, not to this cleanup.
AmaadMartin
force-pushed
the
fix/remove-stray-root-output-txt
branch
from
August 3, 2026 00:53
5e1585b to
cf2a216
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Please ensure you have read the contribution guide before creating a pull request.
Link to Issue or Description of Change
Related: Test: drop the npm install from the AgentLoader discovery integration fixture #276 (the change that introduced the artifact; there is no issue backing this cleanup)
Problem: A 5-byte file named
output.txt, containing the stringhellowith no trailing newline, is tracked at the repository root. It is the only tracked root entry that is not a config, a licence, a manifest, or a doc — it is not source, not a fixture, not documentation, and not a build input.git log --oneline -- output.txtreturns exactly one commit,8d5cc0ac("feat: skills: support script execution", #276) — the change that introducedmaterializeFiles(core/src/utils/file_utils.ts) and the two skill script tools that call it. The file's name and bytes match the{name: 'output.txt', content: 'hello'}fixture used in that PR's unit tests. Provenance claim, stated precisely: as merged, those unit testsvi.mockmaterializeFiles, so running them today writes nothing to disk. The defensible statement is that the artifact was produced by an in-progress local run while #276 was being developed and then swept in by a blanketgit add— not that the merged unit suite recreates it.There is no behavioural bug; the file is inert. The defect is repository hygiene.
Solution: delete the file. One file, one deletion, nothing else:
Evidence the file is orphaned.
git grep -n "output\.txt" -- . ':!node_modules'on the pre-change tree returns exactly four hits, none of which refer to this file:core/test/code_executors/unsafe_local_code_executor_test.ts:301new_output.txtinside a JS snippet the executor runs; different filename, written inside the executor's own scratch directory.core/test/code_executors/unsafe_local_code_executor_test.ts:318new_output.txt.core/test/tools/skills/run_skill_inline_script_tool_test.ts:226Filefixture name;materializeFilesis mocked in that file, so nothing touches the disk.core/test/tools/skills/run_skill_script_tool_test.ts:210It is also invisible to every tool in the repo: absent from
.gitignoreand.prettierignore(grep -n output .gitignore .prettierignore→ no match), not produced/consumed/cleaned by any rootpackage.jsonscript, not matched bynpm run lintornpm run format:check(both glob**/*.ts), not matched byscripts/check_license.sh(*.js/*.tsonly), and not matched by anyincludeinvitest.config.tsortsconfig.json. The root workspace package is private and declares nofiles, so it was never published either way. Nothing is being rewritten: the blob remains reachable in history (git show 8d5cc0ac:output.txtstill printshello).No source, test, or config file is touched. In particular this PR does not change the
process.cwd()default inmaterializeFiles, does not touch the two skill script tools, and does not touch the tests that merely happen to contain the stringoutput.txt.Scope change since the previous revision of this PR (disclosed, not silent). An earlier revision of this branch also appended a root-anchored
.gitignoreblock (/output.txt,/output_from_script*.txt, …). That has been dropped and the branch rebased onto currentmain, because an ignore rule is an explicit non-goal of the approved cleanup:output.txtis a generic filename, and constraining the producer belongs to the change that fixes the cwd default, not to a hygiene deletion. The underlying observation stands and is recorded here as follow-up rather than acted on: four integration cases intests/integration/tools/run_skill_script_tool_test.ts(lines 306, 326, 346) andtests/integration/tools/run_skill_inline_script_tool_test.ts(lines 165, 224, 245) really do materialize intoprocess.cwd(), and their cleanup is a barefs.unlinkat the end of theit()body with noafterEach/afterAll/try-finally, so an assertion failing before the unlink leaves the artifact in the working tree. Open PRs #298, #305, #353, #410, #437, #556 and #564 already target that root cause.Collision check (required, recorded here). Scanned all 531 open PRs on the fork (
gh pr list --state open --limit 1000), thengh pr diff --name-onlyon every plausibly adjacent one. Overlaps found:output.txtoutput.txtoutput.txtoutput.txt+ both cwd-writing integration testsWith the
.gitignorehunk removed this PR is now equivalent to #271, #473 and #539. Only one of these should merge — #271 is the oldest and is a fine choice; this one is kept open only because it is the branch this task tracks. Nothing new was built to compete with them: the diff was reduced, not written.Testing Plan
Please describe the tests that you ran to verify your changes. This is required for all PRs that are not small documentation or typo fixes.
Unit Tests:
fs.existsSync('output.txt') === falsewould pin a property of the process working directory rather than of the library, and is trivially defeated byprocess.cwd()differing under vitest. The regression proof is the git state itself:git ls-files --error-unmatch output.txtmust exit non-zero.unit:coreproject, results below.Proof the check can fail (A/B, in place of a mutation test). With the deletion reverted (
git checkout HEAD~1 -- output.txt),git ls-files --error-unmatch output.txtprintsoutput.txtand exits0andtest ! -e output.txtexits1; with the deletion appliedgit ls-files --error-unmatch output.txtprintserror: pathspec 'output.txt' did not match any file(s) known to gitand exits1whiletest ! -e output.txtexits0. Both directions were re-run on the pushed commit.Verification run on the pushed commit (
cf2a216a4), from the repository root:The whole
unit:coreproject is green and the working tree is untouched afterwards, which is the postcondition this change is judged on. Test-file count is unchanged from the pre-change tree (168); the branch differs frommainby one deleted non-code file, so no test can be added or removed by it.As an optional non-regression spot check the plan also allows
npx vitest run --project integration tests/integration/skills, which exercises the realmaterializeFilespath with the repository root ascwd.{inline,loader,script_sh}/agent_test.tspass and leave the tree clean;script_js/agent_test.tsfails in this sandbox and fails identically on pristinemain— itsbeforeAllrunsnpm installinsidetests/integration/skills/script_jsagainst a proxied registry, measured at 1m04s against a 60s hook timeout, and the body then asserts on live model output. It is a pre-existing environment failure, not a regression; no unrelated test was "fixed", skipped, or weakened here.git status --porcelainwas empty after every run — nooutput.txtwas regenerated by any suite.Manual End-to-End (E2E) Tests:
ls output.txt→ "No such file or directory";git ls-files output.txt→ empty output.git show 8d5cc0ac:output.txt→ printshello.git status --porcelainis empty andgit diff main --statlists exactlyoutput.txt | 1 -.Checklist
unit:core168/168 files, 2351/2351 tests; the only failure anywhere is the pre-existing, baselinedscript_jsintegration suite noted above.