Skip to content

Analyze Jules and output a list of features that we should adopt#174

Merged
tstapler merged 5 commits into
mainfrom
backlog/stapler-squad-adopt-jules-plan-gate-features
Jul 19, 2026
Merged

Analyze Jules and output a list of features that we should adopt#174
tstapler merged 5 commits into
mainfrom
backlog/stapler-squad-adopt-jules-plan-gate-features

Conversation

@tstapler

Copy link
Copy Markdown
Owner

Empty diff — nothing to describe. Do you want me to check the branch/PR directly, or is there something specific you'd like added to it first?

tstapler and others added 5 commits July 8, 2026 12:05
…stry gaps

Jules and stapler-squad both supervise an AI coding agent through a plan
approve → execute → review loop, so most of what makes Jules good already
has a home in an existing backlog primitive here. docs/jules-feature-adoption.md
lists what's worth building next (PR-summary card, activity feed,
auto-fix-on-CI-failure loop, GitHubIssueDetector, concurrency throttle),
ranked by leverage and scoped to extend existing services.

The flagship recommendation — a plan-before-execute gate — turned out to
already be fully implemented (BacklogItem.plan_approved, TransitionGuard,
ApprovePlan RPC, GateVerdictBox/Approve Plan UI) but had no e2e coverage and
a stale feature-registry entry (tested: false despite passing Go tests).
Added tests/e2e/plan-gate.spec.ts to cover the gate/skip-planning path and
corrected the backend/frontend registry entries to reflect existing coverage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…-adopt-jules-plan-gate-features

# Conflicts:
#	.backlog-context.md
#	.claude/commands/backlog/help.md
#	.claude/commands/backlog/review.md
#	.claude/commands/backlog/status.md
#	.gitignore
#	docs/registry/features/backend/backlog/approve-plan.json
#	docs/registry/features/frontend/ui/backlog-item-detail.json
…tray scanner binary

Sharpen the deferred-work section to explicitly name the container-per-session
(Docker/Podman) ADR criterion: it stays unscoped until a concrete, measured
local-resource-contention incident is on record, not just a hypothetical one.

Also drops tools/scanner/backend/cmd/scanner, an empty build artifact that got
tracked by an earlier bad .gitignore edit in this branch's history.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012LPVbTCHNhUt6BKnUtTfCs
@tstapler
tstapler merged commit 2c3c887 into main Jul 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Registry Validation

Registry Validation
===================

Building backend scanner...
Scanning backend features...
Wrote 116 feature files to /tmp/tmp.9q3yIGIaOP/backend
Wrote 14 feature files to /tmp/tmp.9q3yIGIaOP/backend
Wrote 40 feature files to /tmp/tmp.9q3yIGIaOP/backend
Wrote 6 feature files to /tmp/tmp.9q3yIGIaOP/backend
Wrote 10 feature files to /tmp/tmp.9q3yIGIaOP/backend

=== Backend Registry Diff ===
Committed: 174  Generated: 174  Divergence: 0.0%
⚠️  111 feature(s) missing // +api: marker (markerFound: false)

✅ Registry validation passed. Divergence: 0.0%

Test Coverage: 13/174 features have testIds (7.5%)

Divergence > 2% blocks merges. Coverage reporting is advisory only.

@github-actions

Copy link
Copy Markdown
Contributor

Go Benchmarks (Tier 1)

benchmarks/go/tier1-baseline.txt:98: missing iteration count
benchmarks/go/tier1-baseline.txt:198: missing iteration count
tier1-bench.txt:98: missing iteration count
tier1-bench.txt:198: missing iteration count
goos: linux
goarch: amd64
pkg: github.com/tstapler/stapler-squad/session
cpu: AMD EPYC 7763 64-Core Processor                
                                            │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                                            │              sec/op              │   sec/op     vs base               │
CircularBufferWrite_4KB-4                                          83.11n ± 1%   81.99n ± 1%   -1.35% (p=0.026 n=8)
CircularBufferWrite_4KB_Allocs-4                                   84.20n ± 1%   83.05n ± 2%   -1.37% (p=0.038 n=8)
CircularBufferGetRecent_4KB-4                                      482.0n ± 1%   532.5n ± 5%  +10.48% (p=0.001 n=7)
CircularBufferGetAll-4                                             3.702µ ± 3%   4.542µ ± 8%  +22.69% (p=0.000 n=8)
GetTimeSinceLastMeaningfulOutput_HotPath-4                         65.81n ± 0%   65.82n ± 0%        ~ (p=0.662 n=8)
GetTimeSinceLastMeaningfulOutput_ColdPath-4                        33.06n ± 0%   33.12n ± 1%        ~ (p=0.065 n=7)
geomean                                                            173.4n        181.6n        +4.76%

                                            │ benchmarks/go/tier1-baseline.txt │           tier1-bench.txt            │
                                            │               B/op               │     B/op      vs base                │
CircularBufferWrite_4KB-4                                         0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferWrite_4KB_Allocs-4                                  0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferGetRecent_4KB-4                                   4.000Ki ± 0%     4.000Ki ± 0%       ~ (p=1.000 n=7) ¹
CircularBufferGetAll-4                                          40.00Ki ± 0%     40.00Ki ± 0%       ~ (p=1.000 n=8) ¹
GetTimeSinceLastMeaningfulOutput_HotPath-4                        0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=8) ¹
GetTimeSinceLastMeaningfulOutput_ColdPath-4                       0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                                      ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                            │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                                            │            allocs/op             │ allocs/op   vs base                │
CircularBufferWrite_4KB-4                                         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferWrite_4KB_Allocs-4                                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferGetRecent_4KB-4                                     1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=7) ¹
CircularBufferGetAll-4                                            1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=8) ¹
GetTimeSinceLastMeaningfulOutput_HotPath-4                        0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
GetTimeSinceLastMeaningfulOutput_ColdPath-4                       0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                                      ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                              │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                              │               B/s                │     B/s       vs base              │
CircularBufferWrite_4KB-4                           45.90Gi ± 0%   46.53Gi ± 2%  +1.37% (p=0.028 n=8)
CircularBufferGetRecent_4KB-4                       7.914Gi ± 1%   7.164Gi ± 5%  -9.48% (p=0.001 n=7)
geomean                                             19.06Gi        18.26Gi       -4.21%

pkg: github.com/tstapler/stapler-squad/session/detection/ratelimit
                              │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt          │
                              │              sec/op              │   sec/op     vs base              │
StripANSI_PlainText-4                                6.865n ± 0%   6.876n ± 0%  +0.16% (p=0.014 n=8)
StripANSI_WithEscapes-4                              749.6n ± 0%   760.0n ± 1%  +1.39% (p=0.001 n=8)
ProcessOutput_InactiveState-4                        6.339n ± 0%   6.322n ± 0%       ~ (p=0.053 n=8)
geomean                                              31.95n        32.09n       +0.42%

                              │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                              │               B/op               │    B/op     vs base                │
StripANSI_PlainText-4                               0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
StripANSI_WithEscapes-4                             136.0 ± 0%     136.0 ± 0%       ~ (p=1.000 n=8) ¹
ProcessOutput_InactiveState-4                       0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                        ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                              │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                              │            allocs/op             │ allocs/op   vs base                │
StripANSI_PlainText-4                               0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
StripANSI_WithEscapes-4                             5.000 ± 0%     5.000 ± 0%       ~ (p=1.000 n=8) ¹
ProcessOutput_InactiveState-4                       0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                        ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/tstapler/stapler-squad/session/queue
                              │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt          │
                              │              sec/op              │   sec/op     vs base              │
ReviewQueue_ConcurrentReads-4                        91.79n ± 3%   94.12n ± 6%  +2.54% (p=0.047 n=8)
ReviewQueue_Add-4                                    496.0n ± 0%   521.4n ± 2%  +5.13% (p=0.000 n=8)
geomean                                              213.4n        221.5n       +3.83%

                              │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                              │               B/op               │    B/op     vs base                │
ReviewQueue_ConcurrentReads-4                       0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
ReviewQueue_Add-4                                   640.0 ± 0%     640.0 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                        ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                              │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                              │            allocs/op             │ allocs/op   vs base                │
ReviewQueue_ConcurrentReads-4                       0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
ReviewQueue_Add-4                                   4.000 ± 0%     4.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                        ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/tstapler/stapler-squad/session/scrollback
                                      │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                                      │              sec/op              │   sec/op     vs base               │
CircularBuffer_ConcurrentReadWrite-4                        3.951µ ±  3%   4.103µ ± 2%   +3.85% (p=0.020 n=8)
CircularBuffer_BurstAppend-4                                102.4µ ±  1%   103.6µ ± 1%   +1.19% (p=0.000 n=8)
CircularBuffer_GetLastN_LargeBuffer-4                       20.72µ ±  3%   20.71µ ± 2%        ~ (p=0.574 n=8)
CircularBuffer_GetRange_Sequential-4                        14.57µ ± 12%   11.54µ ± 1%  -20.78% (p=0.000 n=8)
CircularBufferAppend-4                                     102.75n ± 15%   99.34n ± 0%   -3.32% (p=0.000 n=8)
CircularBufferGetLastN-4                                    2.620µ ±  3%   2.388µ ± 1%   -8.85% (p=0.000 n=8)
CircularBufferConcurrentAppend-4                            127.8n ±  1%   131.6n ± 0%   +3.01% (p=0.000 n=8)
geomean                                                     3.293µ         3.164µ        -3.93%

                                      │ benchmarks/go/tier1-baseline.txt │           tier1-bench.txt            │
                                      │               B/op               │     B/op      vs base                │
CircularBuffer_ConcurrentReadWrite-4                        6.062Ki ± 0%   6.062Ki ± 0%       ~ (p=1.000 n=8) ¹
CircularBuffer_BurstAppend-4                                62.50Ki ± 0%   62.50Ki ± 0%       ~ (p=1.000 n=8) ¹
CircularBuffer_GetLastN_LargeBuffer-4                       56.00Ki ± 0%   56.00Ki ± 0%       ~ (p=1.000 n=8) ¹
CircularBuffer_GetRange_Sequential-4                        28.00Ki ± 0%   28.00Ki ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferAppend-4                                        24.00 ± 0%     24.00 ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferGetLastN-4                                    6.000Ki ± 0%   6.000Ki ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferConcurrentAppend-4                              32.00 ± 0%     32.00 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                     3.077Ki        3.077Ki       +0.00%
¹ all samples are equal

                                      │ benchmarks/go/tier1-baseline.txt │           tier1-bench.txt           │
                                      │            allocs/op             │  allocs/op   vs base                │
CircularBuffer_ConcurrentReadWrite-4                          2.000 ± 0%    2.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBuffer_BurstAppend-4                                 1.000k ± 0%   1.000k ± 0%       ~ (p=1.000 n=8) ¹
CircularBuffer_GetLastN_LargeBuffer-4                         1.000 ± 0%    1.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBuffer_GetRange_Sequential-4                          1.000 ± 0%    1.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferAppend-4                                        1.000 ± 0%    1.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferGetLastN-4                                      1.000 ± 0%    1.000 ± 0%       ~ (p=1.000 n=8) ¹
CircularBufferConcurrentAppend-4                              1.000 ± 0%    1.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                       2.962         2.962       +0.00%
¹ all samples are equal

                             │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                             │               B/s                │     B/s       vs base              │
CircularBuffer_BurstAppend-4                       596.0Mi ± 1%   588.9Mi ± 2%  -1.18% (p=0.000 n=8)

pkg: github.com/tstapler/stapler-squad/session/tmux
                             │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt          │
                             │              sec/op              │   sec/op     vs base              │
StripANSICodes_PlainText-4                          6.880n ± 0%   6.875n ± 1%       ~ (p=0.878 n=8)
StripANSICodes_WithEscapes-4                        692.4n ± 0%   696.3n ± 1%  +0.57% (p=0.005 n=8)
IsBanner_PlainText-4                                480.6n ± 0%   480.9n ± 0%       ~ (p=0.315 n=8)
geomean                                             131.8n        132.0n       +0.19%

                             │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                             │               B/op               │    B/op     vs base                │
StripANSICodes_PlainText-4                         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
StripANSICodes_WithEscapes-4                       56.00 ± 0%     56.00 ± 0%       ~ (p=1.000 n=8) ¹
IsBanner_PlainText-4                               0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                       ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                             │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                             │            allocs/op             │ allocs/op   vs base                │
StripANSICodes_PlainText-4                         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
StripANSICodes_WithEscapes-4                       4.000 ± 0%     4.000 ± 0%       ~ (p=1.000 n=8) ¹
IsBanner_PlainText-4                               0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                       ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/tstapler/stapler-squad/session/tokens
                                   │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt          │
                                   │              sec/op              │   sec/op     vs base              │
TokenParser_ProcessUserEntry-4                            5.262m ± 1%   5.675m ± 2%  +7.85% (p=0.000 n=8)
DetectCommandsInText/NoSlash-4                            7.490n ± 0%   7.503n ± 1%  +0.16% (p=0.008 n=8)
DetectCommandsInText/WithCommand-4                        1.668µ ± 0%   1.704µ ± 1%  +2.19% (p=0.000 n=8)
geomean                                                   4.036µ        4.171µ       +3.35%

                                   │ benchmarks/go/tier1-baseline.txt │           tier1-bench.txt            │
                                   │               B/op               │     B/op      vs base                │
TokenParser_ProcessUserEntry-4                         11.02Mi ± 0%     11.02Mi ± 0%       ~ (p=0.865 n=8)
DetectCommandsInText/NoSlash-4                           0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=8) ¹
DetectCommandsInText/WithCommand-4                       433.0 ± 0%       433.0 ± 0%       ~ (p=1.000 n=8)
geomean                                                             ²                 -0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                   │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                                   │            allocs/op             │ allocs/op   vs base                │
TokenParser_ProcessUserEntry-4                           34.00 ± 0%     34.00 ± 0%       ~ (p=1.000 n=8) ¹
DetectCommandsInText/NoSlash-4                           0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
DetectCommandsInText/WithCommand-4                       6.000 ± 0%     6.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                             ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/tstapler/stapler-squad/session/unfinished
                               │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt          │
                               │              sec/op              │   sec/op     vs base              │
DiffShortstat/GitVCSReader-4                          3.112m ± 0%   3.353m ± 1%  +7.72% (p=0.000 n=8)
DiffShortstat/GoGitVCSReader-4                        76.76n ± 0%   77.11n ± 0%  +0.46% (p=0.007 n=8)
DiffShortstatCached-4                                 75.58n ± 0%   75.64n ± 1%       ~ (p=0.860 n=8)
geomean                                               2.623µ        2.694µ       +2.69%

                               │ benchmarks/go/tier1-baseline.txt │           tier1-bench.txt            │
                               │               B/op               │     B/op      vs base                │
DiffShortstat/GitVCSReader-4                       56.56Ki ± 0%     56.56Ki ± 0%       ~ (p=0.822 n=8)
DiffShortstat/GoGitVCSReader-4                       0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=8) ¹
DiffShortstatCached-4                                0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                         ²                 -0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                               │ benchmarks/go/tier1-baseline.txt │          tier1-bench.txt           │
                               │            allocs/op             │ allocs/op   vs base                │
DiffShortstat/GitVCSReader-4                         360.0 ± 0%     360.0 ± 0%       ~ (p=1.000 n=8)
DiffShortstat/GoGitVCSReader-4                       0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
DiffShortstatCached-4                                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                                         ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

@github-actions

Copy link
Copy Markdown
Contributor

🎬 E2E Feature Demos

2 shard(s) recorded feature flows for this PR.

recordings shard 1
recordings shard 2

Demo preview opens directly in browser (single-file HTML). Raw WebM recordings in ZIP. Expires after 30 days.

@github-actions

Copy link
Copy Markdown
Contributor

E2E RPC Latency

list-sessions-ttfb-mean: 5ms (▲ slower +53.1%; baseline: 4ms)
list-sessions-total-mean: 6ms (▲ slower +1.3%; baseline: 6ms)

@github-actions

Copy link
Copy Markdown
Contributor

📊 Feature E2E Coverage

Feature coverage report unavailable

Run make e2e-report locally to view the full Allure report.

@github-actions

Copy link
Copy Markdown
Contributor

Frontend Terminal Throughput

terminal-throughput-mean: 16 KB/s ▲ +1.3% (baseline: 16 KB/s)
terminal-throughput-p50: 16 KB/s ▲ +0.6% (baseline: 16 KB/s)

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.

1 participant