Skip to content

distill: perforce -Mj mirror, unity OpenSSH/schtasks and Hub 3.x learnings - #11

Open
butterstack[bot] wants to merge 2 commits into
mainfrom
distill/perforce-2026-09
Open

butterstack[bot] wants to merge 2 commits into
mainfrom
distill/perforce-2026-09

Conversation

@butterstack

@butterstack butterstack Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

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.md gained the -Mj stdout-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-shot schtasks-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 start hangs the SSH session; Start-Process without -Wait dies 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.md gained section 8 with the wrapper/schtasks recipe verbatim (260 -> 306 lines), and unity/agents/unity.md gained 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.md paragraph B), consistent with how unity-pipeline/SKILL.md already references this file.

Sanitization (this commit): the private source names the test 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 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, teamcity and buildkite (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 pass scripts/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

claude[bot] and others added 2 commits September 21, 2026 19:32
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>
@butterstack butterstack Bot changed the title perforce: mirror the -Mj stdout-not-stderr agent instruction distill: perforce -Mj mirror, unity OpenSSH/schtasks and Hub 3.x learnings Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants