unreal: distill two automation-scripting traps (2026-08) - #9
Merged
Merged
Conversation
…pass Adds one new dated finding to unreal/LEARNINGS.md section B: a PowerShell Mandatory parameter silently prompts on stdin when omitted (hanging a non-interactive SSH invocation instead of erroring), and ssh -n swallows a heredoc meant to feed a remote bash -s (the script runs with no input, again with no error). Both were found while authoring the Windows CI automation scripts already covered by items 10 and 14 in this file, but had not yet been carried over from the private working repo. No compression was needed beyond light prose tightening since this is a single small addition; the rest of the file already reflects the private repo's content. Sanitization grep sweep came back with zero unexplained hits. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…26-09) Adds two dated entries to perforce/LEARNINGS.md from a Git->Perforce mirror running against a p4d that ships as a Docker image: the image re-applies its own engine typemap preset on every container start (not just first provision), which silently drops depot-scoped rows another system had appended, with a measured ~8 minute exposure window on one real restart. A second entry covers three related diagnostic traps: the same "Wrong number of words" error string means something different for the typemap spec than it does for the trigger table, p4 exits 1 with empty stdout on both connection and auth failures (so a set -euo pipefail script aborts rather than reading empty), and an idempotency check keyed on a sha trailer needs to match every width its writers actually produce. Compressed roughly 35% versus the private-repo source (72 lines of new material down to 47), consistent with the 30-50% target - kept both findings since each is a concrete, load-bearing trap, tightened the prose around them, and dropped the internal skill cross-reference links since no other entry in this file's history uses them. Sanitization grep sweep (personal names, internal service paths, internal docker/hostnames, issue/branch references) came back with zero hits. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Summary
This is a weekly-schedule distillation pass comparing the private working repo's in-scope files (
LEARNINGS.md,NOTES.md, and the mirroredskills/agents/commandsinstruction files) against what's already reflected in this repo, plugin by plugin.Only one genuinely new item was found: a
unreal/LEARNINGS.mdsection B entry (item 15 in the private file) covering two automation-scripting traps hit while authoring the Windows CI scripts already documented in items 10 and 14 of the public file - a PowerShellMandatoryparameter that silently prompts on stdin when omitted (hanging a non-interactive SSH call instead of erroring), andssh -nswallowing a heredoc meant to feed a remotebash -s. Both are generic scripting gotchas with no internal identifiers, so the sanitization pass made no redactions - it was carried over with only light prose tightening.Everything else checked out already-distilled:
godot,jenkins,lore,perforce, and theunityLEARNINGS.md/NOTES.mdcontent matched what's already here (a few privateunity/LEARNINGS.mdbullets - zero-scene builds,unity projects info, two Windows rig footguns - are absent from the public file, but those look like intentional cuts from the original compression pass rather than un-distilled new material, so they were left alone). Allskills/*/SKILL.md,agents/*.md, andcommands/*.mdfiles across every plugin are byte-identical between the two repos except one.Before/after line counts
unreal/LEARNINGS.md: 172 -> 179 lines (added, not compressed - a single small item, no trimming needed elsewhere in the file).Sanitization grep sweep
Zero hits on the new content (checked for internal fork/service references, private-repo issue/branch pointers, agent-transcript artifacts, and personal names).
Review notes
unity/skills/unity-cli/SKILL.mddiffers between the two repos. The private repo's current version replaced the public repo's safer install flow (downloadinstall.ps1, verify its SHA-256 against a pinned hash, then run it) with a directirm ... | iexpipe-to-Invoke-Expression, dropping the verification step entirely. That reads as a regression in the private repo rather than a new learning to mirror forward, so this PR does not carry it over - the public file's existing (safer) version is left as-is. Worth a human look at why the private copy lost the hash-check step.Update (2026-09-14 pass)
This weekly pass found one further genuinely new item, added to this branch as a second commit: two dated
perforce/LEARNINGS.mdentries from a Git->Perforce mirror running against a p4d that ships as a Docker image, sourced from a single private-repo commit landing after the pass above.The first entry covers the p4d image re-applying its own engine typemap preset on every container start rather than just first provision - since
p4 typemapis one server-wide table with no compare-and-swap, that silently drops depot-scoped rows another system had appended, with a measured roughly 8 minute exposure window on one real restart, and no way to trace who changed the table without a spec depot.The second entry covers three related diagnostic traps hit while chasing the first: the "Wrong number of words for field 'X'" error string means something different for the typemap spec than it does for the trigger table it's normally associated with,
p4exits 1 with empty stdout on both a connection failure and an auth failure (so aset -euo pipefailscript aborts rather than reading an empty string), and an idempotency check keyed on a commit-sha trailer needs to match every width its writers actually produce, not just a fixed 40-character sha.Everything else in this pass's private-repo diff (godot, jenkins, lore, unity, unreal, and all mirrored
skills/agents/commandsfiles) was already reflected here - theunity/skills/unity-cli/SKILL.mdregression noted above is unchanged and still just flagged, not carried over.perforce/LEARNINGS.md: 41 -> 87 lines. The new material itself compressed from 72 lines in the private source to 47 lines here (about 35% cut, within the 30-50% target) - both findings were kept since each is a concrete, load-bearing trap, prose was tightened around the specifics, and the private entries' inline links to thep4-workflows/p4-observeskill sections were dropped since no other entry in this file links to skills inline and the reference reads fine as prose.Sanitization grep sweep on the new perforce content: zero hits (checked for the real internal service-path patterns, docker/hostname patterns, and personal names used in the private-repo commit, none of which appear in the finding's technical content).
No secrets or credential values were found in this pass's source material either.
🤖 Generated with Claude Code