creedants/pstack-t3/landing
- community
Checking that the SKILL.md file is still in the repository.
Let many agents write to one repository at once without collisions: a per-repository landing contract, path leases claimed before work starts, one queue that is the only writer to trunk, and a machine-wide slot governor for builds and tests. Use for 'landing', 'land this', 'merge queue', 'many agents on one repo', 'where does this work land', or before any coordinator (brigade, Orchestrate, Autopilot, swarm) delegates writing work in parallel.
Install
npx vskill@latest install creedants/pstack-t3/landingSKILL.md
Landing
Read the pstack-t3 runtime before spawning workers, choosing models, scheduling, or isolating work. It maps those steps onto T3's orchestrator tools.
Writing scales. Integration does not. Landing makes integration a property of the repository, decided once, so no coordinator asks where work lands and no two writers collide.
The rules:
- One trunk per repository. Every change lands there through the queue.
- A writer claims a lease on the paths it will change before it starts. Overlapping claims are refused.
- Writers never integrate. A worker commits in its own worktree and stops. It never merges, rebases a shared branch, or pushes trunk.
- The queue is the only writer to trunk. It is a lock, not a process. Whoever runs
landwhile the lock is free drains the queue. Everyone else gets "queue busy". - A review verdict holds only for the exact change reviewed. The queue lands the pinned SHA, and bounces it when the rebased change differs from the reviewed one.
- Builds and tests run under a governor slot, so the machine is not overrun.
The script
<skills>/landing/scripts/land.py, where <skills> is the directory holding this skill. Run it from any checkout of the repository, or pass --repo <path>. State lives in SQLite under ${XDG_STATE_HOME:-~/.local/state}/pstack-t3/landing/, one store per repository.
Every command takes --help.
A coordinator replaced by another thread must not write again. owner --prefix docs/ --generation 2 raises the floor for holders under docs/ and never lowers it, so a rerun changes nothing and a lower generation exits 1. lease claim, lease renew, lease release, and submit take --owner <prefix>@<generation>, whose prefix the holder must start with. Inside the write's transaction each refuses a generation below the prefix's floor with land: owner docs/@1 is stale; docs/ is at generation 2, and refuses a holder under a floored prefix that passes no --owner. A prefix with no floor works without --owner. brigade's set --thread --replace raises its restaurant's floor before it records the new thread.
Rulings
The executive admin carries out its rulings from rulings.md.
Set up a repository once
Run init the first time any coordinator writes to a repository. The mode decides whether the user stays a gate on landing, so it is the user's choice. brigade asks it when a restaurant opens. Any other coordinator asks once per repository with the host's question tool, unless the user already said.
The stored-contract rules live in contract.md.
| Mode | Landing does | The user | |
|---|---|---|---|
merge | Opens a PR and merges it, per Pull request lifecycle. | Reviews after the fact. Nothing waits on them. | |
human | Opens a PR and keeps it open for the user to merge, per Pull request lifecycle. | Merges every PR. | |
push | Rebases, runs the checks, and pushes trunk only if the remote is still at the tested base. No PRs. | Reviews after the fact, in the commit history. | |
local | Lands on refs/landing/<trunk>, which no checkout uses. Pass --base. | Merges the lane into a branch when ready. |
merge and push let reviewed changes reach trunk with no human gate. When the PR needs an approving review, or when it has changes requested, the queue pauses and names the PR and that requirement. It does not run gh pr merge --auto. The user then either relaxes the rule for the queue or switches to human.
Checks are the repository's own test, type check, and lint gates. In push and local mode there is no pull request or CI behind the queue, so the checks are the only gate. land.py init and land.py status print a warning while those modes have none. The warning is advice only and never changes an exit code. --setup installs dependencies, because the queue's worktree is cleaned with git clean -ffdx before every attempt. land.py mode switches between merge, human, and push once nothing is queued, landing, or awaiting merge. land.py mode --merge-method changes the method the next gh pr merge uses, and it may run while entries are queued, landing, or awaiting merge. Changing trunk or remote, or moving to or from local, needs a new contract.
Run writers through it
The runtime's Modes section sets the mode lines of every brief this skill writes and how its spawns run in light mode.
For every unit of writing work:
- Claim.
lease claimthe files and directories the unit will change, before delegating. When the claim is refused, fold the unit into the holder's work or hold it until that lease is released. A cap refusal names every holder in flight. Hold the unit until one of them releases. Never claim.unless the unit really touches everything.lease renewextends a live lease. Renewing an expired lease is a new claim on its paths. It is refused when another holder's lease now overlaps or the cap is full, and the refusal names which.--if-liverefuses an expired lease instead, so admitting it again is always a separate step taken after the old worker stopped. - Brief. A writer is a worktree thread from
t3_thread_launchwhen it runs long or the user should see it, and adelegate_taskchild otherwise. Isolate a delegated writer per the runtime's Isolation section. Use the required landing base, which can differ from the parent's current commit. Tell the worker to work only in its own worktree branched from<remote>/<trunk>(orrefs/landing/<trunk>in local mode), change only the leased paths, keep history linear with no merge commits, run builds and tests throughland.py slot --and every benchmark or timing measurement throughland.py slot --exclusive --, commit, and report the branch and head SHA. Put rule 3 in the brief unchanged. - Review the exact SHA with a verifier from another model family, or a same-family seat when only the author's family has a runnable seat, per the coordinator's own review step.
- Submit that SHA with the lease and the reviewer. In
mergeandhumanmode, pass--titleand--body-fileso the PR says what changed and how it was verified. The queue sends the submitted title unchanged. It sends the body unchanged unless the contract sets prItemLine to on, which adds the item's Kind and Goal line when it has one. The line follows body text after one blank line or is the whole body when the body holds only whitespace. With no--body-file, the body is the reviewed commit's body. The reviewer stays in the queue's local store. A submit that changes paths outside the lease is refused. Widen the lease or split the change. - Land. Run
land. When it printsqueue busy, runlandagain, at most 3 more times, waiting 5 seconds before each try. - Settle. Read
status E<n>.
landed: the lease is released. Record it in the coordinator's tables, then remove the worker's worktree withgit worktree removeand delete its branch.bounced: the lease is active again for the fix. Resubmitting prints a new entry id. Callunwatch_pull_requeston the bounced PR. Fire a fresh worker with the original brief, the bounce reason, and trunk. For a size bounce, read File size limit. A conflict or a changed rebase needs a new review after the fix. A reason that readscommit <sha12> has author <name> <<email>>, not the configured <name> <<email>>; recommit it as the configured authorsays the entry has a foreign commit author. The contract'sauthorPolicydecides this check.anynever bounces on authorship.configuredandcreditedcompare each commit between the entry's base and its reviewed commit withgit config user.nameandgit config user.email, and they run only when both have a value.configuredbounces an entry with a reviewed commit whose author is not that identity.creditedbounces it too unless every such commit carries aCo-authored-bytrailer equal to its author asname <email>and the body has a line that readsBased on #<n> by @<login>with an optional trailing period. The body is the--body-filetext, or the reviewed commit message body when that text is empty or absent.awaiting-merge(mergeandhumanmode): the PR is open. Pull request lifecycle says what the nextlanddoes with it.
Keep the queue moving
While any entry you submitted is queued or awaiting-merge, keep the queue moving. Drains from other coordinators on the same repository are harmless, because the queue lock runs one at a time. land prints every holder's entries. Act only on lines whose holder is this coordinator's own, and call watch_pull_request only on those PRs. A sibling's PR is the sibling's to watch. When a sibling's land opens your PR, read its URL from your own status --holder <restaurant>/<dish>, which brigade's watch prints as awaiting merge <pr url>.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/landing/SKILL.md
Popularity
- 7-day trend score
- 5
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/creedants/pstack-t3/landing)