specrails-desktop 2.64.1 → 2.65.0
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/README.md +1 -1
- package/cli/dist/status.js +3 -0
- package/client/dist/assets/ActivityFeedPage-ByVKYII-.js +1 -0
- package/client/dist/assets/AgentBrowserCapture-BGUTjhUr.js +1 -0
- package/client/dist/assets/AgentModeAnalyticsPane-CtOLDDjB.js +2 -0
- package/client/dist/assets/AgentModeCodePane-CDhUKarT.js +2 -0
- package/client/dist/assets/AgentModeJobsPane-BAa_oEHJ.js +1 -0
- package/client/dist/assets/AgentsPage-D32hG4Ve.js +120 -0
- package/client/dist/assets/AnalyticsPage-BU50zeG6.js +5 -0
- package/client/dist/assets/BudgetCard-DP_jxwaD.js +55 -0
- package/client/dist/assets/CodePage-jiYnKGpp.js +3 -0
- package/client/dist/assets/CostValue-Bvn8674q.js +1 -0
- package/client/dist/assets/DesktopAnalyticsPage-CF__H4e3.js +1 -0
- package/client/dist/assets/DocView-RrAp70zp.js +11 -0
- package/client/dist/assets/DocsDialog-DkqHU-JF.js +1 -0
- package/client/dist/assets/DocsPage-C6X089zC.js +1 -0
- package/client/dist/assets/ExportDropdown-C5-o8y3K.js +1 -0
- package/client/dist/assets/HelpHint-Crf9_uoR.js +1 -0
- package/client/dist/assets/IntegrationsPage-aflU3KHK.js +1 -0
- package/client/dist/assets/InteractiveJobComposer-CEMMhyyJ.js +19 -0
- package/client/dist/assets/JobDetailModal-BVJ6hyRs.js +1 -0
- package/client/dist/assets/JobDetailPage-DHzBUmox.js +1 -0
- package/client/dist/assets/JobsPage-o-LAqkwC.js +1 -0
- package/client/dist/assets/LoopBuilderPage-DbSVmXBM.js +1 -0
- package/client/dist/assets/LoopPreviewModal-DbJcVyN1.js +1 -0
- package/client/dist/assets/{LoopWindowSurface-DE0v2K1p.js → LoopWindowSurface-Co1ZK26V.js} +1 -1
- package/client/dist/assets/LoopsPage-C4lgkPXB.js +2 -0
- package/client/dist/assets/MinimizedChatsContext-742ypO8n.js +1 -0
- package/client/dist/assets/PluginsPage-Acks9ges.js +2 -0
- package/client/dist/assets/RailTrack-BfLmBzBh.js +1 -0
- package/client/dist/assets/{RepositoryScopeSelector-2eSqR9WK.js → RepositoryScopeSelector-DcxbKI9w.js} +1 -1
- package/client/dist/assets/ReviewPacketPage-CAVSIOAJ.js +7 -0
- package/client/dist/assets/TemplatePreviewModal-C23SYCTm.js +1 -0
- package/client/dist/assets/TicketDetailModalContext-B-Gtm6Ob.js +23 -0
- package/client/dist/assets/Trans-C6J0cLyh.js +1 -0
- package/client/dist/assets/a11y-prefs-BqoP5goK.js +1 -0
- package/client/dist/assets/activity-BBWfoUOG.js +1 -0
- package/client/dist/assets/activity-BM_skann.js +1 -0
- package/client/dist/assets/activity-Cevl82ke.js +1 -0
- package/client/dist/assets/activity-CmACk5W5.js +1 -0
- package/client/dist/assets/activity-D9LBw3PQ.js +1 -0
- package/client/dist/assets/activity-Dspbb9lz.js +1 -0
- package/client/dist/assets/activity-FPjYIjv9.js +1 -0
- package/client/dist/assets/activity-nLCKMUKt.js +1 -0
- package/client/dist/assets/addspec-BI4jDMhA.js +1 -0
- package/client/dist/assets/addspec-BldTv7Tl.js +1 -0
- package/client/dist/assets/addspec-Cdq-2EcC.js +1 -0
- package/client/dist/assets/addspec-DH5M16BQ.js +1 -0
- package/client/dist/assets/addspec-DOFo9pD5.js +1 -0
- package/client/dist/assets/addspec-DPkwhdmL.js +1 -0
- package/client/dist/assets/addspec-Dzy12Pv3.js +1 -0
- package/client/dist/assets/addspec-skTs6EEW.js +1 -0
- package/client/dist/assets/agent-B_UEUy7Y.js +1 -0
- package/client/dist/assets/agent-BarjlhTA.js +1 -0
- package/client/dist/assets/agent-BfqIITo5.js +1 -0
- package/client/dist/assets/agent-Bt9a7Kyj.js +1 -0
- package/client/dist/assets/agent-C3689RwP.js +1 -0
- package/client/dist/assets/agent-CrmboTAi.js +1 -0
- package/client/dist/assets/agent-DcsoTnuE.js +1 -0
- package/client/dist/assets/agent-GDZoYwd4.js +1 -0
- package/client/dist/assets/{agentRuntime-es2ymSl-.js → agentRuntime-BYH70bKY.js} +1 -1
- package/client/dist/assets/agentRuntime-BijLh8I9.js +1 -0
- package/client/dist/assets/{agentRuntime-BzuwQQgn.js → agentRuntime-BvyuETPe.js} +1 -1
- package/client/dist/assets/{agentRuntime-BDvbJMmS.js → agentRuntime-C2WI6HQh.js} +1 -1
- package/client/dist/assets/{agentRuntime-BKJfv5YD.js → agentRuntime-CZPIlQsr.js} +1 -1
- package/client/dist/assets/{agentRuntime-DiCldqGG.js → agentRuntime-D2dDvCyJ.js} +1 -1
- package/client/dist/assets/agentRuntime-DWZedEbn.js +1 -0
- package/client/dist/assets/agentRuntime-DkIruUNw.js +1 -0
- package/client/dist/assets/agents-35_PDKx9.js +1 -0
- package/client/dist/assets/agents-8fZnHhEQ.js +1 -0
- package/client/dist/assets/agents-Bgimtw8z.js +1 -0
- package/client/dist/assets/agents-C4P160Us.js +1 -0
- package/client/dist/assets/agents-Clg67zbp.js +1 -0
- package/client/dist/assets/agents-DJfF4o6G.js +1 -0
- package/client/dist/assets/agents-Dc9-Y5cw.js +1 -0
- package/client/dist/assets/agents-EN1Zl4YZ.js +1 -0
- package/client/dist/assets/agentstudio-Bm4-NYaG.js +1 -0
- package/client/dist/assets/agentstudio-CD1fuj2o.js +1 -0
- package/client/dist/assets/agentstudio-CQGWFSst.js +1 -0
- package/client/dist/assets/agentstudio-CqVSb65S.js +1 -0
- package/client/dist/assets/agentstudio-DIE_HjsX.js +1 -0
- package/client/dist/assets/agentstudio-D_OmQK-k.js +1 -0
- package/client/dist/assets/agentstudio-Djz9aUfb.js +1 -0
- package/client/dist/assets/agentstudio-Qa3v9o5J.js +1 -0
- package/client/dist/assets/{aiedit-DNXxq_Dr.js → aiedit-1VzLs37W.js} +1 -1
- package/client/dist/assets/{aiedit-DCjA7jLJ.js → aiedit-BNp6GSik.js} +1 -1
- package/client/dist/assets/{aiedit-BoG24nlg.js → aiedit-BOY5xRPi.js} +1 -1
- package/client/dist/assets/{aiedit-iIjz2_Qk.js → aiedit-BrqMZvbc.js} +1 -1
- package/client/dist/assets/{aiedit-CjlSRQVP.js → aiedit-CVgtl7hm.js} +1 -1
- package/client/dist/assets/{aiedit-DQ-0_pvE.js → aiedit-CrFW9Jd2.js} +1 -1
- package/client/dist/assets/{aiedit-olnv3QSt.js → aiedit-YE2lILp7.js} +1 -1
- package/client/dist/assets/{aiedit-B0KUbpB6.js → aiedit-iA_R1AVQ.js} +1 -1
- package/client/dist/assets/analytics-3w0t-4ic.js +1 -0
- package/client/dist/assets/analytics-BRi4KQD6.js +1 -0
- package/client/dist/assets/analytics-BtjAqzke.js +1 -0
- package/client/dist/assets/analytics-COSQ1h47.js +1 -0
- package/client/dist/assets/analytics-CP2HjESk.js +1 -0
- package/client/dist/assets/analytics-DY65TC62.js +1 -0
- package/client/dist/assets/analytics-Den_vvxn.js +1 -0
- package/client/dist/assets/analytics-LmBS96O8.js +1 -0
- package/client/dist/assets/api-DOGbyfTO.js +2 -0
- package/client/dist/assets/builder-BMVvSr4v.js +1 -0
- package/client/dist/assets/builder-BN-MuLZt.js +1 -0
- package/client/dist/assets/builder-BQOZi4CF.js +1 -0
- package/client/dist/assets/builder-BjUPjsyu.js +1 -0
- package/client/dist/assets/builder-BoBtN18T.js +1 -0
- package/client/dist/assets/builder-C5g5NhxL.js +1 -0
- package/client/dist/assets/builder-RUHXw3yx.js +1 -0
- package/client/dist/assets/builder-fyS_AiyC.js +1 -0
- package/client/dist/assets/button-CHPkroew.js +1 -0
- package/client/dist/assets/chat-C9L5T7KI.js +1 -0
- package/client/dist/assets/chevron-right-CwMAj0w_.js +1 -0
- package/client/dist/assets/chevron-up-BAMuP0XD.js +1 -0
- package/client/dist/assets/chunk-OB3PAWPO-BBaq6pUk.js +3 -0
- package/client/dist/assets/code-4le5IIbf.js +1 -0
- package/client/dist/assets/code-B-jCVIbm.js +1 -0
- package/client/dist/assets/code-BRfrn5ix.js +1 -0
- package/client/dist/assets/code-CC9NCrDM.js +1 -0
- package/client/dist/assets/code-CK6pm8wY.js +1 -0
- package/client/dist/assets/code-DDiOzd6c.js +1 -0
- package/client/dist/assets/code-tGifiyf5.js +1 -0
- package/client/dist/assets/code-xkn8kQTg.js +1 -0
- package/client/dist/assets/commands-Bv1QshHR.js +1 -0
- package/client/dist/assets/commands-BvxTxboW.js +1 -0
- package/client/dist/assets/commands-C5ORR0fO.js +1 -0
- package/client/dist/assets/commands-CBKMFSTV.js +1 -0
- package/client/dist/assets/commands-CFJIRsJv.js +1 -0
- package/client/dist/assets/commands-D9o3ZcXl.js +1 -0
- package/client/dist/assets/commands-DNox0Edk.js +1 -0
- package/client/dist/assets/commands-DmIUMLdV.js +1 -0
- package/client/dist/assets/common-5H4TkaoI.js +1 -0
- package/client/dist/assets/common-9S3OdPjx.js +1 -0
- package/client/dist/assets/common-BqnwIcjs.js +1 -0
- package/client/dist/assets/common-CQP3VafS.js +1 -0
- package/client/dist/assets/common-CZnAfkB2.js +1 -0
- package/client/dist/assets/common-D5sNttV4.js +1 -0
- package/client/dist/assets/common-k_qX9nlv.js +1 -0
- package/client/dist/assets/common-s4HIi9XI.js +1 -0
- package/client/dist/assets/compass-B7guwBlY.js +1 -0
- package/client/dist/assets/confirm-dialog-ChZdHL3Q.js +1 -0
- package/client/dist/assets/copy-DOPlLymH.js +1 -0
- package/client/dist/assets/core-BozBzB6Y.js +1 -0
- package/client/dist/assets/dashboard-6zGLGcEz.js +1 -0
- package/client/dist/assets/dashboard-8Gi0FBDq.js +1 -0
- package/client/dist/assets/dashboard-B7E5YrSy.js +1 -0
- package/client/dist/assets/dashboard-BhdKV8xK.js +1 -0
- package/client/dist/assets/dashboard-Bu3zzH_s.js +1 -0
- package/client/dist/assets/dashboard-Ce_6rELA.js +1 -0
- package/client/dist/assets/dashboard-DWY-oz8P.js +1 -0
- package/client/dist/assets/dashboard-gUzlWk0o.js +1 -0
- package/client/dist/assets/date-input-Cdlr8kHz.js +1 -0
- package/client/dist/assets/dialog-C23lB2iP.js +5 -0
- package/client/dist/assets/dist-Di-oOFkX.js +1 -0
- package/client/dist/assets/dist-js-CBmS6MsJ.js +1 -0
- package/client/dist/assets/{dist-js-Rlh4FLH5.js → dist-js-DaJmKapi.js} +1 -1
- package/client/dist/assets/dropdown-menu-Bfp2CK6H.js +1 -0
- package/client/dist/assets/empty-state-D5w9OWj-.js +1 -0
- package/client/dist/assets/es2015-DfnECntk.js +41 -0
- package/client/dist/assets/esm-BKF6CE7v.js +1 -0
- package/client/dist/assets/event-BEnMLqAi.js +1 -0
- package/client/dist/assets/explore--NOz9LCN.js +1 -0
- package/client/dist/assets/explore-B2ulH6dO.js +1 -0
- package/client/dist/assets/explore-BD-QiLdg.js +1 -0
- package/client/dist/assets/explore-BOqd4_1j.js +1 -0
- package/client/dist/assets/explore-Be_Zh5zu.js +1 -0
- package/client/dist/assets/explore-CLjzPSKo.js +1 -0
- package/client/dist/assets/explore-D_-vHm29.js +1 -0
- package/client/dist/assets/explore-yEQTF6ro.js +1 -0
- package/client/dist/assets/file-text-CNXzL3wj.js +1 -0
- package/client/dist/assets/format-BODoFIw6.js +1 -0
- package/client/dist/assets/formatDistanceToNow-DLMIOS0N.js +1 -0
- package/client/dist/assets/getTimezoneOffsetInMilliseconds-O61feXch.js +1 -0
- package/client/dist/assets/git-compare-arrows-Cu6tICCq.js +1 -0
- package/client/dist/assets/humanise-command-CB4ybLwq.js +1 -0
- package/client/dist/assets/inbox-BLZ8cm6_.js +1 -0
- package/client/dist/assets/inbox-BQ3VmNYY.js +1 -0
- package/client/dist/assets/inbox-BdcXWCuT.js +1 -0
- package/client/dist/assets/inbox-CF1PHjns.js +1 -0
- package/client/dist/assets/inbox-CFNPDhso.js +1 -0
- package/client/dist/assets/inbox-DIttK_NW.js +1 -0
- package/client/dist/assets/inbox-Dfdv1Ykl.js +1 -0
- package/client/dist/assets/inbox-JS1inmeO.js +1 -0
- package/client/dist/assets/index-4UWY7Xyz.css +2 -0
- package/client/dist/assets/index-DHzB0T26.js +120 -0
- package/client/dist/assets/integrations-BcKgzgPD.js +1 -0
- package/client/dist/assets/integrations-BmX_XyJq.js +1 -0
- package/client/dist/assets/integrations-CHpwMjlY.js +1 -0
- package/client/dist/assets/integrations-CT3kr8e-.js +1 -0
- package/client/dist/assets/integrations-C_5XAkgz.js +1 -0
- package/client/dist/assets/integrations-Ct9zLX7N.js +1 -0
- package/client/dist/assets/integrations-DEYemxUv.js +1 -0
- package/client/dist/assets/integrations-DWvsB_WB.js +1 -0
- package/client/dist/assets/{jira-Cq6yvN4q.js → jira-B_ERkFRv.js} +1 -1
- package/client/dist/assets/jira-Bn-A5lwD.js +1 -0
- package/client/dist/assets/jira-C71Ybnhp.js +1 -0
- package/client/dist/assets/jira-CkwjeJz6.js +1 -0
- package/client/dist/assets/jira-D9pSLXjI.js +1 -0
- package/client/dist/assets/jira-DBRS_lcp.js +1 -0
- package/client/dist/assets/jira-DHS6CsKh.js +1 -0
- package/client/dist/assets/jira-MInHRUb1.js +1 -0
- package/client/dist/assets/jira-api-DHme7Upx.js +1 -0
- package/client/dist/assets/jobs-BMLTDo63.js +1 -0
- package/client/dist/assets/jobs-BO8q4Mi1.js +1 -0
- package/client/dist/assets/jobs-Ck8uOWMM.js +1 -0
- package/client/dist/assets/jobs-CyFfPCpg.js +1 -0
- package/client/dist/assets/jobs-DT5s4fZ6.js +1 -0
- package/client/dist/assets/jobs-DZAgVPcD.js +1 -0
- package/client/dist/assets/jobs-b5gPYaKr.js +1 -0
- package/client/dist/assets/jobs-xsZK1440.js +1 -0
- package/client/dist/assets/launch-forecast-BTa-p3RP.js +1 -0
- package/client/dist/assets/{loop-layout-DtxX27Jz.css → loop-layout-DLioOiRN.css} +1 -1
- package/client/dist/assets/loop-layout-Sl9cfTvs.js +7 -0
- package/client/dist/assets/loops-BEEOVJDR.js +1 -0
- package/client/dist/assets/loops-BcrQ2vk7.js +1 -0
- package/client/dist/assets/loops-BjWxzJIZ.js +1 -0
- package/client/dist/assets/loops-BogV595N.js +1 -0
- package/client/dist/assets/loops-CU0BLZiz.js +1 -0
- package/client/dist/assets/loops-CrNBgi1G.js +1 -0
- package/client/dist/assets/loops-CwalwS_i.js +1 -0
- package/client/dist/assets/loops-_TDVN-fX.js +1 -0
- package/client/dist/assets/mcp-BNs8gxoL.js +1 -0
- package/client/dist/assets/mcp-BvRh_xO5.js +1 -0
- package/client/dist/assets/mcp-C2F1pghi.js +1 -0
- package/client/dist/assets/mcp-D9RLKAs2.js +1 -0
- package/client/dist/assets/mcp-DAghcsR0.js +1 -0
- package/client/dist/assets/mcp-DWWAPi1G.js +1 -0
- package/client/dist/assets/mcp-DbGSFC3f.js +1 -0
- package/client/dist/assets/mcp-FelCicrv.js +1 -0
- package/client/dist/assets/narration-C3NBkAR4.js +1 -0
- package/client/dist/assets/narration-CkoJq-Lf.js +1 -0
- package/client/dist/assets/narration-Cr0NeW9K.js +1 -0
- package/client/dist/assets/narration-DJUXOs-W.js +1 -0
- package/client/dist/assets/narration-DgL8TMvN.js +1 -0
- package/client/dist/assets/narration-DjBafgv0.js +1 -0
- package/client/dist/assets/narration-Dle6Iv0c.js +1 -0
- package/client/dist/assets/narration-MYlfktga.js +1 -0
- package/client/dist/assets/nav-BSQ8KW1c.js +1 -0
- package/client/dist/assets/nav-BauVof8Z.js +1 -0
- package/client/dist/assets/nav-BfOAH1se.js +1 -0
- package/client/dist/assets/nav-D3bOsipX.js +1 -0
- package/client/dist/assets/nav-DOMMhlLx.js +1 -0
- package/client/dist/assets/nav-DPzVlgZU.js +1 -0
- package/client/dist/assets/nav-DZJbFbah.js +1 -0
- package/client/dist/assets/nav-D_5aojd2.js +1 -0
- package/client/dist/assets/notify-error-BsWANx1T.js +1 -0
- package/client/dist/assets/onboarding-BdZQnNm3.js +1 -0
- package/client/dist/assets/onboarding-CJQEv1vp.js +1 -0
- package/client/dist/assets/onboarding-CWJGYUW3.js +1 -0
- package/client/dist/assets/onboarding-ChfYN7dA.js +1 -0
- package/client/dist/assets/onboarding-CjvDUR3V.js +1 -0
- package/client/dist/assets/onboarding-I6vS-zTB.js +1 -0
- package/client/dist/assets/onboarding-dgC_9dTB.js +1 -0
- package/client/dist/assets/onboarding-mlXSyKzX.js +1 -0
- package/client/dist/assets/origin-03nTuaOb.js +1 -0
- package/client/dist/assets/packet-BjpyRnZr.js +1 -0
- package/client/dist/assets/packet-BwgG5mBt.js +1 -0
- package/client/dist/assets/packet-C3eAUFkV.js +1 -0
- package/client/dist/assets/packet-C8wZuSld.js +1 -0
- package/client/dist/assets/packet-CNXEy_85.js +1 -0
- package/client/dist/assets/packet-DsV5Aa_8.js +1 -0
- package/client/dist/assets/packet-aasskOE7.js +1 -0
- package/client/dist/assets/packet-phxCc2gJ.js +1 -0
- package/client/dist/assets/page-header-BStSHkP8.js +1 -0
- package/client/dist/assets/project-repositories-DJPeAVBK.js +1 -0
- package/client/dist/assets/{provider-capabilities-lePfeT_Y.js → provider-capabilities-DtwcTme4.js} +1 -1
- package/client/dist/assets/recovery-BPDOsC92.js +1 -0
- package/client/dist/assets/recovery-BluNHoXM.js +1 -0
- package/client/dist/assets/recovery-CRvEmB0C.js +1 -0
- package/client/dist/assets/recovery-CeIoRnkR.js +1 -0
- package/client/dist/assets/recovery-DHCo8KGi.js +1 -0
- package/client/dist/assets/recovery-OxAIpbBF.js +1 -0
- package/client/dist/assets/recovery-XXexYGOJ.js +1 -0
- package/client/dist/assets/recovery-pITlc--v.js +1 -0
- package/client/dist/assets/refresh-cw-DfyTkbsf.js +1 -0
- package/client/dist/assets/select-xA3pSmqE.js +1 -0
- package/client/dist/assets/settings--yzDbX9r.js +1 -0
- package/client/dist/assets/settings-5_heTv8s.js +1 -0
- package/client/dist/assets/settings-BSf27MDg.js +1 -0
- package/client/dist/assets/settings-BSj6FakR.js +1 -0
- package/client/dist/assets/settings-BZDo_8Nn.js +1 -0
- package/client/dist/assets/settings-BdWgmNc0.js +1 -0
- package/client/dist/assets/settings-DRouxKqb.js +1 -0
- package/client/dist/assets/settings-DnWFoY-F.js +1 -0
- package/client/dist/assets/setup-BJWy62ri.js +1 -0
- package/client/dist/assets/setup-BgKOIuzc.js +1 -0
- package/client/dist/assets/setup-BvVIyUlz.js +1 -0
- package/client/dist/assets/setup-BxCk2pe1.js +1 -0
- package/client/dist/assets/setup-C-xQTL7R.js +1 -0
- package/client/dist/assets/setup-CbaVoiwV.js +1 -0
- package/client/dist/assets/setup-DxTBkX3P.js +1 -0
- package/client/dist/assets/setup-oGoVAzOD.js +1 -0
- package/client/dist/assets/specs-7tAb4IKr.js +1 -0
- package/client/dist/assets/specs-BUcY4s5v.js +1 -0
- package/client/dist/assets/specs-Bk5LeBAA.js +1 -0
- package/client/dist/assets/specs-CAA4Lrlg.js +1 -0
- package/client/dist/assets/specs-CS091AnA.js +1 -0
- package/client/dist/assets/specs-DJ6gmFcK.js +1 -0
- package/client/dist/assets/specs-GfCcrBSC.js +1 -0
- package/client/dist/assets/specs-xQgyc7WL.js +1 -0
- package/client/dist/assets/spending-CVH8VREb.js +1 -0
- package/client/dist/assets/square-Co6h5vZg.js +1 -0
- package/client/dist/assets/tauri-shell-43ixPGfa.js +2 -0
- package/client/dist/assets/terminal-0v9sBylD.js +1 -0
- package/client/dist/assets/terminal-AbUAmCxE.js +1 -0
- package/client/dist/assets/terminal-BJayIbIP.js +1 -0
- package/client/dist/assets/terminal-C2RUlXyi.js +1 -0
- package/client/dist/assets/terminal-CMmSb_Nj.js +1 -0
- package/client/dist/assets/terminal-DKWjj7HJ.js +1 -0
- package/client/dist/assets/terminal-KlFu7_pV.js +1 -0
- package/client/dist/assets/terminal-i99yqFvm.js +1 -0
- package/client/dist/assets/tickets-846Oq3i3.js +1 -0
- package/client/dist/assets/tickets-B5LJTe_b.js +1 -0
- package/client/dist/assets/tickets-Bfo2GGmH.js +1 -0
- package/client/dist/assets/tickets-BhdZ1yY2.js +1 -0
- package/client/dist/assets/tickets-CgjWJHAW.js +1 -0
- package/client/dist/assets/tickets-Ct9DbDUR.js +1 -0
- package/client/dist/assets/tickets-rptLEJB1.js +1 -0
- package/client/dist/assets/tickets-xQ6DpYdu.js +1 -0
- package/client/dist/assets/trending-up-BGvb4zZt.js +1 -0
- package/client/dist/assets/undo-6zuS4-sL.js +1 -0
- package/client/dist/assets/undo-BeM4gDOP.js +1 -0
- package/client/dist/assets/undo-BeppX8xS.js +1 -0
- package/client/dist/assets/undo-BqvNZ5MG.js +1 -0
- package/client/dist/assets/undo-BzwEPf_k.js +1 -0
- package/client/dist/assets/undo-CJ9Cu1NN.js +1 -0
- package/client/dist/assets/undo-ds8nMFbX.js +1 -0
- package/client/dist/assets/undo-x_gA-knG.js +1 -0
- package/client/dist/assets/useDesktop-BuOp2-MR.js +1 -0
- package/client/dist/assets/useRuntimeRuns-BRS6ncnO.js +1 -0
- package/client/dist/assets/utils-ELimjS2Y.js +1 -0
- package/client/dist/assets/wrench-Br2n1Lxd.js +1 -0
- package/client/dist/index.html +75 -60
- package/docs/ci-cd.md +29 -1
- package/docs/cli.md +10 -31
- package/docs/codex.md +1 -1
- package/docs/creating-specs.md +15 -12
- package/docs/customizing.md +16 -13
- package/docs/getting-started.md +12 -11
- package/docs/guide/de/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/de/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/de/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/de/getting-started/6-universal-search.md +34 -0
- package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +20 -6
- package/docs/guide/de/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/de/insights/3-code-explorer.md +1 -1
- package/docs/guide/de/integrations/1-ai-providers.md +1 -1
- package/docs/guide/de/integrations/2-plugins.md +1 -1
- package/docs/guide/de/integrations/3-jira-integration.md +3 -3
- package/docs/guide/de/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/de/integrations/5-mcp-server.md +1 -1
- package/docs/guide/de/integrations/6-agent-chat.md +12 -5
- package/docs/guide/de/integrations/8-flow-mode.md +69 -0
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/de/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/de/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/de/settings/1-themes.md +1 -1
- package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/de/settings/5-project-environment.md +1 -1
- package/docs/guide/de/settings/6-updates.md +24 -0
- package/docs/guide/de/settings/7-existing-projects.md +33 -0
- package/docs/guide/de/settings/8-accessibility.md +23 -0
- package/docs/guide/de/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/de/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/en/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/en/getting-started/1-what-is-specrails.md +1 -1
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/en/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/en/getting-started/5-the-dashboard-tour.md +52 -0
- package/docs/guide/en/getting-started/6-universal-search.md +34 -0
- package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +24 -10
- package/docs/guide/en/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/en/insights/3-code-explorer.md +5 -5
- package/docs/guide/en/integrations/1-ai-providers.md +1 -1
- package/docs/guide/en/integrations/2-plugins.md +1 -1
- package/docs/guide/en/integrations/3-jira-integration.md +4 -4
- package/docs/guide/en/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/en/integrations/5-mcp-server.md +4 -4
- package/docs/guide/en/integrations/6-agent-chat.md +12 -5
- package/docs/guide/en/integrations/8-flow-mode.md +69 -0
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +22 -3
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +19 -7
- package/docs/guide/en/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/en/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/en/settings/1-themes.md +1 -1
- package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/en/settings/5-project-environment.md +1 -1
- package/docs/guide/en/settings/6-updates.md +24 -0
- package/docs/guide/en/settings/7-existing-projects.md +33 -0
- package/docs/guide/en/settings/8-accessibility.md +23 -0
- package/docs/guide/en/specs/1-specs-and-the-backlog.md +42 -6
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/en/specs/3-add-spec-explore-mode.md +2 -2
- package/docs/guide/es/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +1 -1
- package/docs/guide/es/agents/3-customizing-models-per-agent.md +2 -2
- package/docs/guide/es/agents/4-custom-agents-catalog.md +1 -1
- package/docs/guide/es/getting-started/1-what-is-specrails.md +3 -3
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/es/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/es/getting-started/5-the-dashboard-tour.md +52 -0
- package/docs/guide/es/getting-started/6-universal-search.md +34 -0
- package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +26 -12
- package/docs/guide/es/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/es/insights/3-code-explorer.md +5 -5
- package/docs/guide/es/integrations/1-ai-providers.md +1 -1
- package/docs/guide/es/integrations/2-plugins.md +1 -1
- package/docs/guide/es/integrations/3-jira-integration.md +4 -4
- package/docs/guide/es/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/es/integrations/5-mcp-server.md +4 -4
- package/docs/guide/es/integrations/6-agent-chat.md +14 -7
- package/docs/guide/es/integrations/7-local-engines.md +1 -1
- package/docs/guide/es/integrations/8-flow-mode.md +69 -0
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +33 -13
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +38 -26
- package/docs/guide/es/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/es/pipeline/5-the-loop-builder.md +4 -4
- package/docs/guide/es/settings/1-themes.md +1 -1
- package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +10 -10
- package/docs/guide/es/settings/5-project-environment.md +1 -1
- package/docs/guide/es/settings/6-updates.md +24 -0
- package/docs/guide/es/settings/7-existing-projects.md +33 -0
- package/docs/guide/es/settings/8-accessibility.md +23 -0
- package/docs/guide/es/specs/1-specs-and-the-backlog.md +43 -7
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/es/specs/3-add-spec-explore-mode.md +3 -3
- package/docs/guide/fr/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/fr/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/fr/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/fr/getting-started/6-universal-search.md +34 -0
- package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/fr/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/fr/insights/3-code-explorer.md +1 -1
- package/docs/guide/fr/integrations/1-ai-providers.md +1 -1
- package/docs/guide/fr/integrations/2-plugins.md +1 -1
- package/docs/guide/fr/integrations/3-jira-integration.md +3 -3
- package/docs/guide/fr/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/fr/integrations/5-mcp-server.md +1 -1
- package/docs/guide/fr/integrations/6-agent-chat.md +11 -4
- package/docs/guide/fr/integrations/8-flow-mode.md +69 -0
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/fr/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/fr/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/fr/settings/1-themes.md +1 -1
- package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/fr/settings/5-project-environment.md +1 -1
- package/docs/guide/fr/settings/6-updates.md +24 -0
- package/docs/guide/fr/settings/7-existing-projects.md +33 -0
- package/docs/guide/fr/settings/8-accessibility.md +23 -0
- package/docs/guide/fr/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/fr/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/it/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/it/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/it/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/it/getting-started/6-universal-search.md +34 -0
- package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/it/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/it/insights/3-code-explorer.md +1 -1
- package/docs/guide/it/integrations/1-ai-providers.md +1 -1
- package/docs/guide/it/integrations/2-plugins.md +1 -1
- package/docs/guide/it/integrations/3-jira-integration.md +3 -3
- package/docs/guide/it/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/it/integrations/5-mcp-server.md +1 -1
- package/docs/guide/it/integrations/6-agent-chat.md +11 -4
- package/docs/guide/it/integrations/8-flow-mode.md +69 -0
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/it/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/it/settings/1-themes.md +1 -1
- package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/it/settings/5-project-environment.md +1 -1
- package/docs/guide/it/settings/6-updates.md +24 -0
- package/docs/guide/it/settings/7-existing-projects.md +33 -0
- package/docs/guide/it/settings/8-accessibility.md +23 -0
- package/docs/guide/it/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/it/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/ja/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/ja/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/ja/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/ja/getting-started/6-universal-search.md +34 -0
- package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/ja/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/ja/insights/3-code-explorer.md +1 -1
- package/docs/guide/ja/integrations/1-ai-providers.md +1 -1
- package/docs/guide/ja/integrations/2-plugins.md +1 -1
- package/docs/guide/ja/integrations/3-jira-integration.md +3 -3
- package/docs/guide/ja/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/ja/integrations/5-mcp-server.md +1 -1
- package/docs/guide/ja/integrations/6-agent-chat.md +11 -4
- package/docs/guide/ja/integrations/8-flow-mode.md +69 -0
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/ja/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/ja/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/ja/settings/1-themes.md +1 -1
- package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/ja/settings/5-project-environment.md +1 -1
- package/docs/guide/ja/settings/6-updates.md +24 -0
- package/docs/guide/ja/settings/7-existing-projects.md +33 -0
- package/docs/guide/ja/settings/8-accessibility.md +23 -0
- package/docs/guide/ja/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/ja/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/pt/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/pt/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/pt/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/pt/getting-started/6-universal-search.md +34 -0
- package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/pt/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/pt/insights/3-code-explorer.md +1 -1
- package/docs/guide/pt/integrations/1-ai-providers.md +1 -1
- package/docs/guide/pt/integrations/2-plugins.md +1 -1
- package/docs/guide/pt/integrations/3-jira-integration.md +3 -3
- package/docs/guide/pt/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/pt/integrations/5-mcp-server.md +1 -1
- package/docs/guide/pt/integrations/6-agent-chat.md +12 -5
- package/docs/guide/pt/integrations/8-flow-mode.md +69 -0
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/pt/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/pt/settings/1-themes.md +1 -1
- package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/pt/settings/5-project-environment.md +1 -1
- package/docs/guide/pt/settings/6-updates.md +24 -0
- package/docs/guide/pt/settings/7-existing-projects.md +33 -0
- package/docs/guide/pt/settings/8-accessibility.md +23 -0
- package/docs/guide/pt/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/pt/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/zh/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/zh/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/zh/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/zh/getting-started/6-universal-search.md +34 -0
- package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/zh/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/zh/insights/3-code-explorer.md +1 -1
- package/docs/guide/zh/integrations/1-ai-providers.md +1 -1
- package/docs/guide/zh/integrations/2-plugins.md +1 -1
- package/docs/guide/zh/integrations/3-jira-integration.md +3 -3
- package/docs/guide/zh/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/zh/integrations/5-mcp-server.md +1 -1
- package/docs/guide/zh/integrations/6-agent-chat.md +11 -4
- package/docs/guide/zh/integrations/8-flow-mode.md +69 -0
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/zh/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/zh/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/zh/settings/1-themes.md +1 -1
- package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/zh/settings/5-project-environment.md +1 -1
- package/docs/guide/zh/settings/6-updates.md +24 -0
- package/docs/guide/zh/settings/7-existing-projects.md +33 -0
- package/docs/guide/zh/settings/8-accessibility.md +23 -0
- package/docs/guide/zh/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/zh/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/internals/README.md +8 -0
- package/docs/internals/adding-a-provider.md +19 -2
- package/docs/internals/agent-actions-audit.md +101 -0
- package/docs/internals/agent-sessions.md +36 -1
- package/docs/internals/api-reference.md +190 -45
- package/docs/internals/architecture.md +53 -47
- package/docs/internals/companion-inbox-decisions.md +42 -0
- package/docs/internals/companion-rails-as-loops-contract.md +17 -6
- package/docs/internals/configuration.md +140 -9
- package/docs/internals/core-runtime-updates.md +4 -4
- package/docs/internals/existing-project-anchoring.md +168 -0
- package/docs/internals/flow-mode.md +668 -0
- package/docs/internals/legacy-implementation-notes.md +13 -0
- package/docs/internals/local-testing-feedback-2026-10.md +210 -0
- package/docs/internals/mcp-mission-audit.md +4 -0
- package/docs/internals/mission-rail-cards.md +10 -5
- package/docs/internals/mission-read-only-policy.md +152 -0
- package/docs/internals/modal-standard.md +181 -0
- package/docs/internals/openspec-workflow.md +32 -0
- package/docs/internals/operations-runbook.md +30 -0
- package/docs/internals/profiles.md +6 -3
- package/docs/internals/programmatic-agent-runtime.md +8 -0
- package/docs/internals/project-builder.md +1 -1
- package/docs/internals/review-packet.md +161 -9
- package/docs/internals/safe-pr-review-flow.md +135 -6
- package/docs/internals/source-map.md +413 -18
- package/docs/internals/spec-addenda.md +10 -0
- package/docs/internals/spec-triage.md +140 -0
- package/docs/internals/visual-design-audit.md +15 -2
- package/docs/local-providers.md +3 -0
- package/docs/mcp.md +21 -3
- package/docs/platforms/macos.md +1 -1
- package/docs/platforms/windows.md +2 -2
- package/docs/running-pipelines.md +22 -6
- package/docs/tracking-cost.md +54 -10
- package/local-runner/dist/specrails-local-runner.js +3851 -1178
- package/mcp-bridge/dist/specrails-mcp.js +3864 -1143
- package/package.json +10 -9
- package/server/dist/agent-mcp-config.js +37 -1
- package/server/dist/api-version.js +19 -0
- package/server/dist/command-resolver.js +4 -2
- package/server/dist/core-compat.js +1 -1
- package/server/dist/core-execution.js +2 -1
- package/server/dist/core-update-manager.js +71 -13
- package/server/dist/db/job-search.js +248 -0
- package/server/dist/db/jobs.js +6 -0
- package/server/dist/db/migrations.js +239 -0
- package/server/dist/db.js +9 -2
- package/server/dist/desktop-db.js +99 -5
- package/server/dist/desktop-router.js +126 -13
- package/server/dist/docs-router.js +67 -1
- package/server/dist/feature-flags.js +22 -0
- package/server/dist/index.js +30 -15
- package/server/dist/jira/jira-adf.js +13 -1
- package/server/dist/jira/jira-clarifications.js +146 -0
- package/server/dist/jira/jira-client.js +8 -1
- package/server/dist/jira/jira-db.js +41 -0
- package/server/dist/jira/jira-sync-manager.js +328 -25
- package/server/dist/mcp/guide.js +17 -7
- package/server/dist/mcp/tools/agents.js +1 -1
- package/server/dist/mcp/tools/analytics.js +15 -3
- package/server/dist/mcp/tools/app-settings.js +14 -1
- package/server/dist/mcp/tools/chat.js +1 -1
- package/server/dist/mcp/tools/env.js +4 -2
- package/server/dist/mcp/tools/jobs.js +96 -7
- package/server/dist/mcp/tools/loops.js +1 -1
- package/server/dist/mcp/tools/meta.js +10 -13
- package/server/dist/mcp/tools/rails.js +15 -1
- package/server/dist/mcp/tools/setup.js +1 -1
- package/server/dist/mcp/tools/specs.js +8 -5
- package/server/dist/mcp/tools/support.js +6 -3
- package/server/dist/mcp/tools/types.js +38 -1
- package/server/dist/mobile/mobile-admin-router.js +0 -16
- package/server/dist/mobile/mobile-gateway.js +0 -18
- package/server/dist/mobile/mobile-inbox.js +240 -0
- package/server/dist/mobile/mobile-missions.js +6 -8
- package/server/dist/mobile/mobile-router.js +9 -9
- package/server/dist/mobile/mobile-webrtc-peer.js +4 -54
- package/server/dist/mobile/mobile-ws.js +27 -4
- package/server/dist/modules/accounting/runtime/ai-invocations.js +4 -0
- package/server/dist/modules/accounting/runtime/decision-times.js +102 -0
- package/server/dist/modules/accounting/runtime/loop-economics.js +284 -0
- package/server/dist/modules/accounting/runtime/spending.js +7 -2
- package/server/dist/modules/accounting/runtime/what-if.js +87 -0
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +86 -5
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +28 -2
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +15 -2
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +21 -2
- package/server/dist/modules/agent-runtime/runtime/core-capabilities.js +55 -0
- package/server/dist/modules/agent-sessions/adapters/host-process.js +1 -1
- package/server/dist/modules/agent-sessions/domain/availability.js +16 -0
- package/server/dist/modules/agent-sessions/domain/protocol.js +8 -1
- package/server/dist/modules/agent-sessions/index.js +3 -1
- package/server/dist/modules/agent-sessions/runtime/core-sessions-availability.js +16 -0
- package/server/dist/modules/agents/runtime/agent-refine-manager.js +3 -1
- package/server/dist/modules/agents/runtime/agent-store.js +60 -73
- package/server/dist/modules/audit/adapters/http.js +66 -0
- package/server/dist/modules/audit/adapters/runtime.js +60 -0
- package/server/dist/modules/audit/adapters/sqlite.js +73 -0
- package/server/dist/modules/audit/application.js +190 -0
- package/server/dist/modules/audit/domain.js +434 -0
- package/server/dist/modules/audit/index.js +27 -0
- package/server/dist/modules/audit/ports.js +2 -0
- package/server/dist/modules/browser/runtime/browser-capture-manager.js +18 -141
- package/server/dist/modules/browser/runtime/browser-capture-types.js +1 -10
- package/server/dist/modules/browser/runtime/browser-playwright.js +0 -19
- package/server/dist/modules/code/runtime/file-provenance.js +23 -0
- package/server/dist/modules/conversations/runtime/chat-manager.js +5 -2
- package/server/dist/modules/delivery/adapters/decisions/chains.js +1 -0
- package/server/dist/modules/delivery/adapters/decisions/create.js +19 -1
- package/server/dist/modules/delivery/adapters/decisions/discard.js +2 -0
- package/server/dist/modules/delivery/adapters/decisions/local-changes.js +427 -0
- package/server/dist/modules/delivery/adapters/decisions/merge-local.js +80 -6
- package/server/dist/modules/delivery/adapters/decisions/observations.js +5 -0
- package/server/dist/modules/delivery/adapters/decisions/ownership.js +2 -1
- package/server/dist/modules/delivery/adapters/decisions/transitions.js +9 -0
- package/server/dist/modules/delivery/adapters/review-wip-store.js +37 -0
- package/server/dist/modules/delivery/domain/review-wip.js +71 -0
- package/server/dist/modules/delivery/index.js +9 -1
- package/server/dist/modules/delivery/runtime/delivery-changes.js +355 -0
- package/server/dist/modules/delivery/runtime/delivery-evidence.js +249 -8
- package/server/dist/modules/delivery/runtime/flow-review-legacy.js +99 -0
- package/server/dist/modules/delivery/runtime/flow-review-outcome.js +107 -0
- package/server/dist/modules/delivery/runtime/flow-worktree-handoff.js +32 -0
- package/server/dist/modules/delivery/runtime/flow-worktree-return.js +87 -0
- package/server/dist/modules/delivery/runtime/isolated-worktree.js +380 -0
- package/server/dist/modules/delivery/runtime/local-restore-branch.js +325 -0
- package/server/dist/modules/delivery/runtime/local-restore-resolver.js +48 -0
- package/server/dist/modules/delivery/runtime/local-stash.js +423 -0
- package/server/dist/modules/delivery/runtime/multi-repo-execution.js +27 -1
- package/server/dist/modules/delivery/runtime/phase3-harvest.js +40 -0
- package/server/dist/modules/delivery/runtime/pr-body.js +50 -0
- package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +169 -166
- package/server/dist/modules/delivery/runtime/rail-launch-parser.js +5 -2
- package/server/dist/modules/delivery/runtime/rail-pr-decision.js +7 -1
- package/server/dist/modules/delivery/runtime/rail-pr-store.js +193 -12
- package/server/dist/modules/delivery/runtime/rails-router.js +267 -5
- package/server/dist/modules/delivery/runtime/review-brief.js +208 -0
- package/server/dist/modules/delivery/runtime/review-packet.js +41 -2
- package/server/dist/modules/delivery/runtime/review-wip-gate.js +67 -0
- package/server/dist/modules/delivery/runtime/run-records.js +267 -0
- package/server/dist/modules/delivery/runtime/run-review-diagnosis.js +102 -0
- package/server/dist/modules/execution/adapters/budget-storage.js +76 -0
- package/server/dist/modules/execution/application/enforce-budget.js +17 -2
- package/server/dist/modules/execution/domain/agent-env.js +98 -0
- package/server/dist/modules/execution/domain/daily-budget.js +36 -0
- package/server/dist/modules/execution/domain/spend-caps.js +166 -0
- package/server/dist/modules/execution/index.js +34 -1
- package/server/dist/modules/execution/runtime/budget-overview.js +76 -0
- package/server/dist/modules/execution/runtime/daily-budget-gate.js +86 -0
- package/server/dist/modules/execution/runtime/interactive-job-session.js +8 -0
- package/server/dist/modules/execution/runtime/launch-forecast.js +33 -0
- package/server/dist/modules/execution/runtime/queue-manager.js +54 -15
- package/server/dist/modules/execution/runtime/run-duration-stats.js +31 -13
- package/server/dist/modules/flow/adapters/bindings.js +1089 -0
- package/server/dist/modules/flow/adapters/http.js +147 -0
- package/server/dist/modules/flow/adapters/sqlite.js +121 -0
- package/server/dist/modules/flow/application.js +805 -0
- package/server/dist/modules/flow/domain.js +790 -0
- package/server/dist/modules/flow/index.js +34 -0
- package/server/dist/modules/flow/ports.js +2 -0
- package/server/dist/modules/inbox/adapters/http.js +21 -0
- package/server/dist/modules/inbox/adapters/project-source.js +233 -0
- package/server/dist/modules/inbox/application.js +28 -0
- package/server/dist/modules/inbox/domain.js +43 -0
- package/server/dist/modules/inbox/index.js +10 -0
- package/server/dist/modules/inbox/ports.js +2 -0
- package/server/dist/modules/loops/runtime/loop-definition-run.js +9 -0
- package/server/dist/modules/loops/runtime/loop-definition.js +5 -2
- package/server/dist/modules/loops/runtime/loop-executors.js +90 -9
- package/server/dist/modules/loops/runtime/loop-factory.js +30 -2
- package/server/dist/modules/loops/runtime/loop-flow-spec-recipe.js +166 -0
- package/server/dist/modules/loops/runtime/loop-graph.js +1 -1
- package/server/dist/modules/loops/runtime/loop-role-engines.js +4 -1
- package/server/dist/modules/loops/runtime/loop-run-manager.js +267 -10
- package/server/dist/modules/loops/runtime/loop-runs-store.js +21 -5
- package/server/dist/modules/loops/runtime/loop-templates.js +55 -12
- package/server/dist/modules/missions/runtime/agent-chat-manager.js +283 -20
- package/server/dist/modules/missions/runtime/agent-chat-router.js +96 -21
- package/server/dist/modules/missions/runtime/agent-failure-briefing.js +11 -3
- package/server/dist/modules/missions/runtime/agent-fence-promotion.js +9 -1
- package/server/dist/modules/missions/runtime/agent-flow-prompt.js +64 -0
- package/server/dist/modules/missions/runtime/agent-input-store.js +9 -4
- package/server/dist/modules/missions/runtime/agent-operator-prompt.js +100 -14
- package/server/dist/modules/missions/runtime/agent-session-store.js +88 -27
- package/server/dist/modules/missions/runtime/core-session-runner.js +89 -9
- package/server/dist/modules/missions/runtime/flow-turn-context.js +17 -0
- package/server/dist/modules/missions/runtime/mission-core-sessions.js +295 -55
- package/server/dist/modules/missions/runtime/mission-run-notify.js +2 -0
- package/server/dist/modules/missions/runtime/mission-session-projector.js +56 -19
- package/server/dist/modules/missions/runtime/mission-tool-policy.js +47 -0
- package/server/dist/modules/onboarding/adapters/http.js +78 -0
- package/server/dist/modules/onboarding/adapters/providers.js +41 -0
- package/server/dist/modules/onboarding/adapters/runtime.js +130 -0
- package/server/dist/modules/onboarding/application.js +133 -0
- package/server/dist/modules/onboarding/catalog.js +217 -0
- package/server/dist/modules/onboarding/domain.js +102 -0
- package/server/dist/modules/onboarding/index.js +20 -0
- package/server/dist/modules/onboarding/ports.js +2 -0
- package/server/dist/modules/project-rules/adapters/http.js +91 -0
- package/server/dist/modules/project-rules/domain.js +122 -0
- package/server/dist/modules/project-rules/runtime/rules-inventory-runs.js +97 -0
- package/server/dist/modules/project-rules/runtime/rules-store.js +109 -0
- package/server/dist/modules/project-settings/adapters/http.js +13 -0
- package/server/dist/modules/project-settings/adapters/sqlite.js +78 -8
- package/server/dist/modules/project-settings/domain.js +47 -1
- package/server/dist/modules/project-settings/index.js +7 -1
- package/server/dist/modules/recovery/adapters/sqlite.js +28 -0
- package/server/dist/modules/recovery/domain.js +162 -0
- package/server/dist/modules/recovery/index.js +16 -0
- package/server/dist/modules/specs/adapters/timeline-http.js +101 -0
- package/server/dist/modules/specs/domain/handoff-labels.js +371 -0
- package/server/dist/modules/specs/domain/handoff.js +260 -0
- package/server/dist/modules/specs/domain/non-goals.js +101 -0
- package/server/dist/modules/specs/domain/timeline.js +164 -0
- package/server/dist/modules/specs/domain/triage.js +320 -0
- package/server/dist/modules/specs/runtime/contract-refine-runner.js +3 -2
- package/server/dist/modules/specs/runtime/generated-spec-parser.js +75 -0
- package/server/dist/modules/specs/runtime/proposal-manager.js +4 -3
- package/server/dist/modules/specs/runtime/smash-runner.js +2 -1
- package/server/dist/modules/specs/runtime/spec-addenda.js +31 -0
- package/server/dist/modules/specs/runtime/spec-draft-parser.js +6 -1
- package/server/dist/modules/specs/runtime/spec-generation.js +431 -0
- package/server/dist/modules/specs/runtime/spec-handoff.js +103 -0
- package/server/dist/modules/specs/runtime/spec-history.js +376 -0
- package/server/dist/modules/specs/runtime/spec-launcher-manager.js +4 -3
- package/server/dist/modules/specs/runtime/spec-search.js +117 -0
- package/server/dist/modules/specs/runtime/ticket-store.js +47 -2
- package/server/dist/modules/specs/runtime/ticket-trash-service.js +62 -0
- package/server/dist/modules/specs/runtime/ticket-trash.js +193 -0
- package/server/dist/modules/specs/runtime/triage-runner.js +171 -0
- package/server/dist/modules/specs/runtime/triage.js +365 -0
- package/server/dist/modules/terminals/domain/app-urls.js +96 -0
- package/server/dist/modules/terminals/runtime/app-urls.js +77 -0
- package/server/dist/modules/terminals/runtime/background-process-service.js +25 -28
- package/server/dist/openspec-shim.js +1 -1
- package/server/dist/project-env.js +60 -0
- package/server/dist/project-git.js +65 -0
- package/server/dist/project-registry.js +264 -27
- package/server/dist/project-router-background-processes.js +27 -3
- package/server/dist/project-router-git.js +30 -0
- package/server/dist/project-router-helpers.js +5 -30
- package/server/dist/project-router-jobs.js +49 -1
- package/server/dist/project-router-loop-runs.js +72 -2
- package/server/dist/project-router-rules.js +54 -0
- package/server/dist/project-router-search.js +52 -0
- package/server/dist/project-router-settings.js +6 -0
- package/server/dist/project-router-setup.js +1 -1
- package/server/dist/project-router-spending.js +138 -0
- package/server/dist/project-router-tickets.js +246 -427
- package/server/dist/project-router.js +7 -0
- package/server/dist/providers/claude-adapter.js +25 -3
- package/server/dist/providers/codex-adapter.js +9 -1
- package/server/dist/providers/gemini-adapter.js +6 -1
- package/server/dist/providers/kimi-adapter.js +2 -0
- package/server/dist/providers/local-adapter.js +2 -0
- package/server/dist/providers/runtime.js +8 -0
- package/server/dist/schemas/agent-runtime.schema.json +3 -1
- package/server/dist/schemas/workflow-definition.schema.json +1 -0
- package/server/dist/setup-manager.js +19 -1
- package/server/dist/transient-children.js +25 -8
- package/server/dist/update-channel.js +21 -0
- package/server/dist/util/search-snippet.js +74 -0
- package/server/dist/worktree-manager.js +19 -8
- package/client/dist/assets/ActivityFeedPage-Dtp7EyHc.js +0 -1
- package/client/dist/assets/AgentBrowserCapture-CLqlEFw8.js +0 -1
- package/client/dist/assets/AgentModeAnalyticsPane-B8_hM3Tw.js +0 -2
- package/client/dist/assets/AgentModeCodePane-CNF8ZNjE.js +0 -2
- package/client/dist/assets/AgentModeJobsPane-CJpJbO9m.js +0 -1
- package/client/dist/assets/AgentsPage-BC8XSR79.js +0 -120
- package/client/dist/assets/AnalyticsPage-Cdv4jLtW.js +0 -1
- package/client/dist/assets/BarChart-BDMqVFJy.js +0 -55
- package/client/dist/assets/CodePage-DI1kegAr.js +0 -3
- package/client/dist/assets/DesktopAnalyticsPage-Bdp8E8U6.js +0 -1
- package/client/dist/assets/DocsDialog-Bm4RS7FX.js +0 -11
- package/client/dist/assets/DocsPage-DihYcU8r.js +0 -11
- package/client/dist/assets/ExportDropdown-Bb1lHx3r.js +0 -1
- package/client/dist/assets/IntegrationsPage-EAipiDWm.js +0 -1
- package/client/dist/assets/InteractiveJobComposer-BO6ASN-2.js +0 -19
- package/client/dist/assets/JobDetailModal-CuPYq7tP.js +0 -1
- package/client/dist/assets/JobDetailPage-BusMjJi9.js +0 -1
- package/client/dist/assets/JobsPage-C0QbsF2d.js +0 -1
- package/client/dist/assets/LoopBuilderPage-B7TlU4iS.js +0 -1
- package/client/dist/assets/LoopPreviewModal-BRWtXOD2.js +0 -1
- package/client/dist/assets/LoopsPage-C4q1DmCE.js +0 -2
- package/client/dist/assets/MinimizedChatsContext-DHfigjHS.js +0 -1
- package/client/dist/assets/PluginsPage-Z1JHSMdR.js +0 -2
- package/client/dist/assets/ProjectSettingsDialog-BUNj0tvN.js +0 -1
- package/client/dist/assets/RepositoryDeliveries-B4ybHOyB.js +0 -5
- package/client/dist/assets/ReviewPacketPage-hwfPNjyy.js +0 -4
- package/client/dist/assets/TemplatePreviewModal-V7FpMWuw.js +0 -1
- package/client/dist/assets/TicketDetailModalContext-Dkwo2cDs.js +0 -16
- package/client/dist/assets/Trans-BbFxRFtR.js +0 -1
- package/client/dist/assets/activity-B-rp4h_v.js +0 -1
- package/client/dist/assets/activity-C6kJpm9q.js +0 -1
- package/client/dist/assets/activity-CGx4kb_j.js +0 -1
- package/client/dist/assets/activity-CnoX2bH7.js +0 -1
- package/client/dist/assets/activity-DAyekdlt.js +0 -1
- package/client/dist/assets/activity-DCxtpT7j.js +0 -1
- package/client/dist/assets/activity-DiyjsgQV.js +0 -1
- package/client/dist/assets/activity-JzwRaWPD.js +0 -1
- package/client/dist/assets/addspec-BOvgmcgk.js +0 -1
- package/client/dist/assets/addspec-Clmyfn_R.js +0 -1
- package/client/dist/assets/addspec-CsNaBpHp.js +0 -1
- package/client/dist/assets/addspec-D2tvWmmV.js +0 -1
- package/client/dist/assets/addspec-D3nFwvD0.js +0 -1
- package/client/dist/assets/addspec-DVLEhK3w.js +0 -1
- package/client/dist/assets/addspec-DXbK-tb0.js +0 -1
- package/client/dist/assets/addspec-OHG8DFEn.js +0 -1
- package/client/dist/assets/agent-5bSixVzz.js +0 -1
- package/client/dist/assets/agent-BR4EHfhq.js +0 -1
- package/client/dist/assets/agent-C0IKkJP8.js +0 -1
- package/client/dist/assets/agent-C7li9ayC.js +0 -1
- package/client/dist/assets/agent-D0dRmEen.js +0 -1
- package/client/dist/assets/agent-DZVGHm7H.js +0 -1
- package/client/dist/assets/agent-Dip4h2YE.js +0 -1
- package/client/dist/assets/agent-Pp-P-n1p.js +0 -1
- package/client/dist/assets/agentRuntime-BxF81z52.js +0 -1
- package/client/dist/assets/agentRuntime-BxYS5V7u.js +0 -1
- package/client/dist/assets/agentRuntime-Dc9HG3BA.js +0 -1
- package/client/dist/assets/agents-B6ZsnARo.js +0 -1
- package/client/dist/assets/agents-BORdhe0K.js +0 -1
- package/client/dist/assets/agents-C6aq9Oqs.js +0 -1
- package/client/dist/assets/agents-Cbsc4bcX.js +0 -1
- package/client/dist/assets/agents-D0uYR6hq.js +0 -1
- package/client/dist/assets/agents-Doe1sHY5.js +0 -1
- package/client/dist/assets/agents-DyNi_I9m.js +0 -1
- package/client/dist/assets/agents-StKxiTg0.js +0 -1
- package/client/dist/assets/agentstudio-7cYCXn-L.js +0 -1
- package/client/dist/assets/agentstudio-BHWQh8G3.js +0 -1
- package/client/dist/assets/agentstudio-BjnWHyRs.js +0 -1
- package/client/dist/assets/agentstudio-BkV8vcK4.js +0 -1
- package/client/dist/assets/agentstudio-BzugqB_N.js +0 -1
- package/client/dist/assets/agentstudio-CWbp7KvH.js +0 -1
- package/client/dist/assets/agentstudio-DG6plf5o.js +0 -1
- package/client/dist/assets/agentstudio-DkZVF-Cc.js +0 -1
- package/client/dist/assets/analytics-B1DIQd4m.js +0 -1
- package/client/dist/assets/analytics-BAIZ9vE_.js +0 -1
- package/client/dist/assets/analytics-BTqgmgBd.js +0 -1
- package/client/dist/assets/analytics-BWynXPEm.js +0 -1
- package/client/dist/assets/analytics-DGcUsQ44.js +0 -1
- package/client/dist/assets/analytics-GnSnpJ4W.js +0 -1
- package/client/dist/assets/analytics-TWgYaoO0.js +0 -1
- package/client/dist/assets/analytics-kJy6Tuko.js +0 -1
- package/client/dist/assets/atom-one-dark-qiGhVQxg.js +0 -1
- package/client/dist/assets/builder-B9gorTnT.js +0 -1
- package/client/dist/assets/builder-Bvw5s3Mi.js +0 -1
- package/client/dist/assets/builder-CL5l4dU3.js +0 -1
- package/client/dist/assets/builder-CVDTVrQX.js +0 -1
- package/client/dist/assets/builder-CpS9liE9.js +0 -1
- package/client/dist/assets/builder-DNctIL9Q.js +0 -1
- package/client/dist/assets/builder-De2NxX6o.js +0 -1
- package/client/dist/assets/builder-DeYT7Y-m.js +0 -1
- package/client/dist/assets/button-4FS1ZDTp.js +0 -1
- package/client/dist/assets/chat-D_I7nU5K.js +0 -1
- package/client/dist/assets/chevron-up-6EFqEHBj.js +0 -1
- package/client/dist/assets/chunk-OB3PAWPO-B1EMk45A.js +0 -3
- package/client/dist/assets/clsx-CjueKrWZ.js +0 -1
- package/client/dist/assets/code-B37GRg9C.js +0 -1
- package/client/dist/assets/code-BBOEZbf9.js +0 -1
- package/client/dist/assets/code-BRm-jcyx.js +0 -1
- package/client/dist/assets/code-CF7w62CR.js +0 -1
- package/client/dist/assets/code-CLuvJt2r.js +0 -1
- package/client/dist/assets/code-D0RCm59f.js +0 -1
- package/client/dist/assets/code-DaZ-ZwCT.js +0 -1
- package/client/dist/assets/code-iIHkGaCL.js +0 -1
- package/client/dist/assets/commands-0XjAftla.js +0 -1
- package/client/dist/assets/commands-BAWSYHjQ.js +0 -1
- package/client/dist/assets/commands-BBwowgiE.js +0 -1
- package/client/dist/assets/commands-BacjIZLN.js +0 -1
- package/client/dist/assets/commands-Bs62IAZ3.js +0 -1
- package/client/dist/assets/commands-CLPdh-Hh.js +0 -1
- package/client/dist/assets/commands-DlbFzgrp.js +0 -1
- package/client/dist/assets/commands-LjPSsi5F.js +0 -1
- package/client/dist/assets/common-Bdi0qN4S.js +0 -1
- package/client/dist/assets/common-Bhb9zN1P.js +0 -1
- package/client/dist/assets/common-BykKlZg1.js +0 -1
- package/client/dist/assets/common-CvnNNSJA.js +0 -1
- package/client/dist/assets/common-D5zk_mqq.js +0 -1
- package/client/dist/assets/common-DQNO_al5.js +0 -1
- package/client/dist/assets/common-Dax30Vmp.js +0 -1
- package/client/dist/assets/common-DkllpVSb.js +0 -1
- package/client/dist/assets/core-B3mKBIh5.js +0 -1
- package/client/dist/assets/dashboard-B1ndRHuC.js +0 -1
- package/client/dist/assets/dashboard-BX7KXiqA.js +0 -1
- package/client/dist/assets/dashboard-B_BSNxcN.js +0 -1
- package/client/dist/assets/dashboard-CCeFN7-V.js +0 -1
- package/client/dist/assets/dashboard-CRl0WtFJ.js +0 -1
- package/client/dist/assets/dashboard-XGdQ5mjw.js +0 -1
- package/client/dist/assets/dashboard-_oltA6Jd.js +0 -1
- package/client/dist/assets/dashboard-bAuf5KVk.js +0 -1
- package/client/dist/assets/dialog-DtdR05v1.js +0 -45
- package/client/dist/assets/dist-js-CJ_2XX1Y.js +0 -1
- package/client/dist/assets/event-Bt7f3wXe.js +0 -1
- package/client/dist/assets/explore-BG99VGpL.js +0 -1
- package/client/dist/assets/explore-C0TjprJW.js +0 -1
- package/client/dist/assets/explore-C2dgEo7q.js +0 -1
- package/client/dist/assets/explore-C8NDHbob.js +0 -1
- package/client/dist/assets/explore-CWWgzQGR.js +0 -1
- package/client/dist/assets/explore-CcQXpdtS.js +0 -1
- package/client/dist/assets/explore-DgBACn39.js +0 -1
- package/client/dist/assets/explore-DsXAgnmJ.js +0 -1
- package/client/dist/assets/file-text-C0blZHLh.js +0 -1
- package/client/dist/assets/formatDistanceToNow-NjPHBLfB.js +0 -1
- package/client/dist/assets/getTimezoneOffsetInMilliseconds-vJ7qUoqN.js +0 -1
- package/client/dist/assets/git-branch-yf6LE1Bw.js +0 -1
- package/client/dist/assets/index-BgbCbIua.css +0 -2
- package/client/dist/assets/index-Ce4yZtKf.js +0 -83
- package/client/dist/assets/integrations-BkpRUbvp.js +0 -1
- package/client/dist/assets/integrations-Bo8qbJf4.js +0 -1
- package/client/dist/assets/integrations-CmSrKzZb.js +0 -1
- package/client/dist/assets/integrations-DGtq26Rr.js +0 -1
- package/client/dist/assets/integrations-De38GFnQ.js +0 -1
- package/client/dist/assets/integrations-Dw6zdtb-.js +0 -1
- package/client/dist/assets/integrations-Dwl9KQp0.js +0 -1
- package/client/dist/assets/integrations-Refg_d2I.js +0 -1
- package/client/dist/assets/jira-B6OYw4CJ.js +0 -1
- package/client/dist/assets/jira-BTF6RaOe.js +0 -1
- package/client/dist/assets/jira-CEetIB2q.js +0 -1
- package/client/dist/assets/jira-CIzsZLw5.js +0 -1
- package/client/dist/assets/jira-Daw9tmpI.js +0 -1
- package/client/dist/assets/jira-FXr7u2lh.js +0 -1
- package/client/dist/assets/jira-LaNQn7yl.js +0 -1
- package/client/dist/assets/jira-api-Cabj-H0J.js +0 -1
- package/client/dist/assets/job-time-BCL7wee9.js +0 -1
- package/client/dist/assets/jobs-ARwD85B9.js +0 -1
- package/client/dist/assets/jobs-BMF1w4WT.js +0 -1
- package/client/dist/assets/jobs-CBfzGLwm.js +0 -1
- package/client/dist/assets/jobs-CPjiluBY.js +0 -1
- package/client/dist/assets/jobs-CQQd58pY.js +0 -1
- package/client/dist/assets/jobs-De3EqaO0.js +0 -1
- package/client/dist/assets/jobs-Du9-Ei9a.js +0 -1
- package/client/dist/assets/jobs-qMHbnxwC.js +0 -1
- package/client/dist/assets/layers-BCLTgHXO.js +0 -1
- package/client/dist/assets/loader-circle-BqV9xYGf.js +0 -1
- package/client/dist/assets/loop-layout-CyXj9223.js +0 -7
- package/client/dist/assets/loops-B2PhQLKR.js +0 -1
- package/client/dist/assets/loops-BqbF46st.js +0 -1
- package/client/dist/assets/loops-CINnHbfI.js +0 -1
- package/client/dist/assets/loops-D-3XhH04.js +0 -1
- package/client/dist/assets/loops-DKkEEjZ_.js +0 -1
- package/client/dist/assets/loops-DzWR5-v6.js +0 -1
- package/client/dist/assets/loops-WyWDkhok.js +0 -1
- package/client/dist/assets/loops-scD5fIBf.js +0 -1
- package/client/dist/assets/mcp-6rMoZfEO.js +0 -1
- package/client/dist/assets/mcp-BD8sL5mP.js +0 -1
- package/client/dist/assets/mcp-BkcA3I5s.js +0 -1
- package/client/dist/assets/mcp-CCpSelOh.js +0 -1
- package/client/dist/assets/mcp-CUAN6ORK.js +0 -1
- package/client/dist/assets/mcp-CqbRxRTE.js +0 -1
- package/client/dist/assets/mcp-DP2YfVhO.js +0 -1
- package/client/dist/assets/mcp-DUVQamDz.js +0 -1
- package/client/dist/assets/narration-BEKMVxGm.js +0 -1
- package/client/dist/assets/narration-CjLwGKap.js +0 -1
- package/client/dist/assets/narration-DANWuGsW.js +0 -1
- package/client/dist/assets/narration-DGeEDWiT.js +0 -1
- package/client/dist/assets/narration-DJgpGwIP.js +0 -1
- package/client/dist/assets/narration-DbHnz0qV.js +0 -1
- package/client/dist/assets/narration-bZSsTZG8.js +0 -1
- package/client/dist/assets/narration-i6aKJKEc.js +0 -1
- package/client/dist/assets/nav--u7iPYlS.js +0 -1
- package/client/dist/assets/nav-C5Jgfaby.js +0 -1
- package/client/dist/assets/nav-CAna_Wpt.js +0 -1
- package/client/dist/assets/nav-CCLqeyHo.js +0 -1
- package/client/dist/assets/nav-Cf3c90Jk.js +0 -1
- package/client/dist/assets/nav-DMYQaQjR.js +0 -1
- package/client/dist/assets/nav-Df_PkZ9F.js +0 -1
- package/client/dist/assets/nav-VyNGBJwj.js +0 -1
- package/client/dist/assets/packet-8nn9RsU7.js +0 -1
- package/client/dist/assets/packet-B0H15elv.js +0 -1
- package/client/dist/assets/packet-BQvBgrwh.js +0 -1
- package/client/dist/assets/packet-BR7mO0-a.js +0 -1
- package/client/dist/assets/packet-BgcQ6q_K.js +0 -1
- package/client/dist/assets/packet-D2s92Jnn.js +0 -1
- package/client/dist/assets/packet-YbtcD1HS.js +0 -1
- package/client/dist/assets/packet-c0Qj_9eX.js +0 -1
- package/client/dist/assets/project-repositories-Cnnuj9Ia.js +0 -1
- package/client/dist/assets/rotate-ccw-DalJAQQX.js +0 -1
- package/client/dist/assets/settings-B1NV8Ow9.js +0 -1
- package/client/dist/assets/settings-BQ8XFZeE.js +0 -1
- package/client/dist/assets/settings-BRkxfBbO.js +0 -1
- package/client/dist/assets/settings-C_CcU1dP.js +0 -1
- package/client/dist/assets/settings-Cto9n0eL.js +0 -1
- package/client/dist/assets/settings-Pyw8uYtL.js +0 -1
- package/client/dist/assets/settings-b3HVCNNd.js +0 -1
- package/client/dist/assets/settings-hdive4u6.js +0 -1
- package/client/dist/assets/setup-Be485n2u.js +0 -1
- package/client/dist/assets/setup-CKGUxKr-.js +0 -1
- package/client/dist/assets/setup-Ck1Uwd7_.js +0 -1
- package/client/dist/assets/setup-Cm774a6v.js +0 -1
- package/client/dist/assets/setup-DIqMQpxt.js +0 -1
- package/client/dist/assets/setup-DfCsoNFL.js +0 -1
- package/client/dist/assets/setup-DkeE8mP0.js +0 -1
- package/client/dist/assets/setup-xVntVaz1.js +0 -1
- package/client/dist/assets/specs-Bqvtz2kz.js +0 -1
- package/client/dist/assets/specs-CKes-kz6.js +0 -1
- package/client/dist/assets/specs-CfXxPDNB.js +0 -1
- package/client/dist/assets/specs-CyF9HuTI.js +0 -1
- package/client/dist/assets/specs-DMj035Mt.js +0 -1
- package/client/dist/assets/specs-DfIdoU5L.js +0 -1
- package/client/dist/assets/specs-j5pGLQeU.js +0 -1
- package/client/dist/assets/specs-xW5pkkB7.js +0 -1
- package/client/dist/assets/spending-CQnrWiR3.js +0 -1
- package/client/dist/assets/square-D0JTbRSR.js +0 -1
- package/client/dist/assets/tauri-shell-DE6LfGPw.js +0 -2
- package/client/dist/assets/terminal-BAzpHtpY.js +0 -1
- package/client/dist/assets/terminal-C7dHeR3x.js +0 -1
- package/client/dist/assets/terminal-CMla5Qsz.js +0 -1
- package/client/dist/assets/terminal-CdNXH-n9.js +0 -1
- package/client/dist/assets/terminal-Cw5bZsmV.js +0 -1
- package/client/dist/assets/terminal-DFUP4eNv.js +0 -1
- package/client/dist/assets/terminal-DGqljeK_.js +0 -1
- package/client/dist/assets/terminal-cU70NodO.js +0 -1
- package/client/dist/assets/tickets--tiSOCcn.js +0 -1
- package/client/dist/assets/tickets-BUJ3DMWU.js +0 -1
- package/client/dist/assets/tickets-C1WNPODq.js +0 -1
- package/client/dist/assets/tickets-CDjhWmiE.js +0 -1
- package/client/dist/assets/tickets-CLgPC3uO.js +0 -1
- package/client/dist/assets/tickets-D41ZMQpf.js +0 -1
- package/client/dist/assets/tickets-DEaQC06P.js +0 -1
- package/client/dist/assets/tickets-kcMzbLCp.js +0 -1
- package/client/dist/assets/trash-D8zYUmTg.js +0 -1
- package/client/dist/assets/useDesktop-BjLT0_EE.js +0 -1
- package/client/dist/assets/useRuntimeRuns-C97qEqMg.js +0 -1
- package/client/dist/assets/useSharedWebSocket-Bj4LMp7b.js +0 -2
- package/client/dist/assets/utils-BC4DHlz2.js +0 -1
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +0 -48
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +0 -48
- package/server/dist/mobile/mobile-preview-channel.js +0 -179
- package/server/dist/mobile/mobile-preview.js +0 -366
- package/server/dist/modules/browser/domain/preview-origins.js +0 -117
- package/server/dist/modules/browser/runtime/preview-targets.js +0 -80
- /package/client/dist/assets/{atom-one-dark-B-oHczHB.css → DocView-B-oHczHB.css} +0 -0
- /package/docs/guide/de/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/en/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/es/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/fr/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/it/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/ja/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/pt/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/zh/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
|
@@ -275,6 +275,38 @@ These are handy for tooling that wants to surface the artifact set without parsi
|
|
|
275
275
|
|
|
276
276
|
---
|
|
277
277
|
|
|
278
|
+
## Requirement traceability in CI
|
|
279
|
+
|
|
280
|
+
With a Core that announces `specTrace: 1` (contract 5.5), every OpenSpec requirement has a stable id `<capability>/<slug>` (from `### Requirement: <name>` in `openspec/specs/<capability>/spec.md`: accents removed, lowercase, every run of non-alphanumerics one `-`). A test claims a requirement with `[spec:<capability>/<slug>]` anywhere in its title, or a `// spec: <capability>/<slug>` comment (`# spec:` in Python and shell) on the line before it.
|
|
281
|
+
|
|
282
|
+
Add the check after your test suite so CI fails when a requirement the change adds, modifies or renames has no passing tagged test:
|
|
283
|
+
|
|
284
|
+
```jsonc
|
|
285
|
+
// package.json
|
|
286
|
+
{
|
|
287
|
+
"scripts": {
|
|
288
|
+
"test": "vitest run",
|
|
289
|
+
"spec:check": "specrails-core pipeline trace --check --tests-passed"
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
```yaml
|
|
295
|
+
# .github/workflows/ci.yml (job steps)
|
|
296
|
+
- run: npm ci
|
|
297
|
+
- run: npm test
|
|
298
|
+
- run: npm run spec:check # exits 1 and names each touched requirement that is not demonstrated
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
- `--tests-passed` tells the scanner the suite already passed in this job (CI has no Specrails verification receipt). Run it only after the tests.
|
|
302
|
+
- Without `--check` the command only reports (exit 0, never fails), which is useful to see `Requirements demonstrated X/Y` locally: `npx specrails-core pipeline trace`.
|
|
303
|
+
- `--change <name>` limits the check to one change; `--tests <glob>` restricts which files count as tests; `--json` prints the report. Inside an installed project the same scanner ships as `node .specrails/runtime/trace.mjs --check --tests-passed`.
|
|
304
|
+
- `specrails-core` must be available to CI (a dev dependency or `npx specrails-core@<version>`).
|
|
305
|
+
|
|
306
|
+
In a run, Core writes the same report as `spec-trace.json` after each passing verification; the review packet shows it as **Requirements demonstrated X/Y** and loop economics sums it per loop. See [existing-project anchoring](existing-project-anchoring.md#requirement-traceability).
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
278
310
|
## Further reading
|
|
279
311
|
|
|
280
312
|
- [CLI reference](../cli.md) — the `specrails-desktop` CLI and its verbs
|
|
@@ -89,6 +89,36 @@ cp -r ~/.specrails/ ~/specrails-backup-$(date +%Y%m%d)/
|
|
|
89
89
|
|
|
90
90
|
Your project source code and each project's `.specrails/` folder (specs, profiles, plugins) live in your repos, not here — they are not part of this backup.
|
|
91
91
|
|
|
92
|
+
## Metrics baseline export
|
|
93
|
+
|
|
94
|
+
`npm run metrics:baseline` ([scripts/metrics-baseline.mjs](../../scripts/metrics-baseline.mjs))
|
|
95
|
+
captures a delivery-economics baseline from local data. It reads the registry
|
|
96
|
+
(`~/.specrails/desktop.sqlite`, or `$SPECRAILS_REGISTRY_HOME/.specrails/…` like the
|
|
97
|
+
server) and every registered project's `jobs.sqlite` strictly read-only, so it is
|
|
98
|
+
safe while the app runs.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npm run metrics:baseline # last 28 days, all projects
|
|
102
|
+
npm run metrics:baseline -- --since 2026-10-01 --until 2026-10-15 --project darkera --out ~/metrics
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
`--project` accepts a slug or id and may repeat; `--since`/`--until` take a date or
|
|
106
|
+
ISO timestamp (window `[since, until)` on the delivery's `created_at`). Output is
|
|
107
|
+
`baseline-<YYYY-MM-DD>.json` and `.csv` in `--out` (default `~/.specrails/metrics/`;
|
|
108
|
+
paths inside the repository are refused), plus a per-loop summary table on stdout.
|
|
109
|
+
|
|
110
|
+
One row per Safe-PR delivery (`rail_pr_deliveries`). The JSON adds `byLoop`, `byTicket`
|
|
111
|
+
and `totals` rollups (deliveries, merged/discarded/superseded/failed, cost per priced
|
|
112
|
+
delivery, review/fixer rounds per delivery, median build and on_review time).
|
|
113
|
+
|
|
114
|
+
| Field | Source and semantics |
|
|
115
|
+
| --- | --- |
|
|
116
|
+
| `costUsd`, `estimatedCostUsd` | `ai_invocations` attributed like `sumInvocationCostForRuns`: `loop_run_id` in `run_ids`, `surface_ref_id` = run id, or `<runId>:merge:*`. `costUsd` includes estimated rows; `estimatedCostUsd` is the pricing-table portion. **`null` means no priced rows (unknown), never $0.** `unpricedInvocations`/`costComplete` show partial coverage. Multi-ticket launches attribute per ticket via `ai_invocations.ticket_id`. |
|
|
117
|
+
| `reviewRounds`, `fixerRounds` | `loop_step` events of the delivery's runs whose node is `reviewer`/`fixer`. |
|
|
118
|
+
| `buildDurationMs` | delivery `created_at` → latest attributed loop run `finished_at`. |
|
|
119
|
+
| `onReviewMsApprox` | Approximate: build settle → `updated_at` for decided rows that succeeded; open `on_review` rows run to the window end (`onReviewOpen`). There is no dedicated on_review timestamp. |
|
|
120
|
+
| `decision`, `isContinuation`, `supersedesDeliveryId`, `revisionOf` | Copied from the delivery row; discards are `decision = 'discarded'`. |
|
|
121
|
+
|
|
92
122
|
## Troubleshooting
|
|
93
123
|
|
|
94
124
|
### Port already in use
|
|
@@ -120,9 +120,12 @@ template/duplicate/edit and rail execution remain available.
|
|
|
120
120
|
|
|
121
121
|
## 6. Troubleshooting
|
|
122
122
|
|
|
123
|
-
- **Upgrade banner on Agents page** —
|
|
124
|
-
|
|
125
|
-
(
|
|
123
|
+
- **Upgrade banner on Agents page** — the project's workspace was assembled
|
|
124
|
+
by a Core older than 4.1.0 (profiles need ≥ 4.1.0). The app installs Core 6
|
|
125
|
+
(`CORE_PACKAGE_SPEC` in `server/core-package.ts`). The banner's **Open Core
|
|
126
|
+
updates** button opens **Settings → Updates**; update Core there (see
|
|
127
|
+
[Core runtime updates](core-runtime-updates.md)) and stale workspaces are
|
|
128
|
+
re-assembled automatically after the swap.
|
|
126
129
|
- **Save disabled with "N issues to resolve"** — the live validator
|
|
127
130
|
enforces the baseline trio (`sr-architect`, `sr-developer`, `sr-reviewer`)
|
|
128
131
|
and routing ordering. Among the rules: a `default: true` routing rule (if
|
|
@@ -4,6 +4,8 @@ Desktop owns the Implement, Freestyle and Quick SDD workflow graphs and their lo
|
|
|
4
4
|
|
|
5
5
|
This is the only implementation engine in the current source tree. It applies to implementation rail steps and their Core completion check. Mission chat and unrelated AI features keep their existing transports. Provider-native implementation prompts and skills are not invoked inside the programmatic phases.
|
|
6
6
|
|
|
7
|
+
The bridge passes Desktop's environment to Core, and Core's provider CLIs inherit it. `coreProviderEnv` adds `GEMINI_CLI_TRUST_WORKSPACE=true` (unless the host set a value) because Gemini CLI exits 55 in a folder that was never trusted interactively, which includes every rail worktree. Desktop already trusts the admitted workspace this way for its own Gemini spawns.
|
|
8
|
+
|
|
7
9
|
## Build the paired source
|
|
8
10
|
|
|
9
11
|
Use Node **22.22.3+** for Core; Node **22.22.3** matches Desktop's native CI runtime. Provider requirements can be higher. Both repositories' dependencies must be installed.
|
|
@@ -143,6 +145,12 @@ Desktop launches `node <Core>/dist/agent-runtime/cli.js` with structured argv (`
|
|
|
143
145
|
|
|
144
146
|
Provider invocation/cancellation supports native macOS processes and Windows executables/npm shims. Actual provider behavior still depends on the installed CLI version and capabilities. The offline tests cover fake CLI/ACP frames, Windows argv rules, a local HTTP coding fixture and real verification subprocesses; live provider smoke tests and Windows CI remain separate validation.
|
|
145
147
|
|
|
148
|
+
## Failure diagnosis (contract 5.8)
|
|
149
|
+
|
|
150
|
+
Core 5.8 adds `failure` to `runtime-result` and `runtime-status` for a run that ended `failed` or `blocked`: `{ kind, phase?, rounds?, resetAt?, detail?, resumablePhase?, confidence }` with `kind` one of `tests_failed`, `provider_limit`, `environment`, `blocked`, `timeout`, `tool_inactivity`, `crash`, `unknown` (see Core's `docs/agent-runtime.md#failure-classification`). The bridge forwards it untouched as `AiStepResult.failure`; the loop run manager hands it, with the loop's own signals (stall reason, provider-limit notice, Core's fixed blocker sentences, `completion.blocker`), to the [recovery module](../../server/modules/recovery/README.md), which validates it and persists the resulting diagnosis in `loop_runs.failure_diagnosis` in the same commit as the outcome. An older Core sends no `failure`: Desktop derives a diagnosis from those signals and otherwise stores `unknown` with low confidence, never a guessed cause. Desktop never reads the capability: an absent field is simply an absent classification.
|
|
151
|
+
|
|
152
|
+
The diagnosis card (client feature [recovery](../../client/src/features/recovery/README.md)) shows it on Job Detail, the mission run card and, as a sentence, the inbox row. Its remedies are the app's existing actions: runtime resume, run again / relaunch, opening the spec (addenda), the host blocker's required action, and the log at the failing step.
|
|
153
|
+
|
|
146
154
|
## Definition catalog compatibility (D0)
|
|
147
155
|
|
|
148
156
|
Desktop accepts optional `engineVersion`, `nodeKindsVersion`, `nodeKinds` and
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"+ Add Project" shows an **Existing | New** pre-screen (`AddProjectDialog`,
|
|
17
17
|
`chooser-existing` / `chooser-new` cards) when both `FEATURE_PROJECT_BUILDER`
|
|
18
18
|
(client) and the parent-wired `onOpenBuilder` callback are present. *Existing*
|
|
19
|
-
continues into the
|
|
19
|
+
continues into the AddProjectDialog register flow (silent background workspace assembly, no wizard); *New* calls
|
|
20
20
|
`AgentChatContext.builderMode.enter()` — the AGENT transforms into the Builder
|
|
21
21
|
(change `reskin-project-builder-into-agent-panel`; the original full-screen
|
|
22
22
|
`ProjectBuilderShell` overlay is deleted). Flags:
|
|
@@ -59,7 +59,12 @@ GET /rails/pr-deliveries/:id/packet
|
|
|
59
59
|
└─ resolveAcceptCapability() git remote + `gh auth token`
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
`agentActions` ("What the agent did") counts the delivery runs' rows in the
|
|
63
|
+
[agent actions audit](agent-actions-audit.md) by kind and lists the runs that
|
|
64
|
+
have rows, each with a JSONL/CSV export. It is `null` when nothing was recorded.
|
|
65
|
+
Unlike the frozen fields above it reads the live log, so retention can shrink it.
|
|
66
|
+
|
|
67
|
+
Apart from `agentActions`, nothing in the read path re-reads a mutable store, spawns a model, or writes.
|
|
63
68
|
Composing the same delivery twice returns an identical document.
|
|
64
69
|
|
|
65
70
|
## Variants
|
|
@@ -138,14 +143,15 @@ older clients drop the whole PR card — and supersession already means "a newer
|
|
|
138
143
|
attempt replaced the previous one". Version lineage, crash-restore and
|
|
139
144
|
one-active-generation-per-rail all come free from the shipped machinery.
|
|
140
145
|
|
|
141
|
-
**The loop.**
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
**The loop.** There is no dedicated Revision loop. `factory:revision` survives
|
|
147
|
+
only as a legacy persisted id: `loop-factory.ts` aliases it to
|
|
148
|
+
`factory:sdd-quick-openspec` (SDD Quick) and it is neither listed nor run as its
|
|
149
|
+
own graph. A revision launch without an explicit workflow (no `loopId` and no
|
|
150
|
+
`mode` in the body) runs SDD Quick; an explicit `loopId`/`mode` takes
|
|
151
|
+
precedence. The revision intent travels as `{{const:REVISION_REQUEST}}`, which
|
|
152
|
+
`rail-isolated-launch.ts` fills from the revision seed and the loop executors
|
|
153
|
+
append to each AI step's prompt, so the run applies the requested change on top
|
|
154
|
+
of the delivered branch instead of re-running Implement from scratch.
|
|
149
155
|
|
|
150
156
|
**Fresh session by contract** (`server/modules/execution/runtime/revision-seed.ts`). The run is seeded from
|
|
151
157
|
durable state — the instruction, the frozen spec, the branch that carries the
|
|
@@ -210,6 +216,69 @@ two surfaces disagree about what the same person had chosen. With
|
|
|
210
216
|
`VITE_FEATURE_NARRATED_PROGRESS=false` both surfaces render byte-identically to
|
|
211
217
|
their pre-change behaviour, with no toggle at all.
|
|
212
218
|
|
|
219
|
+
## Changes tab (in-app diff review)
|
|
220
|
+
|
|
221
|
+
The packet has two tabs, **Overview** (everything above) and **Changes**
|
|
222
|
+
(`?tab=changes`). The Changes tab answers "what did it change, and what did the
|
|
223
|
+
reviewer flag where?" without leaving the app. It is read-only and agent-directed:
|
|
224
|
+
there are no person-to-person threads; human review stays on GitHub.
|
|
225
|
+
|
|
226
|
+
**Server** (`server/modules/delivery/runtime/delivery-changes.ts`, routes in
|
|
227
|
+
`rails-router.ts`, endpoints in the [API reference](api-reference.md)):
|
|
228
|
+
|
|
229
|
+
- Source: the delivery head (settled `delivery_sha`, else the assembled branch;
|
|
230
|
+
per-unit `finalSha`/branch when there is none) against its **merge-base** with
|
|
231
|
+
`base_branch`, so a base that moved on does not leak in. A multi-repository
|
|
232
|
+
delivery resolves the repository's frozen source path like the packet.
|
|
233
|
+
- Git is the hardened, cwd-scoped reader (`gitExecEnv`, `--literal-pathspecs`,
|
|
234
|
+
`--no-ext-diff --no-textconv`), only `diff` / `merge-base` / `rev-parse`. A ref
|
|
235
|
+
from the database that starts with `-` is refused; the file endpoint only
|
|
236
|
+
accepts a path the diff itself lists.
|
|
237
|
+
- The list is `--raw -z` (status, blob ids) joined with `--numstat -z` (counts;
|
|
238
|
+
`-`/`-` = binary). `hash` = old+new blob ids, so it changes exactly when the
|
|
239
|
+
file's diff does. One file is parsed lazily; past 4000 lines it returns a
|
|
240
|
+
capped diff with `truncated` and the client offers "Load full file diff".
|
|
241
|
+
- Annotations (`collectAnnotations`) are read from durable rows only: the
|
|
242
|
+
reviewer's `acceptance.findings`, anchored by **Core contract 5.9**
|
|
243
|
+
`acceptance.findingLocations` (`{ finding, path, line?, endLine? }`, validated
|
|
244
|
+
and re-indexed by `readFindingLocations` in `delivery-evidence.ts`, stored in
|
|
245
|
+
the runtime evidence as `findingLocations`); review-brief risks whose `ref` is a
|
|
246
|
+
bare `path[:line[-end]]` and `untested` files; and the comments of a PR
|
|
247
|
+
follow-up that carry a path/line. Anything without a location keeps
|
|
248
|
+
`location: null`.
|
|
249
|
+
|
|
250
|
+
**Client** (`client/src/features/delivery/components/review-packet/ChangesTab.tsx`,
|
|
251
|
+
model in `lib/changes-model.ts`):
|
|
252
|
+
|
|
253
|
+
- File tree (ARIA `tree`, virtualised) with status letter, `+`/`−` and a viewed
|
|
254
|
+
tick; the diff (unified or split, persisted per viewer) is a virtualised row
|
|
255
|
+
list, one file at a time. Numbers in the gutter are buttons; Shift extends.
|
|
256
|
+
- Annotations render under their line. One that names a file but a line outside
|
|
257
|
+
the displayed hunks pins to the file header; one that names no file of the
|
|
258
|
+
change (or no place at all, e.g. every finding from an older run) is listed
|
|
259
|
+
above the tree. Nothing is dropped.
|
|
260
|
+
- "Ask agent for a change" files a **spec addendum** (`review-feedback`, the
|
|
261
|
+
existing carrier: `POST /tickets/:id/addenda`) containing `path:lines`, the
|
|
262
|
+
selected snippet and the note, then toasts with a link to the spec. It does
|
|
263
|
+
not launch a run; the next run on the spec is briefed with it
|
|
264
|
+
([spec addenda](spec-addenda.md)). "Ask for changes" on the Overview starts one.
|
|
265
|
+
- "Open in editor" builds `vscode://file/<abs>:<line>`, `cursor://file/…` or
|
|
266
|
+
`idea://open?file=…&line=…` (`client/src/lib/open-in-editor.ts`) and hands it to
|
|
267
|
+
the shell opener; the editor is a per-machine preference in Settings ▸ Code
|
|
268
|
+
(default VS Code). The Tauri `shell:allow-open` scope allows those three
|
|
269
|
+
schemes. The file path is the retained worktree when it still exists
|
|
270
|
+
(`rootKind: 'worktree'`), else the project checkout, where the review branch
|
|
271
|
+
may not be checked out.
|
|
272
|
+
- "Viewed" marks live in `localStorage` per viewer, project, delivery and file,
|
|
273
|
+
keyed to the file's `hash`; a changed diff reads as unviewed again ("Changed
|
|
274
|
+
since you viewed it").
|
|
275
|
+
- Keys (not while typing): `j`/`k` files, `n`/`p` annotations, `v` viewed; all in
|
|
276
|
+
the cheatsheet. Annotation cards are focusable.
|
|
277
|
+
|
|
278
|
+
Limits: the diff is the committed state; uncommitted edits are not shown. Past
|
|
279
|
+
2000 files the list is truncated (flagged). Split layout clips very long lines
|
|
280
|
+
instead of scrolling horizontally.
|
|
281
|
+
|
|
213
282
|
## Flags
|
|
214
283
|
|
|
215
284
|
- `SPECRAILS_REVIEW_PACKET=false` → the packet route 404s.
|
|
@@ -231,3 +300,86 @@ Observed: the section rendered the spec's *Proposed Solution* digest as raw mark
|
|
|
231
300
|
Observed: a delivery built by the programmatic agent runtime (core-host) rendered **"The AI did not report any verification"** and **"No reviewer score"** although the host had run `npm test` (exit 0, output persisted) and the reviewer returned a structured verdict (score 92). The harvest only knew the legacy loop channels — the `VERIFICATION:` prose sentinel and `openspec/changes/**/confidence-score.json` — neither of which that runtime produces. Fix (`server/modules/delivery/runtime/delivery-evidence.ts` `readRuntimeEvidence`, wired from `rail-isolated-launch.ts` via the new `EvidenceHarvestUnit.runtimeDir` = `<workspace>/.specrails/pipeline/<runId>`): read `state.json` `verification.commands[]` (+ each `verification/evidence/<id>.json` for exit code, duration, bounded output and `origin`), `acceptance.checks[]` / `acceptance.findings[]`, and the reviewer step output in `agent-workflow/<runId>/checkpoint.json` (`approved`, `score`, `aspects`, `issues`, `summary`). Every field is bounded; a malformed file degrades to nothing.
|
|
232
301
|
|
|
233
302
|
Tier placement (`review-packet.ts` `buildProof`): commands whose `origin` includes `host` are **app-verified** (`proof.hostCommandPassed|Failed` with exit code + seconds + output tail) — the runtime executed them and recorded the exit code, which is a measurement, not a claim; non-host acceptance checks, the reviewer summary and findings are **ai-reported** (`proof.acceptanceCheckPassed|Failed`, `proof.reviewerSummary`, `proof.reviewerFinding`); the structured verdict fills `confidence` (score/aspects/issues→flags) ONLY when no file-based score exists, so the **reviewer-score** tier and the human-review band work unchanged. `proof.noVerificationReported` is emitted only when no channel reported anything. Older deliveries heal lazily: `GET …/packet` runs `healRuntimeEvidence` over units lacking `runtime` and persists the result (`updatePrDeliverySettleEvidence`), so a packet stops claiming silence once the pipeline dir exists. Still never a numeric test-count claim: the "70 passed" line rides inside the labelled raw output, not as a number the app asserts.
|
|
303
|
+
|
|
304
|
+
## 2026-10-22 — "What to look at": the reviewer's risk brief first (review-risk-brief-surfaces)
|
|
305
|
+
|
|
306
|
+
Core contract 5.3 adds an advisory reviewer brief (`reviewBrief: 1` from `runtime api`):
|
|
307
|
+
behaviour changes, invariants touched, untested paths, up to five severity-ordered risks
|
|
308
|
+
(`file:line` refs), human checks and (Phase 3) spec divergences. The approval gate never reads it.
|
|
309
|
+
|
|
310
|
+
- **Gate.** `coreAnnouncesReviewBrief()` (`delivery-evidence.ts`) probes the active Core. Without the
|
|
311
|
+
capability `harvestDeliveryEvidence` never reads a brief and the persisted evidence is
|
|
312
|
+
byte-identical to before; nothing below renders.
|
|
313
|
+
- **Harvest** (`readUnitReviewBrief`, at settle, before worktree release): first
|
|
314
|
+
`<pipeline>/<runId>/review-brief.json` (`{schemaVersion:1, change, approved, score, recordedAt,
|
|
315
|
+
brief|null, diagnostic?}`, engine 1); then the engine 2 committed scopes (`implementation` →
|
|
316
|
+
`review.brief`/`review.briefDiagnostic`, a reviewer `implementation-step`, or the selected reviewer
|
|
317
|
+
role turn) — definition runs do not put it in `runtime-result`; then `confidence-score.json` →
|
|
318
|
+
`brief` (approved verdicts). The record is stored on the unit as `reviewBrief` inside the existing
|
|
319
|
+
`settle_evidence` JSON column, so no migration was needed. Normalization (`review-brief.ts`) is
|
|
320
|
+
tolerant: entries that break the contract are dropped and counted (`droppedEntries`), risks are
|
|
321
|
+
re-sorted high → low and capped at five; an unreadable or unknown-version file becomes a record
|
|
322
|
+
with a `diagnostic` instead of a throw. `healRuntimeEvidence(..., { reviewBrief: true })` fills the
|
|
323
|
+
brief for older or recovered rows when the packet is opened.
|
|
324
|
+
- **Packet.** `whatToLookAt` merges units (each entry keeps its `ticketId`) in a fixed order —
|
|
325
|
+
risks (high first), behaviour changes, invariants touched, untested paths, human checks,
|
|
326
|
+
divergences — plus Core's or Desktop's diagnostics. It is `null` when no unit carries anything to
|
|
327
|
+
show, and the page renders the section (`WhatToLookAt.tsx`) right after the verdict, before the
|
|
328
|
+
measured facts. `riskSummary` (`highCount`/`mediumCount`/`lowCount`/`top`/`diagnostic`) is the
|
|
329
|
+
cheap analytics hook. File refs render as monospace text, not links: the packet links no files
|
|
330
|
+
elsewhere and the Code explorer shows the base checkout, not the delivery branch.
|
|
331
|
+
- **Cards.** `toPrDeliverySnapshot` derives `riskSummary` from `settle_evidence` (only when a brief
|
|
332
|
+
exists) and carries it on `rail.pr_state` and the mission card envelope; `TopRiskLine` shows the
|
|
333
|
+
severity chip and the top risk on the mission card and the dashboard strip.
|
|
334
|
+
- **Honesty.** The brief is AI-reported advice, labelled as such; it adds no numeric verification
|
|
335
|
+
claim and no decision depends on it.
|
|
336
|
+
|
|
337
|
+
## 2026-10-22 — Derivation (Flow → Spec)
|
|
338
|
+
|
|
339
|
+
A delivery of the `factory:flow-spec` loop ([Flow mode](flow-mode.md)) carries
|
|
340
|
+
`packet.derivation`, rendered as the **Derivation** card before "What to watch
|
|
341
|
+
out for". Source: the `derive-change` scope of Core's `runtime status`
|
|
342
|
+
(`output.derivation`; when only `output.derivationPath` is present the harvest
|
|
343
|
+
reads that `derivation.json`, ≤ 512 KB), projected by
|
|
344
|
+
`projectDefinitionRuntimeEvidence` into `settle_evidence.units[].runtime.derivation`
|
|
345
|
+
(`parseDerivation`: counts clamped, unexplained list capped at 200 with the
|
|
346
|
+
remainder in `unexplainedOmitted`). The latest derive attempt wins, so a
|
|
347
|
+
repaired derivation supersedes the rejected one.
|
|
348
|
+
|
|
349
|
+
- Coverage (`explained/files`) and the unexplained file list are Core's own
|
|
350
|
+
measurement from git: app-verified.
|
|
351
|
+
- The deriver's `confidence` is AI-reported and labelled as such.
|
|
352
|
+
- `{ status: 'unavailable' }` for a Flow → Spec delivery whose report could
|
|
353
|
+
not be read; `null` for every other loop.
|
|
354
|
+
- `packet.flowSettlement` (`specRewrite`, `jiraCreate`, `jiraReview`) comes from
|
|
355
|
+
the Flow module's `flow_effects` rows; a `failed` spec rewrite shows a note
|
|
356
|
+
that the spec kept its Flow draft.
|
|
357
|
+
|
|
358
|
+
The draft PR body adds one line (`buildDerivationLine`):
|
|
359
|
+
`> Derived from a Flow session: OpenSpec change \`x\`, N/M changed files explained by its design (K unexplained — see the review packet).`
|
|
360
|
+
|
|
361
|
+
## 2026-10-22 — Requirements demonstrated, baseline and "Needs human eyes"
|
|
362
|
+
|
|
363
|
+
Three advisory sections, each gated on a Core capability and absent (`null`)
|
|
364
|
+
otherwise, so older packets read exactly as before. They render after "What to
|
|
365
|
+
look at"; none ever gates a decision. Source and rules in
|
|
366
|
+
[existing-project anchoring](existing-project-anchoring.md).
|
|
367
|
+
|
|
368
|
+
- **Needs human eyes** (`packet.needsHumanEyes`, Core `rulesInventory: 1`): the
|
|
369
|
+
project's `humanOnly` rules from `.specrails/rules.json`, frozen into
|
|
370
|
+
`settle_evidence.humanRules` when the delivery settles.
|
|
371
|
+
- **Requirements demonstrated X/Y** (`packet.requirementsDemonstrated`, Core
|
|
372
|
+
`specTrace: 1`): `settle_evidence.units[].specTrace` (Core's
|
|
373
|
+
`spec-trace.json`) merged across units. Lists undemonstrated requirements
|
|
374
|
+
first (the ones this change touches are flagged), then demonstrated ones with
|
|
375
|
+
their first tagged test, then tags that match no requirement. App-verified:
|
|
376
|
+
Core crossed test tags with the verification receipt; a trace without a
|
|
377
|
+
receipt says so.
|
|
378
|
+
- **Spec created where the work passed** (`packet.baseline`, Core
|
|
379
|
+
`baselineOnTouch: 1`): one entry per unit whose run planned a baseline
|
|
380
|
+
(`baseline.json`): status (`planned`, `passed`, `failed`, `violated`), the
|
|
381
|
+
module described, the as-built requirements per capability with how many are
|
|
382
|
+
demonstrated, Core's reason when it blocked, and the baseline's own cost.
|
|
383
|
+
The cost line in the header adds "baseline $X of it" when every baseline
|
|
384
|
+
reported a cost.
|
|
385
|
+
|
|
@@ -104,11 +104,98 @@ them to the backlog. Existing-PR no-change cards only dismiss their borrowed fol
|
|
|
104
104
|
**`merge-local` (remote-less acceptance).** Legal only without a real PR. Both surfaces confirm
|
|
105
105
|
because it advances the local integration branch. Exact delivered commits are first assembled away
|
|
106
106
|
from the user's checkout; only a complete conflict-free result may advance the still-at-the-original-
|
|
107
|
-
HEAD integration branch. Compatible staged, unstaged, untracked and ignored local files survive
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
HEAD integration branch. Compatible staged, unstaged, untracked and ignored local files survive.
|
|
108
|
+
If the user is on another branch or detached HEAD, a temporary checkout claims the base without
|
|
109
|
+
switching the user's checkout. A base already held by another worktree remains untouched and
|
|
110
|
+
reports `integration_branch_busy`. Both temporary checkouts use non-force cleanup, including after a
|
|
111
|
+
Git runner exception.
|
|
112
|
+
|
|
113
|
+
**Uncommitted work that overlaps the delivery (proactive local integration,
|
|
114
|
+
[local-stash.ts](../../server/modules/delivery/runtime/local-stash.ts),
|
|
115
|
+
[local-changes.ts](../../server/modules/delivery/adapters/decisions/local-changes.ts)).** Still under
|
|
116
|
+
the repository lock and the decision lease, after the isolated assembly and before the fast-forward:
|
|
117
|
+
|
|
118
|
+
1. The checkout's dirty paths (`git status -z --untracked-files=all`, never ignored, minus
|
|
119
|
+
`PR_NEVER_STAGE_PATHSPEC_ROOTS`) are compared with `git diff --name-only <head> <assembled>`
|
|
120
|
+
(exact, nested and case-folded). No overlap ⇒ today's behaviour: Git's non-forced fast-forward
|
|
121
|
+
keeps the work in place. Overlap (or a fast-forward refused for local changes) ⇒
|
|
122
|
+
`git stash push --include-untracked -m "specrails: before integrating #<ids> (<deliveryId>)"`
|
|
123
|
+
with the same exclusions. The entry is proven by `refs/stash` moving to a commit whose subject
|
|
124
|
+
carries the delivery id, and recorded by **commit sha** in `rail_pr_deliveries.local_stash`
|
|
125
|
+
(migration 83, `LocalStashRecord`) *before* the branch moves. That write is lease-independent
|
|
126
|
+
(`setPrDeliveryLocalStash`), like a safety archive. Ignored files are never stashed, so an ignored
|
|
127
|
+
collision still returns `merge_local_blocked` / `dirty`.
|
|
128
|
+
2. The fast-forward runs exactly as before. If it fails, the branch did not move and the stash is
|
|
129
|
+
applied straight back.
|
|
130
|
+
3. After the verified advance, `git stash apply <sha>` (never `pop`). A clean apply drops the entry
|
|
131
|
+
located by sha (`stash@{n}` is resolved at that moment, never stored) ⇒ `restored`. If the apply
|
|
132
|
+
conflicts or refuses, only the stash's own paths (index, worktree and untracked trees) that were
|
|
133
|
+
clean right before the apply are put back to `HEAD`. Other files, including newer edits, are not
|
|
134
|
+
touched, and the stash is **kept** ⇒ `needs_attention`, `restoreBranch =
|
|
135
|
+
specrails/restore-local-<sha8>`, the terminal transition stays `merged` / `delivered` with
|
|
136
|
+
`status_code = local_changes_attention`.
|
|
137
|
+
**Specrails-managed generated files** (`isSpecrailsManagedPath`: the OpenSpec skills/commands
|
|
138
|
+
that setup's `openspec init` writes and `openspec init/update` regenerates for every tool dir —
|
|
139
|
+
`<.tool>/skills/openspec-*/**`, `<.tool>/{commands,prompts,workflows}/opsx…`) are not the
|
|
140
|
+
person's work. They are still stashed (a fast-forward refuses any dirty tracked file), but when
|
|
141
|
+
*every* conflict is managed the apply is settled in place — those paths take the integrated
|
|
142
|
+
(delivered) version, the rest stays applied, the stash is dropped ⇒ `restored`. This was the
|
|
143
|
+
real-use trigger: 20 `.claude|.codex/skills/openspec-*/SKILL.md` regenerated on both sides.
|
|
144
|
+
Managed paths are not excluded from the overlap/stash (excluding them would make Git refuse the
|
|
145
|
+
fast-forward) and partial-file managed blocks (e.g. an instruction-file block) are not covered.
|
|
146
|
+
3b. **Server-side restoration of a conflicting stash**
|
|
147
|
+
([local-restore-branch.ts](../../server/modules/delivery/runtime/local-restore-branch.ts)).
|
|
148
|
+
Mission agents run read-only, so they are never asked to write: the origin mission gets one
|
|
149
|
+
*report-only* automatic turn (`local-changes:<deliveryId>` turn key — what happened, that
|
|
150
|
+
Specrails is restoring on the branch, no git/shell instructions). Specrails itself then, in the
|
|
151
|
+
background (`startLocalRestoreBranch`, tracked by `waitForLocalRestores`):
|
|
152
|
+
- under the repository lock, `createWorktree` cuts `specrails/restore-local-<sha8>` from the
|
|
153
|
+
integrated target into `<worktrees root>/restore-local-<sha8>/` and runs
|
|
154
|
+
`git stash apply <sha>` there. An untracked-vs-now-tracked collision (which makes the apply
|
|
155
|
+
refuse) is set aside, applied, then written back as a two-sided conflict block; managed files
|
|
156
|
+
take the integrated version. An existing branch of that name is never borrowed (`failed`).
|
|
157
|
+
- no conflict left ⇒ committed at once ("Restore local changes from before integrating #N"),
|
|
158
|
+
`restore.status = ready`, `resolvedBy = clean`. The worktree apply is onto the same tree as
|
|
159
|
+
the checkout, so this mainly happens for identical untracked collisions and managed files.
|
|
160
|
+
- otherwise `resolving`: the write-capable resolver runs **outside the lock, confined to that
|
|
161
|
+
worktree** (cwd/repoDir = the worktree). Default
|
|
162
|
+
([local-restore-resolver.ts](../../server/modules/delivery/runtime/local-restore-resolver.ts))
|
|
163
|
+
is the same AI merge-resolver the parallel merge-back uses (`{{cmd:resolve-merge}}` +
|
|
164
|
+
MERGE_SAFE, headless rail-job spawn) with a keep-both-intents, nothing-destructive prompt;
|
|
165
|
+
tests inject `localRestoreResolver`. Specrails then verifies (still on the branch, descends
|
|
166
|
+
from the target, no marker/unmerged path), stages and commits ⇒ `ready` / `resolvedBy =
|
|
167
|
+
resolver`, else `failed` with `detail` and the remaining paths. A newer state (discard,
|
|
168
|
+
restart) always wins over a late resolver result.
|
|
169
|
+
- `ready` carries `files` (numstat vs the base) for review. Nothing touches the target branch
|
|
170
|
+
and the stash is kept until the person clicks:
|
|
171
|
+
`POST /rails/pr-local-changes/bring-back` (target checked out, branch tip unchanged, no
|
|
172
|
+
overlapping uncommitted edits; a moved target is merged *into* the restore branch first, in
|
|
173
|
+
its worktree, aborted on conflict; then `git merge --ff-only`; only then the stash is dropped
|
|
174
|
+
and the worktree/branch removed ⇒ `restored`, `brought_back`) or
|
|
175
|
+
`POST /rails/pr-local-changes/discard-branch` (force-removes the worktree/branch, the stash is
|
|
176
|
+
**kept**; refused while `resolving`).
|
|
177
|
+
4. `POST /rails/pr-local-changes/restore` ("Restore my changes") re-attempts the apply under the
|
|
178
|
+
repository lock and refuses while any decision lease is held (`operation_in_progress`). Still
|
|
179
|
+
conflicting ⇒ step 3b (idempotent while a branch is `resolving`/`ready`; a `failed` one is
|
|
180
|
+
removed and retried). A wrong
|
|
181
|
+
branch or re-dirtied stash paths answer `409 local_restore_blocked` without touching anything.
|
|
182
|
+
An already-applied stash (crash between apply and drop) is only dropped; a stash the person
|
|
183
|
+
dropped is `released`. Leaving the held states moves `local_changes_attention` back to
|
|
184
|
+
`merged` / `cleanup_incomplete`.
|
|
185
|
+
5. Startup recovery (`recoverLocalStashes`, after ticket-effect replay, before admission opens)
|
|
186
|
+
re-applies every `saved` record while the same branch is checked out. It first adopts a
|
|
187
|
+
Specrails stash whose record never landed (crash right after `git stash push`) from its
|
|
188
|
+
message. Conflicts follow step 3/3b. A resolver interrupted by the restart is settled `failed`
|
|
189
|
+
(its worktree kept for Discard / retry); a `needs_attention` record without a restore branch
|
|
190
|
+
(recorded before 3b existed) starts one.
|
|
191
|
+
|
|
192
|
+
Response bodies carry `localChanges { state, stashName, stashSha, restoreBranch, conflictPaths,
|
|
193
|
+
restore? }`; snapshots/cards carry `localStash` (with `restore`, no filesystem path). The mission card
|
|
194
|
+
renders `LocalStashNotice`: note, conflicting files, Restore, copyable stash name, and per restore
|
|
195
|
+
status — resolving (spinner), ready (restored files with +/−, managed-files note, **Bring them back
|
|
196
|
+
to <branch>**, **Discard the restored branch**), failed (detail, Discard, Restore again). The dashboard strip
|
|
197
|
+
closes on `merged`, so it only shows the toast. Multi-repo children record the stash on the child
|
|
198
|
+
row; the group card does not surface it yet.
|
|
112
199
|
|
|
113
200
|
## Launch and recovery wiring (`server/modules/delivery/runtime/rail-isolated-launch.ts`)
|
|
114
201
|
|
|
@@ -380,7 +467,8 @@ attached and ready for Verify so that explicit decision can commit terminal tick
|
|
|
380
467
|
reopening the stale attachment. A valid reopen returns to draft or ready according to GitHub;
|
|
381
468
|
an exact merge racing the action terminalizes, while an exact still-closed result reports failure.
|
|
382
469
|
- **merge-local** — builds the complete merge in an isolated temporary checkout and advances the
|
|
383
|
-
revalidated base only after all branches succeed, preserving compatible local work
|
|
470
|
+
revalidated base only after all branches succeed, preserving compatible local work (overlapping
|
|
471
|
+
uncommitted work is stashed by sha, re-applied, and kept on conflict; see above). A missing
|
|
384
472
|
immutable delivery object never falls back to a branch that may have moved.
|
|
385
473
|
|
|
386
474
|
Terminal discard/merge/completion inserts `rail_pr_ticket_effects` in the same SQLite transaction
|
|
@@ -400,6 +488,8 @@ Conventional, open-source-style naming for everything the user sees on GitHub. A
|
|
|
400
488
|
logic in `server/modules/delivery/runtime/pr-naming.ts` (branches + titles) and `server/modules/delivery/runtime/pr-body.ts` (canonical body +
|
|
401
489
|
diff collection), fully unit-tested.
|
|
402
490
|
|
|
491
|
+
- **Flow → Spec deliveries** add one derivation line to the body (coverage of the derived
|
|
492
|
+
OpenSpec change, from the settle evidence; see [review packet](review-packet.md)).
|
|
403
493
|
- **`<ref>`** — the ticket's Jira key when Jira-linked, else the local ticket number. **JIRA
|
|
404
494
|
ALWAYS PREVAILS**, resolved per ticket at naming/body time with no HTTP: the authoritative
|
|
405
495
|
`jira_links` row (`getLinkByLocalId`, tombstoned links ignored) wins over the ticket's
|
|
@@ -436,6 +526,14 @@ diff collection), fully unit-tested.
|
|
|
436
526
|
fails — diff problems can only degrade the body, NEVER block PR creation. The v1
|
|
437
527
|
`buildBatchPrBody` and its "_Draft PR produced by specrails — the engineer owns the merge._"
|
|
438
528
|
footer are gone.
|
|
529
|
+
- **Reviewer risk brief in the PR body** (review-risk-brief-surfaces) — when the delivery's
|
|
530
|
+
`settle_evidence` carries the reviewer brief (Core `reviewBrief: 1`), `create.ts` merges the
|
|
531
|
+
units' briefs (`buildWhatToLookAt`) and `buildReviewBriefBlock` adds a short `## What to look at`
|
|
532
|
+
block right under the summary paragraph: high and medium risks (severity, area, text, `file:line`),
|
|
533
|
+
untested paths and human checks as an unchecked task list, under an "advisory, not a verification
|
|
534
|
+
result" line. Low risks, behaviour changes and invariants stay in the review packet. No brief
|
|
535
|
+
(older Core, no reviewer verdict) or nothing to list ⇒ no block, so the body is byte-identical
|
|
536
|
+
to before. The cost footer stays last. The brief never feeds a decision or the approval gate.
|
|
439
537
|
|
|
440
538
|
## The sync contract (two surfaces, zero desync)
|
|
441
539
|
|
|
@@ -507,6 +605,32 @@ is superseded atomically and run on that PR head. A stale
|
|
|
507
605
|
concurrent request receives 409 before it can allocate or claim anything. Legacy / non-isolated
|
|
508
606
|
launches are unaffected.
|
|
509
607
|
|
|
608
|
+
## Review WIP limit
|
|
609
|
+
|
|
610
|
+
The project setting `reviewWipLimit` (null = no limit) caps how many deliveries wait for review.
|
|
611
|
+
`server/modules/delivery/domain/review-wip.ts` counts top-level rows in `building`, `on_review`,
|
|
612
|
+
`pr_draft` or `pr_ready`. `building` counts because it lands on review when it settles, and only
|
|
613
|
+
counting it keeps the cap exact under Launch all. Per-repository children, `no_changes`,
|
|
614
|
+
`implementation_failed`, `pr_failed`, `pr_closed` and terminal rows do not count.
|
|
615
|
+
|
|
616
|
+
`runtime/review-wip-gate.ts` is bound per project as `ProjectContext.reviewWipGate`. The launch
|
|
617
|
+
route checks it right after the daily budget gate, before relaunch restoration, worktree allocation
|
|
618
|
+
or any spawn. A new delivery at the limit gets
|
|
619
|
+
**409 `{ error: 'review_wip_limit_reached', limit, pending: [{ deliveryId, railIndex, ticketIds, since }], detail, action }`**.
|
|
620
|
+
An admitted launch holds an in-memory reservation for its rail until the response finishes (the
|
|
621
|
+
delivery row then exists), so parallel launches cannot overshoot.
|
|
622
|
+
|
|
623
|
+
Continuations add no review work and are exempt (`launchAddsReviewWip`): `revisionOfDeliveryId`,
|
|
624
|
+
Relaunch of a recorded delivery, `targetPrNumber`/`followUp`, and any launch on a rail that still owns an
|
|
625
|
+
active delivery. The relaunch guard above only lets the last case through as that delivery's
|
|
626
|
+
continuation; anything else gets `pr_decision_pending`. `since` is the delivery's `created_at`.
|
|
627
|
+
|
|
628
|
+
Surfaces: the rails header badge "In review N/L" lists the pending deliveries. At the limit, Play is
|
|
629
|
+
disabled with a tooltip on rails that would open a new delivery. Launch all starts at most the
|
|
630
|
+
remaining capacity in board order and its dialog names the held rails. MCP `launch_all` reports
|
|
631
|
+
`review-wip-limit` skips and mobile relays the 409 unchanged. The mission operator prompt explains
|
|
632
|
+
the refusal.
|
|
633
|
+
|
|
510
634
|
## Explicit target PR (deliver-rail-into-existing-pr)
|
|
511
635
|
|
|
512
636
|
The launch body accepts an optional `targetPrNumber` — the user's explicit designation of an
|
|
@@ -618,6 +742,11 @@ kill-switch-off legacy path. The `needs_review`-clearing and failure-revert bran
|
|
|
618
742
|
cost/duration); `onRailDiscard(ticketIds, refId)` (configured `discardStatus`, else logical
|
|
619
743
|
todo).
|
|
620
744
|
|
|
745
|
+
- Flow specs (`metadata.flow` still `active`/`paused` at settle) are excluded
|
|
746
|
+
from the settle-time `onRailReview`: their Flow settlement creates the issue
|
|
747
|
+
(`enqueuePromote`, key `flow:<flowId>:create`) and only then transitions it
|
|
748
|
+
with `onRailReview([ticketId], deliveryId)`. See [Flow mode](flow-mode.md#settlement).
|
|
749
|
+
|
|
621
750
|
## Origin link (as-built)
|
|
622
751
|
|
|
623
752
|
Persisted end state: `rail_pr_deliveries.origin_surface` + `origin_conversation_id`, written at
|