distill: perforce -Mj mirror, unity OpenSSH/schtasks and Hub 3.x learnings - #11
Open
butterstack[bot] wants to merge 2 commits into
Open
butterstack[bot] wants to merge 2 commits into
butterstack[bot] wants to merge 2 commits into
Conversation
The private repo's agent instructions for perforce learned that tagged-JSON mode (p4 -Mj) writes every record, including errors, to stdout and leaves stderr empty - so an agent that classifies failures by reading stderr gets nothing but a bare exit status. Mirrors that guidance into the public perforce agent instructions verbatim, including the parse recipe, the two traps in the JSON stream, and a new row in the failure-class table for the "exit status N and nothing else" symptom. This is an instruction-file change (agents/perforce.md), not a LEARNINGS.md entry, so it is mirrored per DISTILLING.md section (f) rather than compressed: no step or table row was dropped. The private source names an internal connector by name; this generalizes it to "a real webhook-ingestion connector," consistent with how the same validation story is already described elsewhere in this file's LEARNINGS.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…learnings The private repo validated the fix for the OpenSSH process-tree-kill trap already noted in this file: a one-shot scheduled task launched via schtasks runs outside the SSH session's process tree and survives it, verified end to end with a cold import and a WebGL build on Unity 6000.3.22f1. Also records the two mechanisms that look like fixes and are not (cmd start hangs the session, Start-Process without -Wait dies at session exit anyway), Hub 3.53's headless install behavior (CDN rate cap, per-component progress text that isn't proof of a finished install, real cold-import/build timings), and the narrow provider list on Hub's "Add project from repository" flow. Mirrored (not compressed, per DISTILLING.md section f): unity-build SKILL.md gains section 8 with the wrapper/schtasks recipe verbatim, and agents/unity.md gains the matching symptom-table row. The private source's numbered LEARNINGS.md cross-reference (B8/B10/B12) is rewritten to the public file's unnumbered convention (LEARNINGS.md paragraph B), consistent with how unity-pipeline/SKILL.md already references this file. Sanitization: the private source names the rig `beast` in the Hub-install example; genericized to "a wired gigabit test machine," consistent with how the existing "primary test rig" bullet in this file already anonymizes the same machine. Final grep sweep on the changed lines: zero hits. No secrets or credential values were present in the source material. Excluded from this pass: the private repo also added two entirely new plugins, teamcity and buildkite, since the last distillation. Per the rationale already recorded on this PR, bringing a new plugin into this repo needs more than the skills/agents/commands/LEARNINGS files this job is scoped to (plugin.json, hooks.json, the guard script, README, and marketplace registration all need to land together, plus a security review of the guard scripts) - recommend a separate, deliberate distillation pass for those once reviewed. Line counts: unity/LEARNINGS.md 170 -> 199, unity/agents/unity.md 231 -> 232, unity/skills/unity-build/SKILL.md 260 -> 306. 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.
This pass covers everything new in the private working repo's in-scope files since the last distillation (perforce, godot, jenkins, lore, unity, unreal all checked; teamcity and buildkite are new plugins, see the note at the bottom).
Mirrored (not compressed, per DISTILLING.md section f):
perforce/agents/perforce.mdgained the-Mjstdout-not-stderr instruction - in tagged-JSON mode p4 writes every record, error records included, to stdout and leaves stderr empty, so an agent reading stderr alone to classify a failure gets nothing but a bare exit status. Carried across the parse recipe (data field of the first record at severity >= 3), the two traps in that stream (successful records can precede the error record; severity is a number in some p4 versions and a quoted string in others), and the new failure-class table row for the "exit status N and nothing else" symptom. Line count: 219 -> 238 lines.At the time of that first commit, no LEARNINGS.md or NOTES.md entries needed distilling - every plugin's private LEARNINGS.md/NOTES.md was checked against what was already reflected in the public files and everything then in the private repo was either already distilled or, for jenkins, a reverse-seed copy of content that originated in this repo.
Sanitization (first commit): the private source named an internal connector by name; genericized to "a real webhook-ingestion connector," matching how the same underlying validation story (p4 trigger -> webhook -> changelist ingestion) is already phrased elsewhere in this plugin's LEARNINGS.md. Final grep sweep on the changed file: one hit, pre-existing and unrelated to this change (line 238, "Internal - don't surface these in user-facing help," describing an undocumented skill note, not a leaked internal identifier). No secrets or credential values were present in the source material.
Update: unity schtasks/OpenSSH and Hub 3.x learnings
A later private-repo commit (landed 2026-09-23, after this PR was first opened) validated the fix for the Windows-OpenSSH process-tree-kill trap this file already flagged, and added Hub 3.x headless-install findings. Distilled into
unity/LEARNINGS.md: the working fix (a one-shotschtasks-launched scheduled task, verified end to end with a cold import and a WebGL build on Unity 6000.3.22f1), the two mechanisms that look like fixes and are not (cmd /c starthangs the SSH session;Start-Processwithout-Waitdies at session exit anyway), a-logFile -pipe-close trap, Hub 3.53's headless-install behavior (CDN rate cap, per-component progress text that is not proof of a finished install, real cold-import/build timings versus the "up to an hour" folklore), and the narrow three-provider list on Hub's "Add project from repository" flow. Line count: 170 -> 199 lines.Mirrored (not compressed, per DISTILLING.md section f):
unity/skills/unity-build/SKILL.mdgained section 8 with the wrapper/schtasks recipe verbatim (260 -> 306 lines), andunity/agents/unity.mdgained the matching symptom-table row (231 -> 232 lines). The private source's numbered LEARNINGS.md cross-reference (its B8/B10/B12) was rewritten to this repo's unnumbered convention (LEARNINGS.mdparagraph B), consistent with howunity-pipeline/SKILL.mdalready references this file.Sanitization (this commit): the private source names the test rig
beastin the Hub-install example; genericized to "a wired gigabit test machine," consistent with how the existing "primary test rig" bullet in this file already anonymizes the same machine. Final grep sweep on the added lines: zero hits. No secrets or credential values were present in the source material.Excluded from this pass: the private repo also added two entirely new plugins,
teamcityandbuildkite(agents, commands, and SKILL.md files plus plugin.json/hooks/guard scripts/README for each - roughly 1,600 lines total). Bringing a new plugin into this repo needs more than the skills/agents/commands files this job is scoped to (plugin.json, hooks.json, the guard script, README, and marketplace registration all need to land together for the plugin to actually work and passscripts/lint-plugins.sh), and the existing precedent in this repo (godot's v0.1.0 landed as its own dedicated distillation PR, #4, separate from the routine weekly learnings cadence) treats a new-plugin launch as a distinct, larger action rather than something a scheduled pass should do partially and silently. Recommend a separate, deliberate distillation pass for teamcity and buildkite once someone reviews the full plugin content (including the guard scripts, which need the same security review godot's and perforce's got before publication).🤖 Generated with Claude Code