feat: worktree-per-task wave execution - #1

Merged
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves
Aug 10, 2026
Merged

feat: worktree-per-task wave execution#1
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves

Conversation

@daniellam258

@daniellam258daniellam258 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

What the skills get wrong today

Phase 3's wave predicate treats disjoint File scope: as sufficient for co-scheduling two tasks in one worktree. It is only necessary: toolchains with a shared mutable build root — Cargo is the canonical case, one workspace-level target/ behind an exclusive file lock — serialize two "independent" tasks into lock-thrash. In an agent-executed pipeline this is worse than serialization: every worker turn blocks on Blocking waiting for file lock or times out, each turn yields near-zero progress, and a consuming repo observed one ticket spinning for more than 24 hours this way.

The change

Independent wave tasks each get their own git worktree and branch from a pinned wave base, making build state private by construction and giving each task a private branch — which also removes the commit-contamination reason SDD serialized implementers, so path-scoped review packaging collapses into plain per-task-branch ranges with a scope-overflow check.

  • delivery-pipeline/references/worktree-wave-execution.md (new) — the runtime-neutral protocol: parent-WIP wip: snapshot with untracked-file inspection and a no-push-while-wip rule; pinned wave base + ledger wave manifest for crash resume; per-task git worktree add; build-dir-isolation verification; CoW cache seeding (fresh-destination-only); join as rebase-in-task-worktree + git merge --ff-only from the ticket worktree (a checked-out branch cannot be force-moved); controller-mediated reconciliation; one-writer rule; progress-discriminating thrash detection; snapshot absorption; sequential fallback for runtimes without concurrent dispatch.
  • delivery-pipeline/references/phase-3-execution.md — the three path-scoped-package conditions are replaced by the worktree-per-task contract; wave eligibility gains Exclusive resources:; thrash detection added.
  • delivery-spec-plan — new optional Exclusive resources: task header (worktrees isolate paths, not daemons: Docker, a shared local chain); File scope: bullet reworded so disjointness reads as necessary, not sufficient.
  • delivery-ship — ship gate: no wip: commit may remain in the PR range, verified via git log --oneline <base>..HEAD.
  • delivery-handoff — mid-wave handoffs enumerate live task worktrees (path, branch, wave-base SHA, join state) from the wave manifest.
  • delivery-workflow — the vendor-bindings template now asks each binding to record which wave-protocol protections the runtime enforces versus leaves to the controller, whether a native worktree convenience satisfies the contract, and the sequential fallback for runtimes without concurrent dispatch.
  • Versions bumped to 0.2.0 on the five touched skills.

Upstreamed from a consuming repo per CONTRIBUTING (contribute mode): the protocol shipped there first, then survived a seven-lens adversarial review whose corrections (ff-only join mechanics, fail-closed overflow check, untracked-inspection before snapshot, fresh-destination seeding, progress-based thrash discrimination) are already folded into this text. Repo-specific tooling names were genericized.

Verification

bash scripts/skill-lint.shskill-lint: OK (frontmatter, size, references, citations, paths, eval.json across skills/). delivery-pipeline/SKILL.md and delivery-spec-plan/SKILL.md sit exactly at the 150-line budget.

File-scope disjointness alone co-schedules tasks that still contend on a
shared mutable build root (Cargo's locked target/ is the canonical case),
which in agent-executed pipelines degrades into hours of lock-thrash.
Observed: two co-scheduled Rust tasks blocked on 'Blocking waiting for
file lock' for 24+ hours with near-zero progress per turn.
Phase 3 waves now dispatch each task into its own worktree and branch
from a pinned wave base: build state becomes private by construction and
each task gains a private branch, removing both reasons SDD serialized.
The full dispatch/join/reconciliation/cleanup protocol lands in
references/worktree-wave-execution.md; phase-3-execution.md's three
path-scoped-package conditions collapse into per-task-branch packaging
with a scope-overflow check. Spec-plan gains the Exclusive resources:
task header (worktrees isolate paths, not daemons), ship gains the
no-wip-commit ship gate, and handoff enumerates live task worktrees for
mid-wave relays.
The vendor-bindings template tells a binding author what to record per
section but said nothing about the wave protocol: which of its
protections the runtime enforces versus leaves to the controller, whether
a native worktree convenience satisfies the pinned-base/named-branch/
retention/seeding contract, and the sequential fallback for runtimes
without concurrent dispatch. Consuming repos' bindings already need
exactly this section; the template now asks for it.
@daniellam258
daniellam258 merged commit d937aae into mainAug 10, 2026
1 check passed
harrymove-ctrl pushed a commit that referenced this pull request Aug 30, 2026
…version roster
The pipeline's mandatory read #1 had been narrowed to delivery-workflow's
scope-band reference while still labelled "tracking contract", leaving no
item that required the delivery-workflow body — so an agent never loaded the
execution-ready / ship-ready definitions that phases 4 and 5 gate on. Split
it back into two entries: the skill, then its scope-band reference.
The version roster listed cmk:agent-instructions in two mutually exclusive
bands at once and still claimed 0.1.x for delivery-family skills this branch
had just bumped. Rewrite it so every skill appears in exactly one band.
Drop the now-subjectless codebase-docs size-budget exemption (this branch took
it from 160+ lines to 32) and make the array expansion safe under set -u on
bash 3.2, so the 150-line gate covers it again.
Qualify getObject by client in the sui-sdk migration table — it had been
listed on both the stale and the current side of a table whose contract is
"use the right column".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@daniellam258
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: worktree-per-task wave execution - #1

Merged
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves
Aug 10, 2026
Merged

feat: worktree-per-task wave execution#1
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves

Conversation

@daniellam258

@daniellam258daniellam258 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

What the skills get wrong today

Phase 3's wave predicate treats disjoint File scope: as sufficient for co-scheduling two tasks in one worktree. It is only necessary: toolchains with a shared mutable build root — Cargo is the canonical case, one workspace-level target/ behind an exclusive file lock — serialize two "independent" tasks into lock-thrash. In an agent-executed pipeline this is worse than serialization: every worker turn blocks on Blocking waiting for file lock or times out, each turn yields near-zero progress, and a consuming repo observed one ticket spinning for more than 24 hours this way.

The change

Independent wave tasks each get their own git worktree and branch from a pinned wave base, making build state private by construction and giving each task a private branch — which also removes the commit-contamination reason SDD serialized implementers, so path-scoped review packaging collapses into plain per-task-branch ranges with a scope-overflow check.

  • delivery-pipeline/references/worktree-wave-execution.md (new) — the runtime-neutral protocol: parent-WIP wip: snapshot with untracked-file inspection and a no-push-while-wip rule; pinned wave base + ledger wave manifest for crash resume; per-task git worktree add; build-dir-isolation verification; CoW cache seeding (fresh-destination-only); join as rebase-in-task-worktree + git merge --ff-only from the ticket worktree (a checked-out branch cannot be force-moved); controller-mediated reconciliation; one-writer rule; progress-discriminating thrash detection; snapshot absorption; sequential fallback for runtimes without concurrent dispatch.
  • delivery-pipeline/references/phase-3-execution.md — the three path-scoped-package conditions are replaced by the worktree-per-task contract; wave eligibility gains Exclusive resources:; thrash detection added.
  • delivery-spec-plan — new optional Exclusive resources: task header (worktrees isolate paths, not daemons: Docker, a shared local chain); File scope: bullet reworded so disjointness reads as necessary, not sufficient.
  • delivery-ship — ship gate: no wip: commit may remain in the PR range, verified via git log --oneline <base>..HEAD.
  • delivery-handoff — mid-wave handoffs enumerate live task worktrees (path, branch, wave-base SHA, join state) from the wave manifest.
  • delivery-workflow — the vendor-bindings template now asks each binding to record which wave-protocol protections the runtime enforces versus leaves to the controller, whether a native worktree convenience satisfies the contract, and the sequential fallback for runtimes without concurrent dispatch.
  • Versions bumped to 0.2.0 on the five touched skills.

Upstreamed from a consuming repo per CONTRIBUTING (contribute mode): the protocol shipped there first, then survived a seven-lens adversarial review whose corrections (ff-only join mechanics, fail-closed overflow check, untracked-inspection before snapshot, fresh-destination seeding, progress-based thrash discrimination) are already folded into this text. Repo-specific tooling names were genericized.

Verification

bash scripts/skill-lint.shskill-lint: OK (frontmatter, size, references, citations, paths, eval.json across skills/). delivery-pipeline/SKILL.md and delivery-spec-plan/SKILL.md sit exactly at the 150-line budget.

File-scope disjointness alone co-schedules tasks that still contend on a
shared mutable build root (Cargo's locked target/ is the canonical case),
which in agent-executed pipelines degrades into hours of lock-thrash.
Observed: two co-scheduled Rust tasks blocked on 'Blocking waiting for
file lock' for 24+ hours with near-zero progress per turn.
Phase 3 waves now dispatch each task into its own worktree and branch
from a pinned wave base: build state becomes private by construction and
each task gains a private branch, removing both reasons SDD serialized.
The full dispatch/join/reconciliation/cleanup protocol lands in
references/worktree-wave-execution.md; phase-3-execution.md's three
path-scoped-package conditions collapse into per-task-branch packaging
with a scope-overflow check. Spec-plan gains the Exclusive resources:
task header (worktrees isolate paths, not daemons), ship gains the
no-wip-commit ship gate, and handoff enumerates live task worktrees for
mid-wave relays.
The vendor-bindings template tells a binding author what to record per
section but said nothing about the wave protocol: which of its
protections the runtime enforces versus leaves to the controller, whether
a native worktree convenience satisfies the pinned-base/named-branch/
retention/seeding contract, and the sequential fallback for runtimes
without concurrent dispatch. Consuming repos' bindings already need
exactly this section; the template now asks for it.
@daniellam258
daniellam258 merged commit d937aae into mainAug 10, 2026
1 check passed
harrymove-ctrl pushed a commit that referenced this pull request Aug 30, 2026
…version roster
The pipeline's mandatory read #1 had been narrowed to delivery-workflow's
scope-band reference while still labelled "tracking contract", leaving no
item that required the delivery-workflow body — so an agent never loaded the
execution-ready / ship-ready definitions that phases 4 and 5 gate on. Split
it back into two entries: the skill, then its scope-band reference.
The version roster listed cmk:agent-instructions in two mutually exclusive
bands at once and still claimed 0.1.x for delivery-family skills this branch
had just bumped. Rewrite it so every skill appears in exactly one band.
Drop the now-subjectless codebase-docs size-budget exemption (this branch took
it from 160+ lines to 32) and make the array expansion safe under set -u on
bash 3.2, so the 150-line gate covers it again.
Qualify getObject by client in the sui-sdk migration table — it had been
listed on both the stale and the current side of a table whose contract is
"use the right column".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@daniellam258
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: worktree-per-task wave execution - #1

Merged
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves
Aug 10, 2026
Merged

feat: worktree-per-task wave execution#1
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves

Conversation

@daniellam258

@daniellam258daniellam258 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

What the skills get wrong today

Phase 3's wave predicate treats disjoint File scope: as sufficient for co-scheduling two tasks in one worktree. It is only necessary: toolchains with a shared mutable build root — Cargo is the canonical case, one workspace-level target/ behind an exclusive file lock — serialize two "independent" tasks into lock-thrash. In an agent-executed pipeline this is worse than serialization: every worker turn blocks on Blocking waiting for file lock or times out, each turn yields near-zero progress, and a consuming repo observed one ticket spinning for more than 24 hours this way.

The change

Independent wave tasks each get their own git worktree and branch from a pinned wave base, making build state private by construction and giving each task a private branch — which also removes the commit-contamination reason SDD serialized implementers, so path-scoped review packaging collapses into plain per-task-branch ranges with a scope-overflow check.

  • delivery-pipeline/references/worktree-wave-execution.md (new) — the runtime-neutral protocol: parent-WIP wip: snapshot with untracked-file inspection and a no-push-while-wip rule; pinned wave base + ledger wave manifest for crash resume; per-task git worktree add; build-dir-isolation verification; CoW cache seeding (fresh-destination-only); join as rebase-in-task-worktree + git merge --ff-only from the ticket worktree (a checked-out branch cannot be force-moved); controller-mediated reconciliation; one-writer rule; progress-discriminating thrash detection; snapshot absorption; sequential fallback for runtimes without concurrent dispatch.
  • delivery-pipeline/references/phase-3-execution.md — the three path-scoped-package conditions are replaced by the worktree-per-task contract; wave eligibility gains Exclusive resources:; thrash detection added.
  • delivery-spec-plan — new optional Exclusive resources: task header (worktrees isolate paths, not daemons: Docker, a shared local chain); File scope: bullet reworded so disjointness reads as necessary, not sufficient.
  • delivery-ship — ship gate: no wip: commit may remain in the PR range, verified via git log --oneline <base>..HEAD.
  • delivery-handoff — mid-wave handoffs enumerate live task worktrees (path, branch, wave-base SHA, join state) from the wave manifest.
  • delivery-workflow — the vendor-bindings template now asks each binding to record which wave-protocol protections the runtime enforces versus leaves to the controller, whether a native worktree convenience satisfies the contract, and the sequential fallback for runtimes without concurrent dispatch.
  • Versions bumped to 0.2.0 on the five touched skills.

Upstreamed from a consuming repo per CONTRIBUTING (contribute mode): the protocol shipped there first, then survived a seven-lens adversarial review whose corrections (ff-only join mechanics, fail-closed overflow check, untracked-inspection before snapshot, fresh-destination seeding, progress-based thrash discrimination) are already folded into this text. Repo-specific tooling names were genericized.

Verification

bash scripts/skill-lint.shskill-lint: OK (frontmatter, size, references, citations, paths, eval.json across skills/). delivery-pipeline/SKILL.md and delivery-spec-plan/SKILL.md sit exactly at the 150-line budget.

File-scope disjointness alone co-schedules tasks that still contend on a
shared mutable build root (Cargo's locked target/ is the canonical case),
which in agent-executed pipelines degrades into hours of lock-thrash.
Observed: two co-scheduled Rust tasks blocked on 'Blocking waiting for
file lock' for 24+ hours with near-zero progress per turn.
Phase 3 waves now dispatch each task into its own worktree and branch
from a pinned wave base: build state becomes private by construction and
each task gains a private branch, removing both reasons SDD serialized.
The full dispatch/join/reconciliation/cleanup protocol lands in
references/worktree-wave-execution.md; phase-3-execution.md's three
path-scoped-package conditions collapse into per-task-branch packaging
with a scope-overflow check. Spec-plan gains the Exclusive resources:
task header (worktrees isolate paths, not daemons), ship gains the
no-wip-commit ship gate, and handoff enumerates live task worktrees for
mid-wave relays.
The vendor-bindings template tells a binding author what to record per
section but said nothing about the wave protocol: which of its
protections the runtime enforces versus leaves to the controller, whether
a native worktree convenience satisfies the pinned-base/named-branch/
retention/seeding contract, and the sequential fallback for runtimes
without concurrent dispatch. Consuming repos' bindings already need
exactly this section; the template now asks for it.
@daniellam258
daniellam258 merged commit d937aae into mainAug 10, 2026
1 check passed
harrymove-ctrl pushed a commit that referenced this pull request Aug 30, 2026
…version roster
The pipeline's mandatory read #1 had been narrowed to delivery-workflow's
scope-band reference while still labelled "tracking contract", leaving no
item that required the delivery-workflow body — so an agent never loaded the
execution-ready / ship-ready definitions that phases 4 and 5 gate on. Split
it back into two entries: the skill, then its scope-band reference.
The version roster listed cmk:agent-instructions in two mutually exclusive
bands at once and still claimed 0.1.x for delivery-family skills this branch
had just bumped. Rewrite it so every skill appears in exactly one band.
Drop the now-subjectless codebase-docs size-budget exemption (this branch took
it from 160+ lines to 32) and make the array expansion safe under set -u on
bash 3.2, so the 150-line gate covers it again.
Qualify getObject by client in the sui-sdk migration table — it had been
listed on both the stale and the current side of a table whose contract is
"use the right column".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@daniellam258
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: worktree-per-task wave execution - #1

Merged
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves
Aug 10, 2026
Merged

feat: worktree-per-task wave execution#1
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves

Conversation

@daniellam258

@daniellam258daniellam258 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

What the skills get wrong today

Phase 3's wave predicate treats disjoint File scope: as sufficient for co-scheduling two tasks in one worktree. It is only necessary: toolchains with a shared mutable build root — Cargo is the canonical case, one workspace-level target/ behind an exclusive file lock — serialize two "independent" tasks into lock-thrash. In an agent-executed pipeline this is worse than serialization: every worker turn blocks on Blocking waiting for file lock or times out, each turn yields near-zero progress, and a consuming repo observed one ticket spinning for more than 24 hours this way.

The change

Independent wave tasks each get their own git worktree and branch from a pinned wave base, making build state private by construction and giving each task a private branch — which also removes the commit-contamination reason SDD serialized implementers, so path-scoped review packaging collapses into plain per-task-branch ranges with a scope-overflow check.

  • delivery-pipeline/references/worktree-wave-execution.md (new) — the runtime-neutral protocol: parent-WIP wip: snapshot with untracked-file inspection and a no-push-while-wip rule; pinned wave base + ledger wave manifest for crash resume; per-task git worktree add; build-dir-isolation verification; CoW cache seeding (fresh-destination-only); join as rebase-in-task-worktree + git merge --ff-only from the ticket worktree (a checked-out branch cannot be force-moved); controller-mediated reconciliation; one-writer rule; progress-discriminating thrash detection; snapshot absorption; sequential fallback for runtimes without concurrent dispatch.
  • delivery-pipeline/references/phase-3-execution.md — the three path-scoped-package conditions are replaced by the worktree-per-task contract; wave eligibility gains Exclusive resources:; thrash detection added.
  • delivery-spec-plan — new optional Exclusive resources: task header (worktrees isolate paths, not daemons: Docker, a shared local chain); File scope: bullet reworded so disjointness reads as necessary, not sufficient.
  • delivery-ship — ship gate: no wip: commit may remain in the PR range, verified via git log --oneline <base>..HEAD.
  • delivery-handoff — mid-wave handoffs enumerate live task worktrees (path, branch, wave-base SHA, join state) from the wave manifest.
  • delivery-workflow — the vendor-bindings template now asks each binding to record which wave-protocol protections the runtime enforces versus leaves to the controller, whether a native worktree convenience satisfies the contract, and the sequential fallback for runtimes without concurrent dispatch.
  • Versions bumped to 0.2.0 on the five touched skills.

Upstreamed from a consuming repo per CONTRIBUTING (contribute mode): the protocol shipped there first, then survived a seven-lens adversarial review whose corrections (ff-only join mechanics, fail-closed overflow check, untracked-inspection before snapshot, fresh-destination seeding, progress-based thrash discrimination) are already folded into this text. Repo-specific tooling names were genericized.

Verification

bash scripts/skill-lint.shskill-lint: OK (frontmatter, size, references, citations, paths, eval.json across skills/). delivery-pipeline/SKILL.md and delivery-spec-plan/SKILL.md sit exactly at the 150-line budget.

File-scope disjointness alone co-schedules tasks that still contend on a
shared mutable build root (Cargo's locked target/ is the canonical case),
which in agent-executed pipelines degrades into hours of lock-thrash.
Observed: two co-scheduled Rust tasks blocked on 'Blocking waiting for
file lock' for 24+ hours with near-zero progress per turn.
Phase 3 waves now dispatch each task into its own worktree and branch
from a pinned wave base: build state becomes private by construction and
each task gains a private branch, removing both reasons SDD serialized.
The full dispatch/join/reconciliation/cleanup protocol lands in
references/worktree-wave-execution.md; phase-3-execution.md's three
path-scoped-package conditions collapse into per-task-branch packaging
with a scope-overflow check. Spec-plan gains the Exclusive resources:
task header (worktrees isolate paths, not daemons), ship gains the
no-wip-commit ship gate, and handoff enumerates live task worktrees for
mid-wave relays.
The vendor-bindings template tells a binding author what to record per
section but said nothing about the wave protocol: which of its
protections the runtime enforces versus leaves to the controller, whether
a native worktree convenience satisfies the pinned-base/named-branch/
retention/seeding contract, and the sequential fallback for runtimes
without concurrent dispatch. Consuming repos' bindings already need
exactly this section; the template now asks for it.
@daniellam258
daniellam258 merged commit d937aae into mainAug 10, 2026
1 check passed
harrymove-ctrl pushed a commit that referenced this pull request Aug 30, 2026
…version roster
The pipeline's mandatory read #1 had been narrowed to delivery-workflow's
scope-band reference while still labelled "tracking contract", leaving no
item that required the delivery-workflow body — so an agent never loaded the
execution-ready / ship-ready definitions that phases 4 and 5 gate on. Split
it back into two entries: the skill, then its scope-band reference.
The version roster listed cmk:agent-instructions in two mutually exclusive
bands at once and still claimed 0.1.x for delivery-family skills this branch
had just bumped. Rewrite it so every skill appears in exactly one band.
Drop the now-subjectless codebase-docs size-budget exemption (this branch took
it from 160+ lines to 32) and make the array expansion safe under set -u on
bash 3.2, so the 150-line gate covers it again.
Qualify getObject by client in the sui-sdk migration table — it had been
listed on both the stale and the current side of a table whose contract is
"use the right column".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@daniellam258
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: worktree-per-task wave execution - #1

Merged
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves
Aug 10, 2026
Merged

feat: worktree-per-task wave execution#1
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves

Conversation

@daniellam258

@daniellam258daniellam258 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

What the skills get wrong today

Phase 3's wave predicate treats disjoint File scope: as sufficient for co-scheduling two tasks in one worktree. It is only necessary: toolchains with a shared mutable build root — Cargo is the canonical case, one workspace-level target/ behind an exclusive file lock — serialize two "independent" tasks into lock-thrash. In an agent-executed pipeline this is worse than serialization: every worker turn blocks on Blocking waiting for file lock or times out, each turn yields near-zero progress, and a consuming repo observed one ticket spinning for more than 24 hours this way.

The change

Independent wave tasks each get their own git worktree and branch from a pinned wave base, making build state private by construction and giving each task a private branch — which also removes the commit-contamination reason SDD serialized implementers, so path-scoped review packaging collapses into plain per-task-branch ranges with a scope-overflow check.

  • delivery-pipeline/references/worktree-wave-execution.md (new) — the runtime-neutral protocol: parent-WIP wip: snapshot with untracked-file inspection and a no-push-while-wip rule; pinned wave base + ledger wave manifest for crash resume; per-task git worktree add; build-dir-isolation verification; CoW cache seeding (fresh-destination-only); join as rebase-in-task-worktree + git merge --ff-only from the ticket worktree (a checked-out branch cannot be force-moved); controller-mediated reconciliation; one-writer rule; progress-discriminating thrash detection; snapshot absorption; sequential fallback for runtimes without concurrent dispatch.
  • delivery-pipeline/references/phase-3-execution.md — the three path-scoped-package conditions are replaced by the worktree-per-task contract; wave eligibility gains Exclusive resources:; thrash detection added.
  • delivery-spec-plan — new optional Exclusive resources: task header (worktrees isolate paths, not daemons: Docker, a shared local chain); File scope: bullet reworded so disjointness reads as necessary, not sufficient.
  • delivery-ship — ship gate: no wip: commit may remain in the PR range, verified via git log --oneline <base>..HEAD.
  • delivery-handoff — mid-wave handoffs enumerate live task worktrees (path, branch, wave-base SHA, join state) from the wave manifest.
  • delivery-workflow — the vendor-bindings template now asks each binding to record which wave-protocol protections the runtime enforces versus leaves to the controller, whether a native worktree convenience satisfies the contract, and the sequential fallback for runtimes without concurrent dispatch.
  • Versions bumped to 0.2.0 on the five touched skills.

Upstreamed from a consuming repo per CONTRIBUTING (contribute mode): the protocol shipped there first, then survived a seven-lens adversarial review whose corrections (ff-only join mechanics, fail-closed overflow check, untracked-inspection before snapshot, fresh-destination seeding, progress-based thrash discrimination) are already folded into this text. Repo-specific tooling names were genericized.

Verification

bash scripts/skill-lint.shskill-lint: OK (frontmatter, size, references, citations, paths, eval.json across skills/). delivery-pipeline/SKILL.md and delivery-spec-plan/SKILL.md sit exactly at the 150-line budget.

File-scope disjointness alone co-schedules tasks that still contend on a
shared mutable build root (Cargo's locked target/ is the canonical case),
which in agent-executed pipelines degrades into hours of lock-thrash.
Observed: two co-scheduled Rust tasks blocked on 'Blocking waiting for
file lock' for 24+ hours with near-zero progress per turn.
Phase 3 waves now dispatch each task into its own worktree and branch
from a pinned wave base: build state becomes private by construction and
each task gains a private branch, removing both reasons SDD serialized.
The full dispatch/join/reconciliation/cleanup protocol lands in
references/worktree-wave-execution.md; phase-3-execution.md's three
path-scoped-package conditions collapse into per-task-branch packaging
with a scope-overflow check. Spec-plan gains the Exclusive resources:
task header (worktrees isolate paths, not daemons), ship gains the
no-wip-commit ship gate, and handoff enumerates live task worktrees for
mid-wave relays.
The vendor-bindings template tells a binding author what to record per
section but said nothing about the wave protocol: which of its
protections the runtime enforces versus leaves to the controller, whether
a native worktree convenience satisfies the pinned-base/named-branch/
retention/seeding contract, and the sequential fallback for runtimes
without concurrent dispatch. Consuming repos' bindings already need
exactly this section; the template now asks for it.
@daniellam258
daniellam258 merged commit d937aae into mainAug 10, 2026
1 check passed
harrymove-ctrl pushed a commit that referenced this pull request Aug 30, 2026
…version roster
The pipeline's mandatory read #1 had been narrowed to delivery-workflow's
scope-band reference while still labelled "tracking contract", leaving no
item that required the delivery-workflow body — so an agent never loaded the
execution-ready / ship-ready definitions that phases 4 and 5 gate on. Split
it back into two entries: the skill, then its scope-band reference.
The version roster listed cmk:agent-instructions in two mutually exclusive
bands at once and still claimed 0.1.x for delivery-family skills this branch
had just bumped. Rewrite it so every skill appears in exactly one band.
Drop the now-subjectless codebase-docs size-budget exemption (this branch took
it from 160+ lines to 32) and make the array expansion safe under set -u on
bash 3.2, so the 150-line gate covers it again.
Qualify getObject by client in the sui-sdk migration table — it had been
listed on both the stale and the current side of a table whose contract is
"use the right column".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@daniellam258
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: worktree-per-task wave execution - #1

Merged
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves
Aug 10, 2026
Merged

feat: worktree-per-task wave execution#1
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves

Conversation

@daniellam258

@daniellam258daniellam258 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

What the skills get wrong today

Phase 3's wave predicate treats disjoint File scope: as sufficient for co-scheduling two tasks in one worktree. It is only necessary: toolchains with a shared mutable build root — Cargo is the canonical case, one workspace-level target/ behind an exclusive file lock — serialize two "independent" tasks into lock-thrash. In an agent-executed pipeline this is worse than serialization: every worker turn blocks on Blocking waiting for file lock or times out, each turn yields near-zero progress, and a consuming repo observed one ticket spinning for more than 24 hours this way.

The change

Independent wave tasks each get their own git worktree and branch from a pinned wave base, making build state private by construction and giving each task a private branch — which also removes the commit-contamination reason SDD serialized implementers, so path-scoped review packaging collapses into plain per-task-branch ranges with a scope-overflow check.

  • delivery-pipeline/references/worktree-wave-execution.md (new) — the runtime-neutral protocol: parent-WIP wip: snapshot with untracked-file inspection and a no-push-while-wip rule; pinned wave base + ledger wave manifest for crash resume; per-task git worktree add; build-dir-isolation verification; CoW cache seeding (fresh-destination-only); join as rebase-in-task-worktree + git merge --ff-only from the ticket worktree (a checked-out branch cannot be force-moved); controller-mediated reconciliation; one-writer rule; progress-discriminating thrash detection; snapshot absorption; sequential fallback for runtimes without concurrent dispatch.
  • delivery-pipeline/references/phase-3-execution.md — the three path-scoped-package conditions are replaced by the worktree-per-task contract; wave eligibility gains Exclusive resources:; thrash detection added.
  • delivery-spec-plan — new optional Exclusive resources: task header (worktrees isolate paths, not daemons: Docker, a shared local chain); File scope: bullet reworded so disjointness reads as necessary, not sufficient.
  • delivery-ship — ship gate: no wip: commit may remain in the PR range, verified via git log --oneline <base>..HEAD.
  • delivery-handoff — mid-wave handoffs enumerate live task worktrees (path, branch, wave-base SHA, join state) from the wave manifest.
  • delivery-workflow — the vendor-bindings template now asks each binding to record which wave-protocol protections the runtime enforces versus leaves to the controller, whether a native worktree convenience satisfies the contract, and the sequential fallback for runtimes without concurrent dispatch.
  • Versions bumped to 0.2.0 on the five touched skills.

Upstreamed from a consuming repo per CONTRIBUTING (contribute mode): the protocol shipped there first, then survived a seven-lens adversarial review whose corrections (ff-only join mechanics, fail-closed overflow check, untracked-inspection before snapshot, fresh-destination seeding, progress-based thrash discrimination) are already folded into this text. Repo-specific tooling names were genericized.

Verification

bash scripts/skill-lint.shskill-lint: OK (frontmatter, size, references, citations, paths, eval.json across skills/). delivery-pipeline/SKILL.md and delivery-spec-plan/SKILL.md sit exactly at the 150-line budget.

File-scope disjointness alone co-schedules tasks that still contend on a
shared mutable build root (Cargo's locked target/ is the canonical case),
which in agent-executed pipelines degrades into hours of lock-thrash.
Observed: two co-scheduled Rust tasks blocked on 'Blocking waiting for
file lock' for 24+ hours with near-zero progress per turn.
Phase 3 waves now dispatch each task into its own worktree and branch
from a pinned wave base: build state becomes private by construction and
each task gains a private branch, removing both reasons SDD serialized.
The full dispatch/join/reconciliation/cleanup protocol lands in
references/worktree-wave-execution.md; phase-3-execution.md's three
path-scoped-package conditions collapse into per-task-branch packaging
with a scope-overflow check. Spec-plan gains the Exclusive resources:
task header (worktrees isolate paths, not daemons), ship gains the
no-wip-commit ship gate, and handoff enumerates live task worktrees for
mid-wave relays.
The vendor-bindings template tells a binding author what to record per
section but said nothing about the wave protocol: which of its
protections the runtime enforces versus leaves to the controller, whether
a native worktree convenience satisfies the pinned-base/named-branch/
retention/seeding contract, and the sequential fallback for runtimes
without concurrent dispatch. Consuming repos' bindings already need
exactly this section; the template now asks for it.
@daniellam258
daniellam258 merged commit d937aae into mainAug 10, 2026
1 check passed
harrymove-ctrl pushed a commit that referenced this pull request Aug 30, 2026
…version roster
The pipeline's mandatory read #1 had been narrowed to delivery-workflow's
scope-band reference while still labelled "tracking contract", leaving no
item that required the delivery-workflow body — so an agent never loaded the
execution-ready / ship-ready definitions that phases 4 and 5 gate on. Split
it back into two entries: the skill, then its scope-band reference.
The version roster listed cmk:agent-instructions in two mutually exclusive
bands at once and still claimed 0.1.x for delivery-family skills this branch
had just bumped. Rewrite it so every skill appears in exactly one band.
Drop the now-subjectless codebase-docs size-budget exemption (this branch took
it from 160+ lines to 32) and make the array expansion safe under set -u on
bash 3.2, so the 150-line gate covers it again.
Qualify getObject by client in the sui-sdk migration table — it had been
listed on both the stale and the current side of a table whose contract is
"use the right column".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@daniellam258
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: worktree-per-task wave execution - #1

Merged
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves
Aug 10, 2026
Merged

feat: worktree-per-task wave execution#1
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves

Conversation

@daniellam258

@daniellam258daniellam258 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

What the skills get wrong today

Phase 3's wave predicate treats disjoint File scope: as sufficient for co-scheduling two tasks in one worktree. It is only necessary: toolchains with a shared mutable build root — Cargo is the canonical case, one workspace-level target/ behind an exclusive file lock — serialize two "independent" tasks into lock-thrash. In an agent-executed pipeline this is worse than serialization: every worker turn blocks on Blocking waiting for file lock or times out, each turn yields near-zero progress, and a consuming repo observed one ticket spinning for more than 24 hours this way.

The change

Independent wave tasks each get their own git worktree and branch from a pinned wave base, making build state private by construction and giving each task a private branch — which also removes the commit-contamination reason SDD serialized implementers, so path-scoped review packaging collapses into plain per-task-branch ranges with a scope-overflow check.

  • delivery-pipeline/references/worktree-wave-execution.md (new) — the runtime-neutral protocol: parent-WIP wip: snapshot with untracked-file inspection and a no-push-while-wip rule; pinned wave base + ledger wave manifest for crash resume; per-task git worktree add; build-dir-isolation verification; CoW cache seeding (fresh-destination-only); join as rebase-in-task-worktree + git merge --ff-only from the ticket worktree (a checked-out branch cannot be force-moved); controller-mediated reconciliation; one-writer rule; progress-discriminating thrash detection; snapshot absorption; sequential fallback for runtimes without concurrent dispatch.
  • delivery-pipeline/references/phase-3-execution.md — the three path-scoped-package conditions are replaced by the worktree-per-task contract; wave eligibility gains Exclusive resources:; thrash detection added.
  • delivery-spec-plan — new optional Exclusive resources: task header (worktrees isolate paths, not daemons: Docker, a shared local chain); File scope: bullet reworded so disjointness reads as necessary, not sufficient.
  • delivery-ship — ship gate: no wip: commit may remain in the PR range, verified via git log --oneline <base>..HEAD.
  • delivery-handoff — mid-wave handoffs enumerate live task worktrees (path, branch, wave-base SHA, join state) from the wave manifest.
  • delivery-workflow — the vendor-bindings template now asks each binding to record which wave-protocol protections the runtime enforces versus leaves to the controller, whether a native worktree convenience satisfies the contract, and the sequential fallback for runtimes without concurrent dispatch.
  • Versions bumped to 0.2.0 on the five touched skills.

Upstreamed from a consuming repo per CONTRIBUTING (contribute mode): the protocol shipped there first, then survived a seven-lens adversarial review whose corrections (ff-only join mechanics, fail-closed overflow check, untracked-inspection before snapshot, fresh-destination seeding, progress-based thrash discrimination) are already folded into this text. Repo-specific tooling names were genericized.

Verification

bash scripts/skill-lint.shskill-lint: OK (frontmatter, size, references, citations, paths, eval.json across skills/). delivery-pipeline/SKILL.md and delivery-spec-plan/SKILL.md sit exactly at the 150-line budget.

File-scope disjointness alone co-schedules tasks that still contend on a
shared mutable build root (Cargo's locked target/ is the canonical case),
which in agent-executed pipelines degrades into hours of lock-thrash.
Observed: two co-scheduled Rust tasks blocked on 'Blocking waiting for
file lock' for 24+ hours with near-zero progress per turn.
Phase 3 waves now dispatch each task into its own worktree and branch
from a pinned wave base: build state becomes private by construction and
each task gains a private branch, removing both reasons SDD serialized.
The full dispatch/join/reconciliation/cleanup protocol lands in
references/worktree-wave-execution.md; phase-3-execution.md's three
path-scoped-package conditions collapse into per-task-branch packaging
with a scope-overflow check. Spec-plan gains the Exclusive resources:
task header (worktrees isolate paths, not daemons), ship gains the
no-wip-commit ship gate, and handoff enumerates live task worktrees for
mid-wave relays.
The vendor-bindings template tells a binding author what to record per
section but said nothing about the wave protocol: which of its
protections the runtime enforces versus leaves to the controller, whether
a native worktree convenience satisfies the pinned-base/named-branch/
retention/seeding contract, and the sequential fallback for runtimes
without concurrent dispatch. Consuming repos' bindings already need
exactly this section; the template now asks for it.
@daniellam258
daniellam258 merged commit d937aae into mainAug 10, 2026
1 check passed
harrymove-ctrl pushed a commit that referenced this pull request Aug 30, 2026
…version roster
The pipeline's mandatory read #1 had been narrowed to delivery-workflow's
scope-band reference while still labelled "tracking contract", leaving no
item that required the delivery-workflow body — so an agent never loaded the
execution-ready / ship-ready definitions that phases 4 and 5 gate on. Split
it back into two entries: the skill, then its scope-band reference.
The version roster listed cmk:agent-instructions in two mutually exclusive
bands at once and still claimed 0.1.x for delivery-family skills this branch
had just bumped. Rewrite it so every skill appears in exactly one band.
Drop the now-subjectless codebase-docs size-budget exemption (this branch took
it from 160+ lines to 32) and make the array expansion safe under set -u on
bash 3.2, so the 150-line gate covers it again.
Qualify getObject by client in the sui-sdk migration table — it had been
listed on both the stale and the current side of a table whose contract is
"use the right column".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@daniellam258
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: worktree-per-task wave execution - #1

Merged
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves
Aug 10, 2026
Merged

feat: worktree-per-task wave execution#1
daniellam258 merged 2 commits into
mainfrom
feat/worktree-per-task-waves

Conversation

@daniellam258

@daniellam258daniellam258 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

What the skills get wrong today

Phase 3's wave predicate treats disjoint File scope: as sufficient for co-scheduling two tasks in one worktree. It is only necessary: toolchains with a shared mutable build root — Cargo is the canonical case, one workspace-level target/ behind an exclusive file lock — serialize two "independent" tasks into lock-thrash. In an agent-executed pipeline this is worse than serialization: every worker turn blocks on Blocking waiting for file lock or times out, each turn yields near-zero progress, and a consuming repo observed one ticket spinning for more than 24 hours this way.

The change

Independent wave tasks each get their own git worktree and branch from a pinned wave base, making build state private by construction and giving each task a private branch — which also removes the commit-contamination reason SDD serialized implementers, so path-scoped review packaging collapses into plain per-task-branch ranges with a scope-overflow check.

  • delivery-pipeline/references/worktree-wave-execution.md (new) — the runtime-neutral protocol: parent-WIP wip: snapshot with untracked-file inspection and a no-push-while-wip rule; pinned wave base + ledger wave manifest for crash resume; per-task git worktree add; build-dir-isolation verification; CoW cache seeding (fresh-destination-only); join as rebase-in-task-worktree + git merge --ff-only from the ticket worktree (a checked-out branch cannot be force-moved); controller-mediated reconciliation; one-writer rule; progress-discriminating thrash detection; snapshot absorption; sequential fallback for runtimes without concurrent dispatch.
  • delivery-pipeline/references/phase-3-execution.md — the three path-scoped-package conditions are replaced by the worktree-per-task contract; wave eligibility gains Exclusive resources:; thrash detection added.
  • delivery-spec-plan — new optional Exclusive resources: task header (worktrees isolate paths, not daemons: Docker, a shared local chain); File scope: bullet reworded so disjointness reads as necessary, not sufficient.
  • delivery-ship — ship gate: no wip: commit may remain in the PR range, verified via git log --oneline <base>..HEAD.
  • delivery-handoff — mid-wave handoffs enumerate live task worktrees (path, branch, wave-base SHA, join state) from the wave manifest.
  • delivery-workflow — the vendor-bindings template now asks each binding to record which wave-protocol protections the runtime enforces versus leaves to the controller, whether a native worktree convenience satisfies the contract, and the sequential fallback for runtimes without concurrent dispatch.
  • Versions bumped to 0.2.0 on the five touched skills.

Upstreamed from a consuming repo per CONTRIBUTING (contribute mode): the protocol shipped there first, then survived a seven-lens adversarial review whose corrections (ff-only join mechanics, fail-closed overflow check, untracked-inspection before snapshot, fresh-destination seeding, progress-based thrash discrimination) are already folded into this text. Repo-specific tooling names were genericized.

Verification

bash scripts/skill-lint.shskill-lint: OK (frontmatter, size, references, citations, paths, eval.json across skills/). delivery-pipeline/SKILL.md and delivery-spec-plan/SKILL.md sit exactly at the 150-line budget.

File-scope disjointness alone co-schedules tasks that still contend on a
shared mutable build root (Cargo's locked target/ is the canonical case),
which in agent-executed pipelines degrades into hours of lock-thrash.
Observed: two co-scheduled Rust tasks blocked on 'Blocking waiting for
file lock' for 24+ hours with near-zero progress per turn.
Phase 3 waves now dispatch each task into its own worktree and branch
from a pinned wave base: build state becomes private by construction and
each task gains a private branch, removing both reasons SDD serialized.
The full dispatch/join/reconciliation/cleanup protocol lands in
references/worktree-wave-execution.md; phase-3-execution.md's three
path-scoped-package conditions collapse into per-task-branch packaging
with a scope-overflow check. Spec-plan gains the Exclusive resources:
task header (worktrees isolate paths, not daemons), ship gains the
no-wip-commit ship gate, and handoff enumerates live task worktrees for
mid-wave relays.
The vendor-bindings template tells a binding author what to record per
section but said nothing about the wave protocol: which of its
protections the runtime enforces versus leaves to the controller, whether
a native worktree convenience satisfies the pinned-base/named-branch/
retention/seeding contract, and the sequential fallback for runtimes
without concurrent dispatch. Consuming repos' bindings already need
exactly this section; the template now asks for it.
@daniellam258
daniellam258 merged commit d937aae into mainAug 10, 2026
1 check passed
harrymove-ctrl pushed a commit that referenced this pull request Aug 30, 2026
…version roster
The pipeline's mandatory read #1 had been narrowed to delivery-workflow's
scope-band reference while still labelled "tracking contract", leaving no
item that required the delivery-workflow body — so an agent never loaded the
execution-ready / ship-ready definitions that phases 4 and 5 gate on. Split
it back into two entries: the skill, then its scope-band reference.
The version roster listed cmk:agent-instructions in two mutually exclusive
bands at once and still claimed 0.1.x for delivery-family skills this branch
had just bumped. Rewrite it so every skill appears in exactly one band.
Drop the now-subjectless codebase-docs size-budget exemption (this branch took
it from 160+ lines to 32) and make the array expansion safe under set -u on
bash 3.2, so the 150-line gate covers it again.
Qualify getObject by client in the sui-sdk migration table — it had been
listed on both the stale and the current side of a table whose contract is
"use the right column".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@daniellam258