@midhunxavier/code-flow 0.0.0-stage → 0.1.0-preview.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +141 -2
- package/bin/codeflow.mjs +8 -0
- package/bin/launcher.mjs +127 -0
- package/dist/remote-host.json +1 -0
- package/licenses/inter.txt +92 -0
- package/licenses/preact.txt +21 -0
- package/licenses/signals-core.txt +21 -0
- package/licenses/signals.txt +21 -0
- package/licenses/typescript-notices.txt +193 -0
- package/licenses/typescript.txt +55 -0
- package/licenses/uqr.txt +22 -0
- package/licenses/xterm-fit.txt +19 -0
- package/licenses/xterm.txt +21 -0
- package/package.json +34 -4
- package/public/assets/changes-62ZIEQSN.js +1 -0
- package/public/assets/chunk-2PZVOKID.js +1 -0
- package/public/assets/chunk-4D5IENEB.js +1 -0
- package/public/assets/chunk-5SARP5MU.js +1 -0
- package/public/assets/chunk-63YLZ3PR.js +1 -0
- package/public/assets/chunk-7FUHKF2M.js +1 -0
- package/public/assets/chunk-APQEVJ2K.js +1 -0
- package/public/assets/chunk-CGOZQMEZ.js +2 -0
- package/public/assets/chunk-J4VYS3KV.js +2 -0
- package/public/assets/chunk-L7TUCIYF.js +1 -0
- package/public/assets/chunk-SIHDWM2Y.js +154 -0
- package/public/assets/chunk-TEJVYIKC.js +1 -0
- package/public/assets/code-browser-VB2HGZSG.js +4 -0
- package/public/assets/filtered-tasks-ES5CP4KV.js +1 -0
- package/public/assets/interactive-browser-7F5ZXRUV.js +7 -0
- package/public/assets/join-project-6RTFHNCA.js +1 -0
- package/public/assets/main-65EW73SB.js +1 -0
- package/public/assets/project-invitations-view-GMPWGWYM.js +1 -0
- package/public/assets/settings-UB5Q4AQM.js +9 -0
- package/public/assets/styles-18792BB4.css +32 -0
- package/public/assets/team-server-wizard-2GLDWS6D.js +8 -0
- package/public/assets/terminal-IWAIM4DE.js +62 -0
- package/public/assets.json +1 -0
- package/public/bundle-meta.json +1 -0
- package/public/docs/.nojekyll +0 -0
- package/public/docs/accessibility.html +19 -0
- package/public/docs/acp-agents.html +117 -0
- package/public/docs/agent-containers.html +79 -0
- package/public/docs/api.html +1130 -0
- package/public/docs/app.js +342 -0
- package/public/docs/application-improvements.html +275 -0
- package/public/docs/architecture-explorer.html +19 -0
- package/public/docs/architecture.html +149 -0
- package/public/docs/auto-team.html +148 -0
- package/public/docs/automations.html +109 -0
- package/public/docs/checkpoint-review.html +37 -0
- package/public/docs/code-hosts.html +35 -0
- package/public/docs/code-intelligence.html +35 -0
- package/public/docs/configuration.html +346 -0
- package/public/docs/context-inspection.html +23 -0
- package/public/docs/coordinated-changes.html +28 -0
- package/public/docs/deferred-runs.html +25 -0
- package/public/docs/dependency-discovery.html +19 -0
- package/public/docs/documentation.html +84 -0
- package/public/docs/dynamic-teams-evaluation.html +174 -0
- package/public/docs/dynamic-teams-implementation-plan.html +882 -0
- package/public/docs/dynamic-teams-implementation-review-1.html +141 -0
- package/public/docs/dynamic-teams-plan-review-0.html +204 -0
- package/public/docs/extensions.html +42 -0
- package/public/docs/external-sources.html +96 -0
- package/public/docs/filesystem-policy.html +26 -0
- package/public/docs/filtered-tasks.html +44 -0
- package/public/docs/font-license.txt +92 -0
- package/public/docs/getting-started.html +143 -0
- package/public/docs/github-review-threads.html +26 -0
- package/public/docs/github.html +157 -0
- package/public/docs/help.html +69 -0
- package/public/docs/index.html +88 -0
- package/public/docs/installation.html +80 -0
- package/public/docs/launch-profiles.html +48 -0
- package/public/docs/maintenance.html +60 -0
- package/public/docs/memory-claims.html +31 -0
- package/public/docs/memory-storage.html +58 -0
- package/public/docs/notifications.html +39 -0
- package/public/docs/patterns.html +195 -0
- package/public/docs/performance-results.html +210 -0
- package/public/docs/performance.html +166 -0
- package/public/docs/project-conventions.html +22 -0
- package/public/docs/project-first-navigation-plan.html +587 -0
- package/public/docs/project-teams-implementation-plan.html +772 -0
- package/public/docs/project-teams.html +129 -0
- package/public/docs/provider-compatibility.html +20 -0
- package/public/docs/releasing.html +65 -0
- package/public/docs/remote-workers.html +64 -0
- package/public/docs/review-inbox.html +26 -0
- package/public/docs/run-storage.html +23 -0
- package/public/docs/runs.html +141 -0
- package/public/docs/search.json +1 -0
- package/public/docs/security.html +133 -0
- package/public/docs/shared-projects.html +31 -0
- package/public/docs/ssh-projects.html +60 -0
- package/public/docs/style.css +768 -0
- package/public/docs/task-reruns.html +30 -0
- package/public/docs/team-collaboration.html +412 -0
- package/public/docs/verification.html +22 -0
- package/public/docs/vscode.html +53 -0
- package/public/docs/worker-permission-verification.html +131 -0
- package/public/index.html +17 -0
- package/scripts/check-node.mjs +7 -0
- package/scripts/codeflow.mjs +55 -0
- package/scripts/computer-use.swift +64 -0
- package/scripts/pty.py +273 -0
- package/src/acp-connections.js +110 -0
- package/src/adapters/acp-presets.js +37 -0
- package/src/adapters/acp-types.js +0 -0
- package/src/adapters/acp.js +328 -0
- package/src/adapters/agent-tools.js +28 -0
- package/src/adapters/agy-auth.js +67 -0
- package/src/adapters/agy-isolation.js +242 -0
- package/src/adapters/agy-tools.js +45 -0
- package/src/adapters/agy.js +326 -0
- package/src/adapters/claude-stream.js +58 -0
- package/src/adapters/claude.js +282 -0
- package/src/adapters/codex-app-server.js +555 -0
- package/src/adapters/codex.js +311 -0
- package/src/adapters/errors.js +57 -0
- package/src/adapters/index.js +91 -0
- package/src/adapters/managed-permissions.js +37 -0
- package/src/adapters/model-discovery.js +100 -0
- package/src/adapters/process.js +433 -0
- package/src/adapters/team-tools.js +103 -0
- package/src/adapters/types.js +0 -0
- package/src/agent-browser.js +688 -0
- package/src/agent-computer.js +88 -0
- package/src/agent-container.js +155 -0
- package/src/agent-team-definitions.js +131 -0
- package/src/agent-tool-client.mjs +79 -0
- package/src/agent-tools.js +296 -0
- package/src/approvals.js +134 -0
- package/src/architecture.js +456 -0
- package/src/assets.js +44 -0
- package/src/automation.js +901 -0
- package/src/browser-files.js +293 -0
- package/src/browser-ownership.js +150 -0
- package/src/certificate-renewal.js +75 -0
- package/src/chat-family.js +25 -0
- package/src/chat-handoff.js +87 -0
- package/src/checkpoint-review.js +72 -0
- package/src/checks.js +303 -0
- package/src/code-host-git.js +102 -0
- package/src/code-hosts-api.js +99 -0
- package/src/code-hosts.js +482 -0
- package/src/code-intelligence-worker.mjs +452 -0
- package/src/code-intelligence.js +141 -0
- package/src/collab/api.js +365 -0
- package/src/collab/checkpoints.js +198 -0
- package/src/collab/connections.js +139 -0
- package/src/collab/host-execution.js +347 -0
- package/src/collab/hub-client.js +210 -0
- package/src/collab/link-api.js +229 -0
- package/src/collab/link.js +595 -0
- package/src/collab/model.js +496 -0
- package/src/collab/runner.js +1014 -0
- package/src/collab/store.js +1452 -0
- package/src/collab/terminals.js +361 -0
- package/src/collaboration-reviews.js +116 -0
- package/src/config.js +48 -0
- package/src/context-budget.js +14 -0
- package/src/context-inspection.js +204 -0
- package/src/context.js +154 -0
- package/src/conventions.js +283 -0
- package/src/coordinated-api.js +247 -0
- package/src/deferred-launch.js +82 -0
- package/src/deferred-runs.js +515 -0
- package/src/dependency-health.js +35 -0
- package/src/diff.js +43 -0
- package/src/docs-help.js +316 -0
- package/src/doctor.js +232 -0
- package/src/documentation-changes.js +20 -0
- package/src/engine.js +5258 -0
- package/src/env.js +44 -0
- package/src/execution-budget.js +8 -0
- package/src/experience.js +50 -0
- package/src/extensions.js +144 -0
- package/src/filesystem-access.js +107 -0
- package/src/filesystem-policy.js +238 -0
- package/src/filtered-task-limits.js +93 -0
- package/src/filtered-tasks-api.js +53 -0
- package/src/filtered-tasks.js +576 -0
- package/src/frame-policy.js +66 -0
- package/src/fs.js +57 -0
- package/src/git.js +626 -0
- package/src/github-review-threads.js +181 -0
- package/src/github.js +538 -0
- package/src/http.js +69 -0
- package/src/improve-settings.js +38 -0
- package/src/improve.js +187 -0
- package/src/integrations.js +373 -0
- package/src/integrity.js +259 -0
- package/src/journey-api.js +77 -0
- package/src/journey-replay.js +65 -0
- package/src/journey-store.js +97 -0
- package/src/journeys.js +60 -0
- package/src/json.js +81 -0
- package/src/launch-profiles.js +292 -0
- package/src/learnings.js +80 -0
- package/src/local-app-url.js +19 -0
- package/src/log.js +39 -0
- package/src/maintenance.js +335 -0
- package/src/memory-analysis.js +182 -0
- package/src/memory-claims.js +153 -0
- package/src/memory-sqlite.js +236 -0
- package/src/memory.js +552 -0
- package/src/merge-validation.js +58 -0
- package/src/model-catalog.js +239 -0
- package/src/model-research.js +91 -0
- package/src/notes.js +176 -0
- package/src/notifications.js +413 -0
- package/src/patterns/auto-team-model.js +230 -0
- package/src/patterns/auto-team.js +816 -0
- package/src/patterns/council.js +199 -0
- package/src/patterns/debate.js +188 -0
- package/src/patterns/findings.js +141 -0
- package/src/patterns/index.js +21 -0
- package/src/patterns/loop.js +158 -0
- package/src/patterns/pipeline.js +125 -0
- package/src/patterns/prompts.js +181 -0
- package/src/patterns/race.js +147 -0
- package/src/patterns/schemas.js +40 -0
- package/src/patterns/solo.js +46 -0
- package/src/patterns/supervisor.js +235 -0
- package/src/patterns/task-draft.js +29 -0
- package/src/patterns/task-review.js +45 -0
- package/src/patterns/tdd.js +231 -0
- package/src/patterns/team-strategies.js +67 -0
- package/src/performance.js +43 -0
- package/src/persistence-status.js +35 -0
- package/src/phone-sessions.js +96 -0
- package/src/preview-overlay.js +392 -0
- package/src/preview.js +230 -0
- package/src/privacy.js +23 -0
- package/src/project-report.js +22 -0
- package/src/project-team-budget.js +22 -0
- package/src/project-team-model.js +225 -0
- package/src/project-team-policy.js +42 -0
- package/src/project-team-store.js +234 -0
- package/src/project-team-usage.js +24 -0
- package/src/project-teams-api.js +43 -0
- package/src/project-teams.js +644 -0
- package/src/projects.js +290 -0
- package/src/provider-eligibility.js +9 -0
- package/src/readiness.js +98 -0
- package/src/remote-tls.js +66 -0
- package/src/remote-workers/bundles.js +198 -0
- package/src/remote-workers/client.js +332 -0
- package/src/remote-workers/durability.js +37 -0
- package/src/remote-workers/protocol.js +68 -0
- package/src/remote-workers/stdio.js +138 -0
- package/src/remote-workers/worker.js +304 -0
- package/src/remote.js +204 -0
- package/src/repo-config.js +201 -0
- package/src/repo-coordination.js +725 -0
- package/src/repo-tree.js +106 -0
- package/src/repository-identity.js +13 -0
- package/src/retention-policy.js +466 -0
- package/src/review-inbox.js +38 -0
- package/src/routing.js +49 -0
- package/src/run-analysis.js +111 -0
- package/src/run-cold-store.js +231 -0
- package/src/run-environment.js +15 -0
- package/src/run-history.js +91 -0
- package/src/run-log.js +160 -0
- package/src/run-permissions.js +111 -0
- package/src/run-projection.js +77 -0
- package/src/run-recovery.js +53 -0
- package/src/run-status.js +56 -0
- package/src/serve.js +138 -0
- package/src/server.js +2871 -0
- package/src/shared-access.js +103 -0
- package/src/shared-accounts.js +381 -0
- package/src/shared-api.js +239 -0
- package/src/shell.js +346 -0
- package/src/ship.js +344 -0
- package/src/slots.js +74 -0
- package/src/snapshot.js +388 -0
- package/src/source-context.js +17 -0
- package/src/sse-writer.js +70 -0
- package/src/ssh-projects/bootstrap.mjs +95 -0
- package/src/ssh-projects/config.js +45 -0
- package/src/ssh-projects/gateway.js +143 -0
- package/src/ssh-projects/manager.js +320 -0
- package/src/ssh-projects/team-autostart.mjs +93 -0
- package/src/ssh-projects/team-remove.mjs +69 -0
- package/src/ssh-projects/team-status.mjs +39 -0
- package/src/ssh-projects/transport.js +133 -0
- package/src/stats.js +139 -0
- package/src/store.js +544 -0
- package/src/stream.js +91 -0
- package/src/sweeps.js +241 -0
- package/src/tailscale.js +101 -0
- package/src/task-draft.js +23 -0
- package/src/task-team.js +164 -0
- package/src/team-evaluation.js +243 -0
- package/src/team-mailbox.js +160 -0
- package/src/team-memory.js +84 -0
- package/src/team-rerun-graph.js +15 -0
- package/src/team-reruns.js +130 -0
- package/src/team-scheduler.js +121 -0
- package/src/team-steering.js +21 -0
- package/src/team-template-store.js +98 -0
- package/src/team-templates.js +117 -0
- package/src/team-tool-client.mjs +79 -0
- package/src/team-tools.js +235 -0
- package/src/teams.js +0 -0
- package/src/templates.js +62 -0
- package/src/transcript.js +134 -0
- package/src/verification-integrity.js +27 -0
- package/src/verification.js +183 -0
- package/src/watch.js +195 -0
- package/src/work-queue.js +47 -0
- package/src/workflow-control.js +83 -0
- package/src/workspace-api.js +207 -0
- package/src/workspace-changes.js +61 -0
- package/src/workspace.js +146 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content="Team patterns — code-flow guides and reference"><title>Team patterns · code-flow</title><link rel="icon" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmlld0JveD0iMCAwIDY0IDY0Ij4KICA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iIzFlMWYxYSIgc3Ryb2tlPSIjM2Q0MDM2IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8c3ZnIHg9IjE1IiB5PSIxNSIgd2lkdGg9IjM0IiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VjZWJlNCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgPHBhdGggZD0iTTEyIDNsOSA1LTkgNS05LTV6TTMgMTNsOSA1IDktNU0zIDE3LjVsOSA1IDktNSIvPgogIDwvc3ZnPgo8L3N2Zz4K"><link rel="stylesheet" href="style.css"><script src="app.js" defer></script></head>
|
|
3
|
+
<body data-page="patterns"><a class="skip-link" href="#content">Skip to content</a>
|
|
4
|
+
<header class="topbar"><a class="brand" href="index.html"><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmlld0JveD0iMCAwIDY0IDY0Ij4KICA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iIzFlMWYxYSIgc3Ryb2tlPSIjM2Q0MDM2IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8c3ZnIHg9IjE1IiB5PSIxNSIgd2lkdGg9IjM0IiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VjZWJlNCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgPHBhdGggZD0iTTEyIDNsOSA1LTkgNS05LTV6TTMgMTNsOSA1IDktNU0zIDE3LjVsOSA1IDktNSIvPgogIDwvc3ZnPgo8L3N2Zz4K" width="30" height="30" alt=""><strong>Code Flow</strong><span>Docs</span></a><button class="search-trigger" id="open-search">Search documentation <kbd>⌘ K</kbd></button><div class="top-actions"><a href="https://github.com/midhunxavier/code-flow">GitHub ↗</a><button id="theme" aria-label="Change color theme">Theme</button><button id="open-help" class="primary" hidden aria-expanded="false" aria-controls="help-panel">Ask code-flow</button><button id="menu" aria-label="Toggle documentation navigation" aria-expanded="false" aria-controls="sidebar">☰</button></div></header>
|
|
5
|
+
<div class="layout"><nav class="sidebar" id="sidebar" aria-label="Documentation"><section><h2>Get started</h2><a href="index.html" >Overview</a><a href="installation.html" >Install Code Flow preview</a><a href="getting-started.html" >Getting started</a><a href="patterns.html" aria-current="page">Team patterns</a><a href="acp-agents.html" >ACP coding agents</a><a href="help.html" >Ask code-flow</a></section><section><h2>Work with agents</h2><a href="runs.html" >Runs and workspace</a><a href="auto-team.html" >Team</a><a href="project-teams.html" >Project missions (preview)</a><a href="review-inbox.html" >Review inbox</a><a href="verification.html" >Verification and review</a><a href="github.html" >GitHub, review and shipping</a><a href="github-review-threads.html" >GitHub review threads</a><a href="task-reruns.html" >Selective task reruns</a><a href="deferred-runs.html" >Deferred runs</a></section><section><h2>Your workspace</h2><a href="configuration.html" >Configuration</a><a href="context-inspection.html" >Context and budgets</a><a href="project-conventions.html" >Versioned project conventions</a><a href="checkpoint-review.html" >Checkpoints and reversions</a><a href="launch-profiles.html" >Service launch profiles</a><a href="code-intelligence.html" >Code intelligence</a><a href="architecture-explorer.html" >Architecture explorer</a><a href="memory-storage.html" >Project memory</a><a href="memory-claims.html" >Semantic claim review</a><a href="coordinated-changes.html" >Coordinated changes</a></section><section><h2>Connect and collaborate</h2><a href="team-collaboration.html" >Team collaboration</a><a href="shared-projects.html" >Shared project accounts</a><a href="ssh-projects.html" >SSH projects</a><a href="remote-workers.html" >Remote agent workers</a><a href="code-hosts.html" >GitLab and Bitbucket code workflows</a><a href="external-sources.html" >Read-only external sources</a><a href="automations.html" >Automations and away mode</a><a href="notifications.html" >Outbound notifications</a></section><section><h2>Operate safely</h2><a href="security.html" >Security, subscriptions and caveats</a><a href="filesystem-policy.html" >Project filesystem policy</a><a href="agent-containers.html" >Agent containers</a><a href="filtered-tasks.html" >Filtered Docker tasks</a><a href="dependency-discovery.html" >Dependency discovery</a><a href="maintenance.html" >Backup and maintenance</a></section><section><h2>Build and extend</h2><a href="architecture.html" >Architecture and development</a><a href="api.html" >Local API and command-line client</a><a href="extensions.html" >Provider and workflow extensions</a><a href="provider-compatibility.html" >Provider compatibility</a><a href="accessibility.html" >Accessibility acceptance</a><a href="performance.html" >Performance</a><a href="run-storage.html" >Run storage</a><a href="documentation.html" >Documentation and GitHub Pages</a><a href="releasing.html" >Preparing a preview release</a><a href="vscode.html" >Code Flow for VS Code</a></section><section><h2>Engineering records</h2><a href="application-improvements.html" >Application improvement program</a><a href="project-first-navigation-plan.html" >Project navigation review and implementation plan</a><a href="dynamic-teams-evaluation.html" >Dynamic teams: implementation evidence and rollout decision</a><a href="dynamic-teams-implementation-plan.html" >Dynamic teams, workflows, messaging, and memory</a><a href="dynamic-teams-implementation-review-1.html" >Review 1: the dynamic teams implementation</a><a href="worker-permission-verification.html" >Live worker permission verification</a><a href="dynamic-teams-plan-review-0.html" >Review 0: Dynamic teams implementation plan</a><a href="project-teams-implementation-plan.html" >Standing project teams implementation plan</a><a href="performance-results.html" >Measured performance: 19 October 2026</a></section><a class="app-link" id="back-app" hidden href="/">← Back to app</a></nav>
|
|
6
|
+
<main id="content" tabindex="-1"><div class="breadcrumb">Documentation <span>/</span> Get started</div><article><h1 id="team-patterns">Team patterns</h1>
|
|
7
|
+
<p>Start in Auto to let the coordinator build and adapt a plan. Solo is directly accessible for one agent. Open Advanced to choose reusable built-in workflows such as Plan → Build → Review, a loop, council, or debate, or to design and save a versioned template. Fixed workflows retain the execution and verification behavior described below.</p>
|
|
8
|
+
<h2 id="team-patterns-1">Team patterns</h2>
|
|
9
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
10
|
+
<thead>
|
|
11
|
+
<tr>
|
|
12
|
+
<th>Pattern</th>
|
|
13
|
+
<th>Roles</th>
|
|
14
|
+
<th>Flow</th>
|
|
15
|
+
<th>Reach for it when</th>
|
|
16
|
+
</tr>
|
|
17
|
+
</thead>
|
|
18
|
+
<tbody><tr>
|
|
19
|
+
<td><strong>Auto team</strong></td>
|
|
20
|
+
<td>coordinator, generated workers, independent reviewer</td>
|
|
21
|
+
<td>Propose and approve a team → ready-task scheduling → addressed questions and bounded revisions → integrate, check, review and repair</td>
|
|
22
|
+
<td>You want code-flow to choose the team and workflow; see <a href="auto-team.html">Auto team</a> for communication, memories, budgets and recovery</td>
|
|
23
|
+
</tr>
|
|
24
|
+
<tr>
|
|
25
|
+
<td><strong>Plan → Build → Review</strong></td>
|
|
26
|
+
<td>planner, builder, reviewer</td>
|
|
27
|
+
<td>Plan (read-only) → implement → <strong>check</strong> (the builder fixes it first if it fails) → independent review against the task, with the plan as context → code-flow runs the reviewer's tests → the builder fixes what blocks → re-check and re-review, up to <em>N</em> rounds</td>
|
|
28
|
+
<td>Most features and bug fixes. Cross-vendor review catches what a model misses in its own work</td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr>
|
|
31
|
+
<td><strong>Loop until green</strong></td>
|
|
32
|
+
<td>workers (1+, in hand-off order)</td>
|
|
33
|
+
<td>Baseline check → the agent works → code-flow runs the check → the failure goes back to the agent → repeat until it passes. A round that makes more tests fail is undone. After <em>K</em> rounds without progress, the next vendor takes over with a handover note</td>
|
|
34
|
+
<td>"Done" is a command: failing tests, type errors, a broken build. Needs a check</td>
|
|
35
|
+
</tr>
|
|
36
|
+
<tr>
|
|
37
|
+
<td><strong>Best-of-N race</strong></td>
|
|
38
|
+
<td>contestants (2+), judge</td>
|
|
39
|
+
<td>All contestants solve the task in parallel, each in its own worktree → judge compares <strong>anonymized</strong> diffs (Candidate A/B…) and picks one</td>
|
|
40
|
+
<td>The solution space is wide, or the task is risky enough to want several independent attempts</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td><strong>Debate → Synthesize → Build</strong></td>
|
|
44
|
+
<td>debaters (2+), synthesizer, builder and reviewer (optional)</td>
|
|
45
|
+
<td>Independent proposals → critique rounds where each debater sees the others' proposals (<strong>anonymized</strong>: Proposal A/B…) and revises → synthesizer merges and records each decision → builder implements → reviewer checks it against the plan → code-flow runs the reviewer's tests → builder fixes what blocks → re-check and re-review, up to <em>N</em> rounds</td>
|
|
46
|
+
<td>Architecture, API design, big refactors. Leave the builder empty for design only</td>
|
|
47
|
+
</tr>
|
|
48
|
+
<tr>
|
|
49
|
+
<td><strong>Supervisor → Workers</strong></td>
|
|
50
|
+
<td>supervisor, workers (1+)</td>
|
|
51
|
+
<td>Supervisor splits the task into parallel subtasks and assigns workers → workers build on separate branches → branches merge into an integration branch; the supervisor resolves conflicts, a reviewer reviews, and the supervisor fixes what blocks</td>
|
|
52
|
+
<td>Larger tasks that split cleanly (backend / frontend / tests)</td>
|
|
53
|
+
</tr>
|
|
54
|
+
<tr>
|
|
55
|
+
<td><strong>Test-first (adversarial tester)</strong></td>
|
|
56
|
+
<td>tester, builder</td>
|
|
57
|
+
<td>Tester writes failing tests → builder makes them pass without editing them or how they run (code-flow undoes it if it does) → tester runs them, adds edge-case tests, and sends failures back</td>
|
|
58
|
+
<td>Behavior you can specify with tests. Stops an agent from grading its own homework</td>
|
|
59
|
+
</tr>
|
|
60
|
+
<tr>
|
|
61
|
+
<td><strong>Review council</strong></td>
|
|
62
|
+
<td>reviewers (1+), chair</td>
|
|
63
|
+
<td>Reviewers review the PR's or branch's changes independently, read-only → code-flow runs the tests they show bugs with → the chair merges the findings without knowing who wrote what. Findings rank by severity, then confirmed before the rest, then by how many reviewers raised them</td>
|
|
64
|
+
<td>Reviewing a PR before merging. Nothing is changed or posted without you</td>
|
|
65
|
+
</tr>
|
|
66
|
+
<tr>
|
|
67
|
+
<td><strong>Single agent</strong></td>
|
|
68
|
+
<td>agent</td>
|
|
69
|
+
<td>One agent works on the task in its own worktree → code-flow commits and runs the check if you set one → you reply, and each reply continues the same session on the same branch</td>
|
|
70
|
+
<td>Quick changes, questions and exploring, where a team is more than the task needs. Start a team from its result when you want a second opinion</td>
|
|
71
|
+
</tr>
|
|
72
|
+
</tbody></table>
|
|
73
|
+
</div><p>Every pattern works with any mix of agents. A good default is to have a <strong>different vendor review or judge</strong> than the one that wrote the code.</p>
|
|
74
|
+
<p><strong>Auto</strong> in a role picks an installed agent when the run starts. It skips plans that are at 90% or more of a usage window or recently hit a limit, until the limit resets (Claude reports its windows; the others report only when they're limited), and for 15 minutes a CLI that turned out not to be signed in. Once agents have a few finished runs in a repo, it prefers the one whose code passed the check most often there. The pick and the reason are written to the run's activity log. Quota is saved, so a restart remembers which plans are out.</p>
|
|
75
|
+
<p>Verdicts, judge picks, subtask lists and test specs are <strong>schema-constrained</strong>: <code>claude --json-schema</code>, <code>codex --output-schema</code> and <code>agy --json-schema</code>. An answer that still doesn't fit gets one retry in the same session, and then the run <strong>fails</strong>: an unreadable review is never treated as approval.</p>
|
|
76
|
+
<p>Judging in a race is blind: no author summaries, a shuffled order (seeded per run, so a resumed run replays identically), and an optional <strong>panel</strong> of judges that vote. Pick vendors that aren't competing; the UI suggests one, and the log warns when a judge also competes.</p>
|
|
77
|
+
<p>The same goes for the other roles that weigh someone else's work. Unless you pick one yourself, the composer fills each with a vendor that didn't do that work, and the log warns when a run has one agent doing both:</p>
|
|
78
|
+
<ul>
|
|
79
|
+
<li>Plan → Build → Review: the reviewer is a vendor other than the planner's (and the builder's, when a third is installed). A reviewer that shares the planner's view lets a wrong plan through, so it's told to judge the change against the task, with the plan only as context.</li>
|
|
80
|
+
<li>Debate: the synthesizer is a vendor that isn't debating. Debaters and the synthesizer see the proposals as <em>Proposal A/B…</em>, never by vendor, so nobody sides with its own by name.</li>
|
|
81
|
+
<li>Supervisor: the reviewer is a vendor other than the supervisor's (see <em>Independent review</em> below).</li>
|
|
82
|
+
</ul>
|
|
83
|
+
<p>For the same reason, reviewers are anonymous to a review council's chair (<em>Reviewer A/B…</em>).</p>
|
|
84
|
+
<h2 id="checks-loops-and-limits">Checks, loops and limits</h2>
|
|
85
|
+
<p>code-flow treats each pattern as a loop, and what it engineers is the loop around the agents:</p>
|
|
86
|
+
<ul>
|
|
87
|
+
<li><p><strong>Done when:</strong> a check command such as <code>npm test</code>, <code>pytest</code> or <code>cargo test</code>. It's auto-detected from the repo and editable per repo.</p>
|
|
88
|
+
<ul>
|
|
89
|
+
<li>Python projects locked with uv or Poetry get their own environment, since system Python doesn't have their packages: with <code>uv.lock</code>, setup <code>uv sync</code> (<code>uv sync --all-packages</code> in a uv workspace) and check <code>uv run --no-sync pytest -q</code>; with <code>poetry.lock</code>, setup <code>poetry install</code> and check <code>poetry run pytest -q</code>. When the pytest config lives only in <code>tests/</code> (a workspace member of its own), the check runs from there. The composer says what it detected from.</li>
|
|
90
|
+
<li><strong>code-flow runs it itself</strong> after each change, in that worktree, and feeds the failing output back to the agent.</li>
|
|
91
|
+
<li>Loops end on that evidence, not on an agent saying it's done. Every check shows in the run's steps with its output.</li>
|
|
92
|
+
<li>Pipeline: reviewers only see code that passes.</li>
|
|
93
|
+
<li>Race: a candidate that fails can't win if another one passes.</li>
|
|
94
|
+
<li>Supervisor and Debate: the integrated or built result is checked, and the agent fixes failures.</li>
|
|
95
|
+
<li>Test-first: the new tests must fail first, then pass.</li>
|
|
96
|
+
<li>Every pattern: a passing result is proven fail-to-pass (see below).</li>
|
|
97
|
+
<li>When a run finishes but the check still fails, the run is shown as a warning, not a success.</li>
|
|
98
|
+
</ul>
|
|
99
|
+
</li>
|
|
100
|
+
<li><p><strong>A check that can't run isn't a failing check.</strong> Some failures say the environment is wrong, not the code: the command isn't installed (exit 127), Python has neither pytest nor the project's package, pytest can't load <code>conftest.py</code> or collects nothing (exit 4 or 5).</p>
|
|
101
|
+
<ul>
|
|
102
|
+
<li>When the run's first check fails like that, code-flow runs it once more on the base commit, in a throwaway checkout (with your setup). If it fails the same way there, the change isn't to blame.</li>
|
|
103
|
+
<li>The check is then set aside for the rest of the run: no "Fix failing check" rounds (agents would only rewrite the test setup to get around it), and later checks are skipped.</li>
|
|
104
|
+
<li>The review still runs, and the reviewer is told nothing was tested. The verdict stays unknown instead of failing.</li>
|
|
105
|
+
<li>The log, the result card, the inbox and the phone view say <em>The check can't run here: <first error line>. Set <code>setup</code> and <code>check</code> in .codeflow/config.json</em>. <em>Loop until green</em> stops before its first round, since no round could pass.</li>
|
|
106
|
+
<li>If the check runs on the base commit, the change broke it, and it's a failing check like any other.</li>
|
|
107
|
+
</ul>
|
|
108
|
+
</li>
|
|
109
|
+
<li><p><strong>A pass only counts if the tests are still the tests.</strong> After every change, code-flow looks for edits that make a check pass without fixing anything:</p>
|
|
110
|
+
<ul>
|
|
111
|
+
<li>deleted test files, and test files renamed to a name the runner doesn't pick up (<code>parse.test.ts</code> → <code>parse.ts</code>);</li>
|
|
112
|
+
<li>added <code>.skip</code>, <code>.only</code>, <code>xit</code>, <code>it.skipIf(…)</code>, <code>test.runIf(…)</code>, <code>test.skip.each(…)</code>, <code>test.fails</code>, <code>this.skip()</code>, <code>{ skip: true }</code>, <code>@pytest.mark.skip</code>, <code>pytest.importorskip</code>, <code>t.Skip()</code>…; in Python and JS/TS, not inside a string or comment (a test of a guard against skips may write one into a fixture);</li>
|
|
113
|
+
<li>test files that lost assertions;</li>
|
|
114
|
+
<li>a changed test config or CI workflow, including the runner's settings in a file shared with the rest of the project: pytest's <code>[tool.pytest…]</code> tables in <code>pyproject.toml</code>, and the <code>jest</code>, <code>vitest</code>, <code>mocha</code> or <code>ava</code> settings in any <code>package.json</code> (<code>addopts = "--deselect …"</code>, <code>testPathIgnorePatterns</code>…). The rest of those files (dependencies, other tools' settings) isn't flagged;</li>
|
|
115
|
+
<li>a changed <code>scripts.test</code> (or whichever script the check runs);</li>
|
|
116
|
+
<li>fewer tests running than before, read from the runner's summary. Each result branch keeps the counts of its check (the first and the latest, and at which commit), so a follow-up after the run compares with how many ran before its change.</li>
|
|
117
|
+
</ul>
|
|
118
|
+
<p>If git can't show the change, that is reported too (<em>couldn't verify test integrity</em>), as a serious issue: not being able to look isn't the same as finding nothing.</p>
|
|
119
|
+
<p>What happens next depends on the pattern:</p>
|
|
120
|
+
<ul>
|
|
121
|
+
<li>Loop until green: a pass that relies on such changes doesn't end the loop. The agent is told to undo them and fix the code. If it keeps them (the task may need it), or the rounds run out before it can answer, the result stays but is flagged, and the pass doesn't count: the run gets no verdict (as when the check can't run), its summary says <em>The check passes only with changes to the tests</em> and lists them, and no worker is credited with getting it green, so it doesn't feed Auto's picks. When the runner's summary doesn't say how many tests ran, removed assertions count as such a change too, since a drop in tests can't be seen.</li>
|
|
122
|
+
<li>Pipeline, Supervisor and Debate: the changes go to the reviewer, who raises each as an issue (so it blocks approval) unless the task needs them.</li>
|
|
123
|
+
<li>Race: a candidate that passes only that way can't beat one that passes honestly.</li>
|
|
124
|
+
<li>Test-first: the builder's edits to the tests are undone, and so are the tester's edits outside them. Only test files count as the tests (plus any the tester names): a stub module the tester adds for its tests to import is the builder's to fill in. The builder's changes to the test runner's own config are undone too, a new <code>conftest.py</code> or <code>vitest.config.*</code> included. What can't be put back file by file (the runner's settings in <code>package.json</code> or <code>pyproject.toml</code>, the check's script, a skip in an existing test, fewer tests running) goes back to the builder to undo, and the tests aren't probed or counted as passing until it has; if it never does, the run gets no verdict. Other changes the tests read (<code>vite.config.*</code>, a CI workflow) are passed on to the tester to look at.</li>
|
|
125
|
+
<li>PR follow-through: nobody reviews these fixes before they're pushed, so one that touches the tests at all isn't pushed: any of the changes above, not only the serious ones (a changed CI workflow or test config, a skip or an assertion fewer). The watch hands it to you instead.</li>
|
|
126
|
+
</ul>
|
|
127
|
+
<p>Every flagged result shows <strong>⚠ Changes to tests to check before merging</strong>.</p>
|
|
128
|
+
</li>
|
|
129
|
+
<li><p><strong>A pass should prove the change (fail-to-pass).</strong> A check that passes with the change might pass without it too, and then it shows nothing about the change. So once a result's check passes, code-flow proves it:</p>
|
|
130
|
+
<ul>
|
|
131
|
+
<li>it puts the change's tests onto the base code, in a checkout of its own (set up once per run): the test files, their fixtures and snapshots, and the runner's settings (<code>jest.config.*</code>, <code>conftest.py</code>, <code>pytest.ini</code>…). A test file the change deleted is deleted there too. When the change also adds or updates dependencies (<code>package.json</code>, <code>uv.lock</code>, <code>go.mod</code>…), those files come along and setup runs again, so a package only the change adds can't make the tests fail there as if they needed the change's code;</li>
|
|
132
|
+
<li>it runs the check there. <strong>It should fail</strong>: then at least one test needs the change, and the step reads <em>Fails without the change, as it should</em>. A test that imports code only the change adds fails there too, but only because it can't load (an import, collection or build error), which shows the code is there, not that it works: when that is the only way it fails, the result is a <strong>weak proof</strong>. A test that fails on what it checks (an assertion, an expected value) is full proof, also when another can't load;</li>
|
|
133
|
+
<li>if it passes there as well, the result is <strong>not proven</strong>: no test fails without the change. A run that never reached the tests (no test runner, nothing collected, setup failed, a timeout) proves nothing either way and says so.</li>
|
|
134
|
+
</ul>
|
|
135
|
+
<p>When a fix makes a failing check pass, the tests that failed before are the proof, and no new test is needed. When the check already passed before any change (a new feature, say), only a new test can prove it. What happens next depends on the pattern:</p>
|
|
136
|
+
<ul>
|
|
137
|
+
<li>Builders are told up front that their tests will run on the original code (Pipeline, Race, Debate, Supervisor's workers, Loop until green).</li>
|
|
138
|
+
<li>Loop until green: an unproven pass doesn't end the loop the first time. The agent is asked for a test that fails without its change, or to say why the task can't be tested that way (docs, a pure refactor). If it adds none, the pass stands and the result is flagged. When the change touches no tests, the baseline check is the run on the base code, so the proof needs no extra run.</li>
|
|
139
|
+
<li>Pipeline, Debate and Supervisor: before review, the builder (the supervisor, in Supervisor) is asked once for such a test. If the check then fails and the fix attempts don't help, code-flow undoes the new test, so asking for a proof never costs a green result. The reviewer sees the proof either way, and is told to ask for a test when it's missing.</li>
|
|
140
|
+
<li>Race: each passing candidate is proven, and the judge sees which ones are, still blind. It's evidence for the judge, not a rule: an unproven candidate can win.</li>
|
|
141
|
+
<li>Test-first: the tester's tests must fail before anything is implemented. If they pass, the tester is asked once to make them fail for the missing behaviour.</li>
|
|
142
|
+
<li>Review council: with a check, code-flow runs it on the PR's changes and proves them against the code the PR started from, and every reviewer sees both. The proof goes into the review you can post.</li>
|
|
143
|
+
<li>Single agent: the result is proven and the proof reported; nobody is asked for a test.</li>
|
|
144
|
+
</ul>
|
|
145
|
+
<p>Each result shows <strong>✓ Proven: a test fails without this change</strong> (with how it fails), <strong>⚠ Weak proof</strong> (the tests fail without it only because they can't load), or <strong>⚠ Not proven</strong>. Reviewers and judges are told which. Insights counts proven results per pattern, out of all the proven, weak and unproven ones. A proof costs one more run of the check (plus setup once per run). Turn it off for a repo with <code>"prove": false</code> in <code>.codeflow/config.json</code>.</p>
|
|
146
|
+
</li>
|
|
147
|
+
<li><p><strong>Review findings are checked, and only what blocks holds approval back.</strong> A reviewer's word is an opinion: a false positive costs a fix round, and the builder can't answer it. So in Pipeline, Debate, Supervisor and the Review council, a reviewer rates each issue high, medium or low, and shows a bug with a <em>repro</em>: a test file (its path and whole contents) that fails on the result because of the bug, a plain test-runner command that runs it, or both. A command alone can run tests that are already there.</p>
|
|
148
|
+
<ul>
|
|
149
|
+
<li>code-flow writes the test into a checkout of the result's current commit, apart from the builder's worktree, and runs it with the reviewer's command, or else the run's check. That checkout is set up once per run, and again only when a file that says which dependencies to install changes (<code>package.json</code>, <code>uv.lock</code>, <code>go.mod</code>…). It's the reverse of a fail-to-pass proof: there the tests should fail without the change; here the reviewer's test should fail with it.</li>
|
|
150
|
+
<li>The step reads <em>Fails: the problem is there</em> or <em>Passes: a false alarm</em>. A finding is <strong>confirmed</strong> (its test fails), <strong>not confirmed</strong> (it passes: a false alarm), or <strong>unconfirmed</strong> (no test came with it). Sometimes code-flow can't tell: the test runner didn't start, it timed out, the check already fails on that code without the test, or the test never ran: as many tests ran with it as without (with the reviewer's own command, code-flow counts once more without the test, unless the command names it), no test ran at all, or the runner doesn't say how many ran and nothing in its output mentions the test.</li>
|
|
151
|
+
<li>Only a plain invocation of a known test runner runs, and only a file named like a test goes in, so a repro can't replace the code it's about. The test is never written through a symbolic link in the code under review, so a PR's tracked link can't send it outside the checkout. At most 6 run per review; low issues aren't run.</li>
|
|
152
|
+
<li><strong>Approval goes by the findings, not the verdict word.</strong> High and medium issues block; low ones are suggestions. A false alarm never blocks. A high-severity issue claims a bug, so it blocks only when its test fails, or when code-flow couldn't run the test it came with. Without a test it's marked unconfirmed and doesn't block; reviewers are told to rate a problem no test can show medium. So a reviewer that approves with a confirmed bug doesn't approve, and one that requests changes over false alarms and suggestions does.</li>
|
|
153
|
+
<li>Findings that block go back to the builder (the supervisor, in Supervisor). Confirmed ones come with the reviewer's test and how it fails: the builder makes it pass and adds it (or one like it) to the change. The ones no test shows it fixes, or disputes with evidence (a test it ran, the code that handles it) instead of changing code. False alarms and suggestions are listed as needing no change. In the next review the reviewer sees the builder's answer, and keeps a disputed bug only with a repro that fails.</li>
|
|
154
|
+
<li>Each run of a reviewer's test is journaled, so a resumed run replays it instead of running it again, and the same test on the same commit runs once.</li>
|
|
155
|
+
<li>Review council: each reviewer's tests run before the chair merges the reviews, and the chair sees what each one showed and keeps a finding's repro. Findings rank by severity, then confirmed before the rest (false alarms last), then by how many reviewers raised them. The council's verdict goes by the findings too: it requests changes when a finding blocks, and approves when none does, whatever the chair said. Nor can the chair drop a finding a test confirms, or rate it lower: code-flow puts it back as its reviewer raised it, marked <em>Restored by code-flow</em> in the review, and the log says so. The review you can post says how each finding was checked.</li>
|
|
156
|
+
</ul>
|
|
157
|
+
<p>The result shows the latest review's findings, each marked <strong>✓ Confirmed</strong> (with how it fails, and the test), <strong>✗ Not confirmed</strong> (a false alarm), <strong>⚠ Unconfirmed</strong> or <em>couldn't run</em>, and which block. The summary counts unconfirmed high-severity claims and false alarms.</p>
|
|
158
|
+
</li>
|
|
159
|
+
<li><p><strong>Independent review:</strong> Supervisor has a <em>Reviewer</em> role (the composer picks a different vendor than the supervisor) that checks the integrated result instead of the supervisor checking its own work. The supervisor also writes the <em>contracts</em> (interfaces, names, data shapes) that every worker gets. If you skip the reviewer, the supervisor reviews its own integration and fixes what it finds, but nobody reviews those fixes; the result says "fixed by the supervisor, not re-reviewed". Debate can have a reviewer check the build against the agreed plan; after the builder addresses its review, the check runs and the reviewer looks again, up to <em>Max review rounds</em>.</p>
|
|
160
|
+
</li>
|
|
161
|
+
<li><p><strong>Missing parts are reported:</strong> in Supervisor, a worker that finishes without changing anything is listed as <em>no changes</em> with the first line of its answer, not as done. Its branch isn't merged, the supervisor and reviewer are told which parts are missing, and Insights counts it as a failed step. If the supervisor splits the task into more subtasks than <em>Max subtasks</em>, the extra ones are added to the last subtask (the log says so) rather than dropped.</p>
|
|
162
|
+
</li>
|
|
163
|
+
<li><p><strong>Parallel work stops together:</strong> in Race, Supervisor and Debate, an agent's failed turn is part of the result (a failed candidate, a missing part), but when anything else fails in one branch (its worktree, setup, a commit or a check), the other branches are stopped too. The run ends once every branch has, so no agent keeps running after it, and Stop and the slots stay accurate.</p>
|
|
164
|
+
</li>
|
|
165
|
+
<li><p><strong>What agents see:</strong> long diffs keep whole source files first, put lockfiles and generated files last, and list any file that didn't fit with the command to read it. A long check log keeps the lines around each failure plus the runner's summary, not just the tail. Agents also get the repo's own conventions files (<code>AGENTS.md</code>, <code>CLAUDE.md</code>, <code>GEMINI.md</code>, …), since each CLI otherwise reads only its own. They're also told about problems reviewers raised in more than one earlier run in that repo (turn this off with <code>"learn": false</code>).</p>
|
|
166
|
+
</li>
|
|
167
|
+
<li><p><strong>No progress means hand off:</strong> in <em>Loop until green</em>, a round counts as progress when it commits a change that leaves fewer tests failing, read from the runner's summary. A different failure with as many failing tests, or more, isn't progress. When the runner doesn't say how many fail, or no test fails and the check still does (a lint step after the tests, say), any different failure counts as progress. A round with no new commit, or the same failure as before, is stuck. After <em>K</em> stuck rounds, the next vendor takes over.</p>
|
|
168
|
+
</li>
|
|
169
|
+
<li><p><strong>A round that makes it worse is undone:</strong> <em>Loop until green</em> keeps the state closest to passing so far, by the runner's count: the fewest failing tests, and a pass before a failing check with none failing (at first, the code before any change). A round that ends further from passing is undone: more tests failing, a check that fails where it passed, or no test results where there were some. code-flow puts the files back to that state in a commit of its own, runs the check again, and tells the agent why. So the branch never ends worse than the best state the loop reached, and a run that ends failing says how many tests still fail. The rounds stay in the branch's history. Without a count from the runner, nothing is undone.</p>
|
|
170
|
+
</li>
|
|
171
|
+
<li><p><strong>Limits:</strong> every run stops at a maximum number of minutes or agent steps (60 and 40 by default). The clock doesn't run while the run waits for you (a checkpoint), or only waits for a free slot (see <em>One machine, many runs</em>). A limit that isn't a positive number is ignored (the default applies). A stopped run keeps its work: each worktree with changes is listed as "Work so far".</p>
|
|
172
|
+
</li>
|
|
173
|
+
<li><p><strong>Plan usage:</strong> if a CLI says its plan is out of usage, the run stops instead of failing, so you can resume it once the plan resets. That goes for a race contestant or a Supervisor worker too: nothing is judged or merged without it. Auto skips that plan until the reset time the CLI gave (or the reset times it reported before). A CLI that isn't signed in fails the step with a message saying so, and Auto skips it for a while. A contestant or worker whose CLI isn't signed in, or stalled, fails its step without that failure being recorded as its result: a resume gives it its turn again.</p>
|
|
174
|
+
</li>
|
|
175
|
+
<li><p><strong>Retries:</strong> a turn that fails for a passing reason (overloaded, rate-limited, a network error, a CLI that stalled) is retried after 20 s, then 60 s, with its agent slot free meanwhile. A write turn picks up where it stopped: it continues its own session, or, without one, starts over from the worktree as the step found it, so a retry never redoes the work on top of half of it. Whether a failure is passing comes from the CLI's own error type; for a CLI that gives none, from its message (an HTTP status counts only with words around it, such as "status 503", not a bare 500 in a test log).</p>
|
|
176
|
+
</li>
|
|
177
|
+
<li><p><strong>One machine, many runs:</strong> at most 6 agent CLIs and 3 checks run at once across all runs (<code>CODEFLOW_MAX_AGENTS</code>, <code>CODEFLOW_MAX_CHECKS</code>). Others wait their turn, and the step says so. The wait doesn't count against the run's time limit (a sweep's runs queued behind each other don't run out of time before they start), unless another of its steps runs meanwhile.</p>
|
|
178
|
+
</li>
|
|
179
|
+
<li><p><strong>Stopping really stops:</strong> each agent CLI and each check runs in its own process group. Cancelling, a time limit or the CLI exiting stops everything it started, such as a dev server it left in the background, and escalates to SIGKILL if needed.</p>
|
|
180
|
+
</li>
|
|
181
|
+
<li><p><strong>Setup:</strong> an optional command, such as <code>npm ci</code> or <code>uv sync</code>, that runs once in every new worktree before the agents start. code-flow runs it itself, outside the agents' sandboxes, so dependencies are installed even though Codex has no network in Standard mode. A worktree is marked as set up (in its own git folder, not in its files) once setup finishes; one whose setup never finished, because code-flow stopped during <code>npm ci</code> say, is set up again when a resumed run reuses it.</p>
|
|
182
|
+
</li>
|
|
183
|
+
</ul>
|
|
184
|
+
<p>Agents may suggest their own test command (the tester in Test-first does). code-flow only runs it if it's a plain invocation of a known test runner, with no shell operators. Otherwise it falls back to your check.</p>
|
|
185
|
+
<blockquote>
|
|
186
|
+
<p><strong>Security:</strong> a check runs the agents' code (tests, scripts) on your machine, outside Codex's and agy's sandboxes, as your CI would. Use code-flow on repos and tasks you trust, or run checks in Docker (see <a href="automations.html#isolation">Automations</a>) or code-flow itself inside a container or VM. More in <a href="security.html">Security</a>.</p>
|
|
187
|
+
</blockquote>
|
|
188
|
+
<p>Adding your own pattern: see <a href="architecture.html#adding-a-pattern">Architecture</a>.</p>
|
|
189
|
+
<hr>
|
|
190
|
+
<p><a href="index.html">Documentation library</a> · <a href="getting-started.html">Getting started</a> · <a href="help.html">Ask code-flow</a></p>
|
|
191
|
+
</article><footer><a href="https://github.com/midhunxavier/code-flow/blob/main/docs/patterns.md">Edit this page on GitHub ↗</a><span>code-flow · 0.1.0-preview.3 · <a href="font-license.txt">Font license</a></span></footer><nav class="pagination" aria-label="Adjacent guides"><a href="getting-started.html"><small>← Previous</small>Getting started</a><a href="acp-agents.html"><small>Next →</small>ACP coding agents</a></nav></main>
|
|
192
|
+
<aside class="on-page" aria-label="On this page"><strong>On this page</strong><a class="depth-2" href="#team-patterns-1">Team patterns</a><a class="depth-2" href="#checks-loops-and-limits">Checks, loops and limits</a></aside>
|
|
193
|
+
<aside id="help-panel" hidden aria-labelledby="help-title"><div class="chat-heading"><div><span class="eyebrow">Your AI companion</span><h2 id="help-title">Ask code-flow</h2></div><button id="close-help" aria-label="Close AI companion">✕</button></div><div class="chat-toolbar"><span>Grounded in your docs</span><button id="new-chat">New chat</button></div><div id="help-messages" role="log" aria-label="Help conversation" aria-live="polite"><div id="chat-welcome"><span class="chat-mark" aria-hidden="true">✦</span><h3>What would you like to do?</h3><p>Let’s find your next step. Ask about setup, workflows or something that’s unclear.</p><div class="suggestions"><button type="button" data-question="How do I start my first run?">Start my first run ↗</button><button type="button" data-question="What should I do when a check fails?">Understand a failed check ↗</button></div></div></div><p id="help-status" role="status">Checking your installed CLIs…</p><button id="retry-help" hidden>Retry connection</button><form id="help-form" hidden><label class="sr-only" for="question">Your question</label><textarea id="question" rows="3" maxlength="4000" placeholder="Ask a question…" required></textarea><div class="composer-controls"><label class="sr-only" for="help-agent">Use your CLI</label><select id="help-agent"></select><button type="button" id="stop-help" hidden>Stop</button><button class="primary" id="send-help" aria-label="Send message">Send ↗</button></div><small>Uses your CLI login and quota. Shift + Enter for a new line.</small></form><a id="help-guide" href="help.html">About your local companion →</a></aside></div>
|
|
194
|
+
<dialog id="search-dialog" aria-labelledby="search-title"><div class="dialog-title"><h2 id="search-title">Search documentation</h2><button data-close="search-dialog" aria-label="Close search">✕</button></div><label class="sr-only" for="search">Search all guides</label><input id="search" type="search" placeholder="Search workflows, settings, troubleshooting…" autocomplete="off"><div id="search-results" aria-live="polite"></div></dialog>
|
|
195
|
+
</body></html>
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content="Measured performance: 19 October 2026 — code-flow guides and reference"><title>Measured performance: 19 October 2026 · code-flow</title><link rel="icon" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmlld0JveD0iMCAwIDY0IDY0Ij4KICA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iIzFlMWYxYSIgc3Ryb2tlPSIjM2Q0MDM2IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8c3ZnIHg9IjE1IiB5PSIxNSIgd2lkdGg9IjM0IiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VjZWJlNCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgPHBhdGggZD0iTTEyIDNsOSA1LTkgNS05LTV6TTMgMTNsOSA1IDktNU0zIDE3LjVsOSA1IDktNSIvPgogIDwvc3ZnPgo8L3N2Zz4K"><link rel="stylesheet" href="style.css"><script src="app.js" defer></script></head>
|
|
3
|
+
<body data-page="performance-results"><a class="skip-link" href="#content">Skip to content</a>
|
|
4
|
+
<header class="topbar"><a class="brand" href="index.html"><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmlld0JveD0iMCAwIDY0IDY0Ij4KICA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iIzFlMWYxYSIgc3Ryb2tlPSIjM2Q0MDM2IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8c3ZnIHg9IjE1IiB5PSIxNSIgd2lkdGg9IjM0IiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VjZWJlNCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgPHBhdGggZD0iTTEyIDNsOSA1LTkgNS05LTV6TTMgMTNsOSA1IDktNU0zIDE3LjVsOSA1IDktNSIvPgogIDwvc3ZnPgo8L3N2Zz4K" width="30" height="30" alt=""><strong>Code Flow</strong><span>Docs</span></a><button class="search-trigger" id="open-search">Search documentation <kbd>⌘ K</kbd></button><div class="top-actions"><a href="https://github.com/midhunxavier/code-flow">GitHub ↗</a><button id="theme" aria-label="Change color theme">Theme</button><button id="open-help" class="primary" hidden aria-expanded="false" aria-controls="help-panel">Ask code-flow</button><button id="menu" aria-label="Toggle documentation navigation" aria-expanded="false" aria-controls="sidebar">☰</button></div></header>
|
|
5
|
+
<div class="layout"><nav class="sidebar" id="sidebar" aria-label="Documentation"><section><h2>Get started</h2><a href="index.html" >Overview</a><a href="installation.html" >Install Code Flow preview</a><a href="getting-started.html" >Getting started</a><a href="patterns.html" >Team patterns</a><a href="acp-agents.html" >ACP coding agents</a><a href="help.html" >Ask code-flow</a></section><section><h2>Work with agents</h2><a href="runs.html" >Runs and workspace</a><a href="auto-team.html" >Team</a><a href="project-teams.html" >Project missions (preview)</a><a href="review-inbox.html" >Review inbox</a><a href="verification.html" >Verification and review</a><a href="github.html" >GitHub, review and shipping</a><a href="github-review-threads.html" >GitHub review threads</a><a href="task-reruns.html" >Selective task reruns</a><a href="deferred-runs.html" >Deferred runs</a></section><section><h2>Your workspace</h2><a href="configuration.html" >Configuration</a><a href="context-inspection.html" >Context and budgets</a><a href="project-conventions.html" >Versioned project conventions</a><a href="checkpoint-review.html" >Checkpoints and reversions</a><a href="launch-profiles.html" >Service launch profiles</a><a href="code-intelligence.html" >Code intelligence</a><a href="architecture-explorer.html" >Architecture explorer</a><a href="memory-storage.html" >Project memory</a><a href="memory-claims.html" >Semantic claim review</a><a href="coordinated-changes.html" >Coordinated changes</a></section><section><h2>Connect and collaborate</h2><a href="team-collaboration.html" >Team collaboration</a><a href="shared-projects.html" >Shared project accounts</a><a href="ssh-projects.html" >SSH projects</a><a href="remote-workers.html" >Remote agent workers</a><a href="code-hosts.html" >GitLab and Bitbucket code workflows</a><a href="external-sources.html" >Read-only external sources</a><a href="automations.html" >Automations and away mode</a><a href="notifications.html" >Outbound notifications</a></section><section><h2>Operate safely</h2><a href="security.html" >Security, subscriptions and caveats</a><a href="filesystem-policy.html" >Project filesystem policy</a><a href="agent-containers.html" >Agent containers</a><a href="filtered-tasks.html" >Filtered Docker tasks</a><a href="dependency-discovery.html" >Dependency discovery</a><a href="maintenance.html" >Backup and maintenance</a></section><section><h2>Build and extend</h2><a href="architecture.html" >Architecture and development</a><a href="api.html" >Local API and command-line client</a><a href="extensions.html" >Provider and workflow extensions</a><a href="provider-compatibility.html" >Provider compatibility</a><a href="accessibility.html" >Accessibility acceptance</a><a href="performance.html" >Performance</a><a href="run-storage.html" >Run storage</a><a href="documentation.html" >Documentation and GitHub Pages</a><a href="releasing.html" >Preparing a preview release</a><a href="vscode.html" >Code Flow for VS Code</a></section><section><h2>Engineering records</h2><a href="application-improvements.html" >Application improvement program</a><a href="project-first-navigation-plan.html" >Project navigation review and implementation plan</a><a href="dynamic-teams-evaluation.html" >Dynamic teams: implementation evidence and rollout decision</a><a href="dynamic-teams-implementation-plan.html" >Dynamic teams, workflows, messaging, and memory</a><a href="dynamic-teams-implementation-review-1.html" >Review 1: the dynamic teams implementation</a><a href="worker-permission-verification.html" >Live worker permission verification</a><a href="dynamic-teams-plan-review-0.html" >Review 0: Dynamic teams implementation plan</a><a href="project-teams-implementation-plan.html" >Standing project teams implementation plan</a><a href="performance-results.html" aria-current="page">Measured performance: 19 October 2026</a></section><a class="app-link" id="back-app" hidden href="/">← Back to app</a></nav>
|
|
6
|
+
<main id="content" tabindex="-1"><div class="breadcrumb">Documentation <span>/</span> Engineering records</div><article><h1 id="measured-performance-19-october-2026">Measured performance: 19 October 2026</h1>
|
|
7
|
+
<blockquote>
|
|
8
|
+
<p>Engineering record. Status, measurements and decisions below describe the recorded implementation or review. For current usage, start with the <a href="index.html">documentation library</a>.</p>
|
|
9
|
+
</blockquote>
|
|
10
|
+
<p>The architecture changes improved latest-transcript opening by <strong>1.9×</strong> with
|
|
11
|
+
1,000 events and <strong>27.6×</strong> with 5,000 events on this machine.
|
|
12
|
+
The experimental Rust reader showed no consistent end-to-end benefit and increased
|
|
13
|
+
transcript API latency, so production retains TypeScript. These numbers describe
|
|
14
|
+
synthetic history/transcript operations, not provider inference or total coding-task
|
|
15
|
+
duration.</p>
|
|
16
|
+
<h2 id="comparison">Comparison</h2>
|
|
17
|
+
<p>Medians of seven fresh-context Chrome trials after one unmeasured warmup per variant.
|
|
18
|
+
The endpoint is Playwright’s DOM visibility check for the latest event after opening
|
|
19
|
+
Show work; timings include automation polling and are not precise paint timings.</p>
|
|
20
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
21
|
+
<thead>
|
|
22
|
+
<tr>
|
|
23
|
+
<th>Workload</th>
|
|
24
|
+
<th align="right">Before</th>
|
|
25
|
+
<th align="right">Optimized TypeScript</th>
|
|
26
|
+
<th align="right">Optimized + Rust experiment</th>
|
|
27
|
+
</tr>
|
|
28
|
+
</thead>
|
|
29
|
+
<tbody><tr>
|
|
30
|
+
<td>20 runs, 1,000 events: latest transcript visible</td>
|
|
31
|
+
<td align="right">444.45 ms</td>
|
|
32
|
+
<td align="right">232.94 ms</td>
|
|
33
|
+
<td align="right">234.59 ms</td>
|
|
34
|
+
</tr>
|
|
35
|
+
<tr>
|
|
36
|
+
<td>200 runs, 5,000 events: latest transcript visible</td>
|
|
37
|
+
<td align="right">7,124.48 ms</td>
|
|
38
|
+
<td align="right">257.77 ms</td>
|
|
39
|
+
<td align="right">320.41 ms</td>
|
|
40
|
+
</tr>
|
|
41
|
+
<tr>
|
|
42
|
+
<td>200 runs, 100,000 events: latest transcript visible</td>
|
|
43
|
+
<td align="right">Timed out (30 s heading wait)</td>
|
|
44
|
+
<td align="right">270.34 ms</td>
|
|
45
|
+
<td align="right">340.54 ms</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<td>1,000 events: transcript API</td>
|
|
49
|
+
<td align="right">129.52 ms</td>
|
|
50
|
+
<td align="right">5.53 ms</td>
|
|
51
|
+
<td align="right">9.56 ms</td>
|
|
52
|
+
</tr>
|
|
53
|
+
<tr>
|
|
54
|
+
<td>5,000 events: transcript API</td>
|
|
55
|
+
<td align="right">6,314.58 ms</td>
|
|
56
|
+
<td align="right">6.58 ms</td>
|
|
57
|
+
<td align="right">10.46 ms</td>
|
|
58
|
+
</tr>
|
|
59
|
+
<tr>
|
|
60
|
+
<td>100,000 events: transcript API</td>
|
|
61
|
+
<td align="right">Not measured after UI failure</td>
|
|
62
|
+
<td align="right">7.62 ms</td>
|
|
63
|
+
<td align="right">11.85 ms</td>
|
|
64
|
+
</tr>
|
|
65
|
+
<tr>
|
|
66
|
+
<td>20 runs: history search API</td>
|
|
67
|
+
<td align="right">2.50 ms</td>
|
|
68
|
+
<td align="right">1.99 ms</td>
|
|
69
|
+
<td align="right">1.97 ms</td>
|
|
70
|
+
</tr>
|
|
71
|
+
<tr>
|
|
72
|
+
<td>200 runs: history search API (5,000-event fixture)</td>
|
|
73
|
+
<td align="right">5.50 ms</td>
|
|
74
|
+
<td align="right">3.99 ms</td>
|
|
75
|
+
<td align="right">3.33 ms</td>
|
|
76
|
+
</tr>
|
|
77
|
+
</tbody></table>
|
|
78
|
+
</div><p>API medians contain seven requests per successful variant/workload (one per browser
|
|
79
|
+
trial). The old transcript endpoint replays the entire history over SSE; the new
|
|
80
|
+
endpoint returns a recent page of at most 500 events. These are deliberately the
|
|
81
|
+
paths used to reach the same user-visible latest output, <strong>not equal-size response
|
|
82
|
+
benchmarks</strong>. Earlier events remain accessible through pagination. Reduced work,
|
|
83
|
+
indexed repository membership and smaller responses explain the gain; it is not a
|
|
84
|
+
language-only comparison.</p>
|
|
85
|
+
<p>The baseline stress attempt failed before the run heading became visible, with no
|
|
86
|
+
browser JavaScript exception. It was stopped before timing the other variants to
|
|
87
|
+
avoid background CPU interference. A timeout is not a precise timing or speedup
|
|
88
|
+
ratio. No baseline stress API or heap result is inferred.</p>
|
|
89
|
+
<h2 id="resource-tradeoffs-and-variance">Resource tradeoffs and variance</h2>
|
|
90
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
91
|
+
<thead>
|
|
92
|
+
<tr>
|
|
93
|
+
<th>Browser metric</th>
|
|
94
|
+
<th align="right">Before</th>
|
|
95
|
+
<th align="right">Optimized TypeScript</th>
|
|
96
|
+
<th align="right">Rust experiment</th>
|
|
97
|
+
</tr>
|
|
98
|
+
</thead>
|
|
99
|
+
<tbody><tr>
|
|
100
|
+
<td>1,000 events: decoded bytes through latest output</td>
|
|
101
|
+
<td align="right">2.02 MiB</td>
|
|
102
|
+
<td align="right">1.66 MiB</td>
|
|
103
|
+
<td align="right">1.66 MiB</td>
|
|
104
|
+
</tr>
|
|
105
|
+
<tr>
|
|
106
|
+
<td>5,000 events: decoded bytes through latest output</td>
|
|
107
|
+
<td align="right">3.56 MiB</td>
|
|
108
|
+
<td align="right">2.02 MiB</td>
|
|
109
|
+
<td align="right">1.85 MiB</td>
|
|
110
|
+
</tr>
|
|
111
|
+
<tr>
|
|
112
|
+
<td>1,000 events: JS heap after GC</td>
|
|
113
|
+
<td align="right">4.35 MiB</td>
|
|
114
|
+
<td align="right">4.60 MiB</td>
|
|
115
|
+
<td align="right">4.61 MiB</td>
|
|
116
|
+
</tr>
|
|
117
|
+
<tr>
|
|
118
|
+
<td>5,000 events: JS heap after GC</td>
|
|
119
|
+
<td align="right">5.74 MiB</td>
|
|
120
|
+
<td align="right">4.73 MiB</td>
|
|
121
|
+
<td align="right">4.75 MiB</td>
|
|
122
|
+
</tr>
|
|
123
|
+
<tr>
|
|
124
|
+
<td>100,000 events: JS heap after GC</td>
|
|
125
|
+
<td align="right">Unavailable</td>
|
|
126
|
+
<td align="right">4.76 MiB</td>
|
|
127
|
+
<td align="right">4.76 MiB</td>
|
|
128
|
+
</tr>
|
|
129
|
+
</tbody></table>
|
|
130
|
+
</div><p>Small-history heap increased <strong>5.7%</strong>; at 5,000 events it decreased
|
|
131
|
+
<strong>17.6%</strong>. The cache and paging state have a fixed cost. All successful
|
|
132
|
+
variants rendered 200 transcript rows in this fixture; the improvement is not
|
|
133
|
+
explained by comparing different visible row counts. Received bytes include decoded
|
|
134
|
+
assets and stream traffic, not compressed wire bytes. Heap is the Chrome JavaScript
|
|
135
|
+
heap after forced GC, not RSS or total system memory. Startup was sampled only once
|
|
136
|
+
per server and is retained in the raw data, not used for a speedup claim.</p>
|
|
137
|
+
<p>Browser latest-output ranges (min–max):</p>
|
|
138
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
139
|
+
<thead>
|
|
140
|
+
<tr>
|
|
141
|
+
<th>Events</th>
|
|
142
|
+
<th align="right">Before</th>
|
|
143
|
+
<th align="right">TypeScript</th>
|
|
144
|
+
<th align="right">Rust</th>
|
|
145
|
+
</tr>
|
|
146
|
+
</thead>
|
|
147
|
+
<tbody><tr>
|
|
148
|
+
<td>1,000</td>
|
|
149
|
+
<td align="right">413.63–457.03 ms</td>
|
|
150
|
+
<td align="right">213.88–247.74 ms</td>
|
|
151
|
+
<td align="right">225.48–247.21 ms</td>
|
|
152
|
+
</tr>
|
|
153
|
+
<tr>
|
|
154
|
+
<td>5,000</td>
|
|
155
|
+
<td align="right">6,456.07–8,098.10 ms</td>
|
|
156
|
+
<td align="right">227.98–263.78 ms</td>
|
|
157
|
+
<td align="right">242.07–342.26 ms</td>
|
|
158
|
+
</tr>
|
|
159
|
+
<tr>
|
|
160
|
+
<td>100,000</td>
|
|
161
|
+
<td align="right">Timeout</td>
|
|
162
|
+
<td align="right">260.06–351.29 ms</td>
|
|
163
|
+
<td align="right">262.73–344.04 ms</td>
|
|
164
|
+
</tr>
|
|
165
|
+
</tbody></table>
|
|
166
|
+
</div><p>This is a developer laptop, not an isolated benchmark host. Other applications and
|
|
167
|
+
OS activity contribute noise; initial system load averages were
|
|
168
|
+
5.62, 5.59, 6.68. Variant order rotates each round and filesystem caches are not
|
|
169
|
+
flushed. Small sub-millisecond differences in history API timings should not be
|
|
170
|
+
interpreted as reliable Rust benefits. Raw samples are provided rather than a
|
|
171
|
+
statistical-significance claim.</p>
|
|
172
|
+
<h2 id="rust-decision">Rust decision</h2>
|
|
173
|
+
<p>The dependency-free release-mode Rust helper reads the same file backwards and
|
|
174
|
+
returns original records and byte offsets over a pipe. The same TypeScript code
|
|
175
|
+
then validates and constructs the page. Tests verify parity for Unicode, malformed
|
|
176
|
+
records, large previews, step filters, reconnects and pagination. Benchmark timing
|
|
177
|
+
includes actual process creation, IPC and termination.</p>
|
|
178
|
+
<p>Against optimized TypeScript, Rust transcript API medians were <strong>73% slower</strong>
|
|
179
|
+
for 1,000 events, <strong>59% slower</strong> for 5,000, and <strong>56% slower</strong> for 100,000.
|
|
180
|
+
Browser samples vary; a small median advantage in an individual workload does not
|
|
181
|
+
establish a consistent user-visible improvement across workloads.
|
|
182
|
+
The optimized bounded scan is already only a few milliseconds; this process boundary
|
|
183
|
+
adds more cost than it removes. This does not establish that Rust itself is slower,
|
|
184
|
+
or predict the performance of a persistent native worker, an in-process extension,
|
|
185
|
+
or a full rewrite. The experiment remains reproducible but is not enabled in the
|
|
186
|
+
production app and adds no Rust installation requirement for users.</p>
|
|
187
|
+
<h2 id="reproduction-and-scope">Reproduction and scope</h2>
|
|
188
|
+
<ul>
|
|
189
|
+
<li>Baseline: <code>c300a90ea9c71f940ac9b504ad8b3513b270f257</code> (main at measurement time, including SQLite memory, result previews and browser scenarios).</li>
|
|
190
|
+
<li>Measured optimized implementation: <code>0081bb76c33c86c2db16ca04b862ab490cf1920e</code>.</li>
|
|
191
|
+
<li>Host: Apple M4, 10 cores, 16 GiB, macOS arm64; Node v22.14.0; Chrome 155.0.8059.80; rustc 1.90.0 (1159e78c4 2025-09-14).</li>
|
|
192
|
+
<li>Same synthetic fixtures, provider stubs and dependency installation for all variants.</li>
|
|
193
|
+
<li>No real user history, provider requests or external service latency.</li>
|
|
194
|
+
<li>The measured code includes the live-page race fix and the integration with the
|
|
195
|
+
SQLite memory and result-preview updates from main, plus the archived-compaction
|
|
196
|
+
and shutdown fix found by CI. Earlier pilot results are superseded by this run.</li>
|
|
197
|
+
</ul>
|
|
198
|
+
<pre><code class="language-sh">npm run benchmark:compare -- --baseline c300a90ea9c71f940ac9b504ad8b3513b270f257 --trials 7 --api-repeats 1
|
|
199
|
+
npm run test:rust
|
|
200
|
+
</code></pre>
|
|
201
|
+
<p>The harness requires Chrome and Cargo for the experimental third variant. See
|
|
202
|
+
<a href="https://github.com/midhunxavier/code-flow/blob/main/docs/benchmarks/2026-10-19-performance.json">raw samples and environment metadata</a>,
|
|
203
|
+
<a href="performance.html">resource limits and architecture</a>, and the
|
|
204
|
+
<a href="https://github.com/midhunxavier/code-flow/blob/main/experiments/rust-transcript/README.md">Rust experiment</a>.</p>
|
|
205
|
+
<p><a href="index.html">Documentation library</a> · <a href="architecture.html">Development guide</a></p>
|
|
206
|
+
</article><footer><a href="https://github.com/midhunxavier/code-flow/blob/main/docs/performance-results.md">Edit this page on GitHub ↗</a><span>code-flow · 0.1.0-preview.3 · <a href="font-license.txt">Font license</a></span></footer><nav class="pagination" aria-label="Adjacent guides"><a href="project-teams-implementation-plan.html"><small>← Previous</small>Standing project teams implementation plan</a><a href="vscode.html"><small>Next →</small>Code Flow for VS Code</a></nav></main>
|
|
207
|
+
<aside class="on-page" aria-label="On this page"><strong>On this page</strong><a class="depth-2" href="#comparison">Comparison</a><a class="depth-2" href="#resource-tradeoffs-and-variance">Resource tradeoffs and variance</a><a class="depth-2" href="#rust-decision">Rust decision</a><a class="depth-2" href="#reproduction-and-scope">Reproduction and scope</a></aside>
|
|
208
|
+
<aside id="help-panel" hidden aria-labelledby="help-title"><div class="chat-heading"><div><span class="eyebrow">Your AI companion</span><h2 id="help-title">Ask code-flow</h2></div><button id="close-help" aria-label="Close AI companion">✕</button></div><div class="chat-toolbar"><span>Grounded in your docs</span><button id="new-chat">New chat</button></div><div id="help-messages" role="log" aria-label="Help conversation" aria-live="polite"><div id="chat-welcome"><span class="chat-mark" aria-hidden="true">✦</span><h3>What would you like to do?</h3><p>Let’s find your next step. Ask about setup, workflows or something that’s unclear.</p><div class="suggestions"><button type="button" data-question="How do I start my first run?">Start my first run ↗</button><button type="button" data-question="What should I do when a check fails?">Understand a failed check ↗</button></div></div></div><p id="help-status" role="status">Checking your installed CLIs…</p><button id="retry-help" hidden>Retry connection</button><form id="help-form" hidden><label class="sr-only" for="question">Your question</label><textarea id="question" rows="3" maxlength="4000" placeholder="Ask a question…" required></textarea><div class="composer-controls"><label class="sr-only" for="help-agent">Use your CLI</label><select id="help-agent"></select><button type="button" id="stop-help" hidden>Stop</button><button class="primary" id="send-help" aria-label="Send message">Send ↗</button></div><small>Uses your CLI login and quota. Shift + Enter for a new line.</small></form><a id="help-guide" href="help.html">About your local companion →</a></aside></div>
|
|
209
|
+
<dialog id="search-dialog" aria-labelledby="search-title"><div class="dialog-title"><h2 id="search-title">Search documentation</h2><button data-close="search-dialog" aria-label="Close search">✕</button></div><label class="sr-only" for="search">Search all guides</label><input id="search" type="search" placeholder="Search workflows, settings, troubleshooting…" autocomplete="off"><div id="search-results" aria-live="polite"></div></dialog>
|
|
210
|
+
</body></html>
|