synlynk 0.27.5__tar.gz

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.
Files changed (780) hide show
  1. synlynk-0.27.5/LICENSE +21 -0
  2. synlynk-0.27.5/PKG-INFO +179 -0
  3. synlynk-0.27.5/README.md +148 -0
  4. synlynk-0.27.5/VERSION +1 -0
  5. synlynk-0.27.5/pyproject.toml +54 -0
  6. synlynk-0.27.5/setup.cfg +4 -0
  7. synlynk-0.27.5/synlynk/__init__.py +3672 -0
  8. synlynk-0.27.5/synlynk/__main__.py +4 -0
  9. synlynk-0.27.5/synlynk/_constants.py +374 -0
  10. synlynk-0.27.5/synlynk/_fast_cli.py +56 -0
  11. synlynk-0.27.5/synlynk/_lazy.py +15 -0
  12. synlynk-0.27.5/synlynk/addon.py +26 -0
  13. synlynk-0.27.5/synlynk/advisory.py +131 -0
  14. synlynk-0.27.5/synlynk/agent_cli.py +365 -0
  15. synlynk-0.27.5/synlynk/agent_store.py +421 -0
  16. synlynk-0.27.5/synlynk/approval_gate.py +41 -0
  17. synlynk-0.27.5/synlynk/attribution.py +232 -0
  18. synlynk-0.27.5/synlynk/autonomy.py +71 -0
  19. synlynk-0.27.5/synlynk/backlog.py +1007 -0
  20. synlynk-0.27.5/synlynk/backlog_extractor.py +126 -0
  21. synlynk-0.27.5/synlynk/backup.py +325 -0
  22. synlynk-0.27.5/synlynk/baseline.py +179 -0
  23. synlynk-0.27.5/synlynk/board.py +344 -0
  24. synlynk-0.27.5/synlynk/board_governance.py +214 -0
  25. synlynk-0.27.5/synlynk/brief.py +67 -0
  26. synlynk-0.27.5/synlynk/canon.py +230 -0
  27. synlynk-0.27.5/synlynk/capability.py +258 -0
  28. synlynk-0.27.5/synlynk/capability_backfill.py +196 -0
  29. synlynk-0.27.5/synlynk/capability_baseline.json +38 -0
  30. synlynk-0.27.5/synlynk/capability_classifier.py +72 -0
  31. synlynk-0.27.5/synlynk/capability_pack.py +173 -0
  32. synlynk-0.27.5/synlynk/capability_probe.py +339 -0
  33. synlynk-0.27.5/synlynk/capability_report.py +336 -0
  34. synlynk-0.27.5/synlynk/capability_roles.py +19 -0
  35. synlynk-0.27.5/synlynk/capability_sweep.py +694 -0
  36. synlynk-0.27.5/synlynk/capability_watch.py +368 -0
  37. synlynk-0.27.5/synlynk/capability_window.py +250 -0
  38. synlynk-0.27.5/synlynk/charter_injection.py +114 -0
  39. synlynk-0.27.5/synlynk/charter_schema.py +207 -0
  40. synlynk-0.27.5/synlynk/charters.py +664 -0
  41. synlynk-0.27.5/synlynk/ci_paths.py +47 -0
  42. synlynk-0.27.5/synlynk/circuit_breaker.py +332 -0
  43. synlynk-0.27.5/synlynk/cli.py +3991 -0
  44. synlynk-0.27.5/synlynk/coldstart.py +788 -0
  45. synlynk-0.27.5/synlynk/completion_tracker.py +127 -0
  46. synlynk-0.27.5/synlynk/concierge.py +33 -0
  47. synlynk-0.27.5/synlynk/config_schema.py +105 -0
  48. synlynk-0.27.5/synlynk/connectors.py +109 -0
  49. synlynk-0.27.5/synlynk/container_exec.py +199 -0
  50. synlynk-0.27.5/synlynk/context.py +625 -0
  51. synlynk-0.27.5/synlynk/context_compaction.py +189 -0
  52. synlynk-0.27.5/synlynk/context_validator.py +30 -0
  53. synlynk-0.27.5/synlynk/cost_audit.py +1071 -0
  54. synlynk-0.27.5/synlynk/costs.py +1447 -0
  55. synlynk-0.27.5/synlynk/daemon.py +1902 -0
  56. synlynk-0.27.5/synlynk/db.py +5700 -0
  57. synlynk-0.27.5/synlynk/db_schema.py +642 -0
  58. synlynk-0.27.5/synlynk/discovery.py +120 -0
  59. synlynk-0.27.5/synlynk/discovery_semantic.py +11 -0
  60. synlynk-0.27.5/synlynk/dispatch.py +6199 -0
  61. synlynk-0.27.5/synlynk/dispatch_pipeline.py +128 -0
  62. synlynk-0.27.5/synlynk/doctor.py +1947 -0
  63. synlynk-0.27.5/synlynk/events.py +527 -0
  64. synlynk-0.27.5/synlynk/examples.py +13 -0
  65. synlynk-0.27.5/synlynk/fencing.py +55 -0
  66. synlynk-0.27.5/synlynk/first_win.py +36 -0
  67. synlynk-0.27.5/synlynk/first_win_loop.py +73 -0
  68. synlynk-0.27.5/synlynk/fleet.py +667 -0
  69. synlynk-0.27.5/synlynk/fleet_templates.py +112 -0
  70. synlynk-0.27.5/synlynk/gap_scanner.py +59 -0
  71. synlynk-0.27.5/synlynk/gateway.py +162 -0
  72. synlynk-0.27.5/synlynk/gc_cmd.py +144 -0
  73. synlynk-0.27.5/synlynk/gh_role.py +67 -0
  74. synlynk-0.27.5/synlynk/gh_shim.py +211 -0
  75. synlynk-0.27.5/synlynk/gh_sync.py +389 -0
  76. synlynk-0.27.5/synlynk/gh_sync_backfill.py +71 -0
  77. synlynk-0.27.5/synlynk/gh_sync_cli.py +51 -0
  78. synlynk-0.27.5/synlynk/gh_verify.py +579 -0
  79. synlynk-0.27.5/synlynk/git_ref_lock.py +39 -0
  80. synlynk-0.27.5/synlynk/github_app_auth.py +317 -0
  81. synlynk-0.27.5/synlynk/github_repo.py +17 -0
  82. synlynk-0.27.5/synlynk/goal_synthesizer.py +240 -0
  83. synlynk-0.27.5/synlynk/governs_cli.py +403 -0
  84. synlynk-0.27.5/synlynk/governs_compressed.py +87 -0
  85. synlynk-0.27.5/synlynk/governs_engine.py +261 -0
  86. synlynk-0.27.5/synlynk/governs_fsm.py +140 -0
  87. synlynk-0.27.5/synlynk/governs_gate.py +191 -0
  88. synlynk-0.27.5/synlynk/governs_resolver.py +72 -0
  89. synlynk-0.27.5/synlynk/graph_cache.py +278 -0
  90. synlynk-0.27.5/synlynk/greenfield_blueprints.py +214 -0
  91. synlynk-0.27.5/synlynk/handover.py +217 -0
  92. synlynk-0.27.5/synlynk/harness_adapters/__init__.py +1 -0
  93. synlynk-0.27.5/synlynk/harness_adapters/agy.py +45 -0
  94. synlynk-0.27.5/synlynk/harness_adapters/base.py +54 -0
  95. synlynk-0.27.5/synlynk/harness_adapters/claude.py +42 -0
  96. synlynk-0.27.5/synlynk/harness_adapters/codex.py +66 -0
  97. synlynk-0.27.5/synlynk/harness_adapters/generic_api.py +71 -0
  98. synlynk-0.27.5/synlynk/harness_adapters/grok.py +56 -0
  99. synlynk-0.27.5/synlynk/harness_adapters/local.py +69 -0
  100. synlynk-0.27.5/synlynk/harness_adapters/muse.py +65 -0
  101. synlynk-0.27.5/synlynk/harness_adapters/registry.py +31 -0
  102. synlynk-0.27.5/synlynk/harness_adapters/request.py +37 -0
  103. synlynk-0.27.5/synlynk/heal.py +383 -0
  104. synlynk-0.27.5/synlynk/heal_cycles.py +183 -0
  105. synlynk-0.27.5/synlynk/heal_orphans.py +127 -0
  106. synlynk-0.27.5/synlynk/hud.py +474 -0
  107. synlynk-0.27.5/synlynk/identity_roles.py +52 -0
  108. synlynk-0.27.5/synlynk/impact.py +325 -0
  109. synlynk-0.27.5/synlynk/install.py +43 -0
  110. synlynk-0.27.5/synlynk/install_manifest.py +83 -0
  111. synlynk-0.27.5/synlynk/instructions.py +1276 -0
  112. synlynk-0.27.5/synlynk/jev.py +100 -0
  113. synlynk-0.27.5/synlynk/job_status_projection.py +362 -0
  114. synlynk-0.27.5/synlynk/job_truth.py +655 -0
  115. synlynk-0.27.5/synlynk/jobs.py +6843 -0
  116. synlynk-0.27.5/synlynk/launch.py +190 -0
  117. synlynk-0.27.5/synlynk/launch_dag.py +485 -0
  118. synlynk-0.27.5/synlynk/launch_templates.py +353 -0
  119. synlynk-0.27.5/synlynk/lifecycle.py +194 -0
  120. synlynk-0.27.5/synlynk/lineage.py +238 -0
  121. synlynk-0.27.5/synlynk/local_agent.py +859 -0
  122. synlynk-0.27.5/synlynk/local_agent_seed.py +55 -0
  123. synlynk-0.27.5/synlynk/local_http_auth.py +107 -0
  124. synlynk-0.27.5/synlynk/local_pilot.py +409 -0
  125. synlynk-0.27.5/synlynk/local_pilot_ledger.py +574 -0
  126. synlynk-0.27.5/synlynk/local_pilot_runner.py +361 -0
  127. synlynk-0.27.5/synlynk/logs.py +116 -0
  128. synlynk-0.27.5/synlynk/maintainer.py +235 -0
  129. synlynk-0.27.5/synlynk/marketing.py +592 -0
  130. synlynk-0.27.5/synlynk/media.py +207 -0
  131. synlynk-0.27.5/synlynk/merge_class.py +35 -0
  132. synlynk-0.27.5/synlynk/merge_oracle.py +90 -0
  133. synlynk-0.27.5/synlynk/mesh.py +579 -0
  134. synlynk-0.27.5/synlynk/migrations/__init__.py +16 -0
  135. synlynk-0.27.5/synlynk/migrations/m0016_cost_entries_pr_number.py +25 -0
  136. synlynk-0.27.5/synlynk/migrations/m0017_daemon_job_purpose.py +33 -0
  137. synlynk-0.27.5/synlynk/migrations/m0018_job_provenance_attestations.py +39 -0
  138. synlynk-0.27.5/synlynk/migrations/m0019_policy_gate_events.py +25 -0
  139. synlynk-0.27.5/synlynk/migrations/m0020_quota_snapshots.py +27 -0
  140. synlynk-0.27.5/synlynk/migrations/m0021_harness_model_catalog.py +82 -0
  141. synlynk-0.27.5/synlynk/migrations/m0022_subscriptions_harness_name.py +37 -0
  142. synlynk-0.27.5/synlynk/migrations/m0023_cleanse_execution_log_models.py +45 -0
  143. synlynk-0.27.5/synlynk/migrations/m0024_local_pilot_ledger.py +119 -0
  144. synlynk-0.27.5/synlynk/migrations/m0025_local_pilot_review_selection.py +20 -0
  145. synlynk-0.27.5/synlynk/migrations/m0026_local_pilot_resume_authorization.py +59 -0
  146. synlynk-0.27.5/synlynk/migrations/m0027_local_pilot_resume_lifecycle_serialization.py +32 -0
  147. synlynk-0.27.5/synlynk/migrations/m0028_deprecate_execution_log_models.py +39 -0
  148. synlynk-0.27.5/synlynk/migrations/m0029_roadmap_arcs_milestone_eligibility.py +69 -0
  149. synlynk-0.27.5/synlynk/migrations/m0030_github_sync_map.py +31 -0
  150. synlynk-0.27.5/synlynk/migrations/m0031_quota_burn_rate_weights.py +21 -0
  151. synlynk-0.27.5/synlynk/migrations/runner.py +75 -0
  152. synlynk-0.27.5/synlynk/models.py +1131 -0
  153. synlynk-0.27.5/synlynk/multirepo_graph.py +145 -0
  154. synlynk-0.27.5/synlynk/notifiers/__init__.py +0 -0
  155. synlynk-0.27.5/synlynk/notifiers/slack.py +48 -0
  156. synlynk-0.27.5/synlynk/observatory.py +337 -0
  157. synlynk-0.27.5/synlynk/onboarding_state.py +188 -0
  158. synlynk-0.27.5/synlynk/pack.py +305 -0
  159. synlynk-0.27.5/synlynk/packs/agency.yaml +1 -0
  160. synlynk-0.27.5/synlynk/packs/software-product.yaml +1 -0
  161. synlynk-0.27.5/synlynk/packs/studio.yaml +1 -0
  162. synlynk-0.27.5/synlynk/parity.py +532 -0
  163. synlynk-0.27.5/synlynk/platform_ops.py +1013 -0
  164. synlynk-0.27.5/synlynk/platform_status.py +191 -0
  165. synlynk-0.27.5/synlynk/pm_agent.py +288 -0
  166. synlynk-0.27.5/synlynk/policy.py +379 -0
  167. synlynk-0.27.5/synlynk/policy_cli.py +88 -0
  168. synlynk-0.27.5/synlynk/policy_gates.py +111 -0
  169. synlynk-0.27.5/synlynk/pr_check.py +75 -0
  170. synlynk-0.27.5/synlynk/pr_multiplier.py +144 -0
  171. synlynk-0.27.5/synlynk/pr_rebase.py +68 -0
  172. synlynk-0.27.5/synlynk/preflight.py +225 -0
  173. synlynk-0.27.5/synlynk/probe.py +1869 -0
  174. synlynk-0.27.5/synlynk/probe_binding.py +182 -0
  175. synlynk-0.27.5/synlynk/process_lifecycle.py +326 -0
  176. synlynk-0.27.5/synlynk/product_store.py +322 -0
  177. synlynk-0.27.5/synlynk/provenance.py +198 -0
  178. synlynk-0.27.5/synlynk/py.typed +0 -0
  179. synlynk-0.27.5/synlynk/pytest_shim.py +63 -0
  180. synlynk-0.27.5/synlynk/qa_gate.py +151 -0
  181. synlynk-0.27.5/synlynk/quota.py +1182 -0
  182. synlynk-0.27.5/synlynk/quota_capture.py +676 -0
  183. synlynk-0.27.5/synlynk/readiness.py +481 -0
  184. synlynk-0.27.5/synlynk/rebase.py +452 -0
  185. synlynk-0.27.5/synlynk/regen_guard.py +90 -0
  186. synlynk-0.27.5/synlynk/registry.py +47 -0
  187. synlynk-0.27.5/synlynk/relay.py +402 -0
  188. synlynk-0.27.5/synlynk/relay_hub.py +1190 -0
  189. synlynk-0.27.5/synlynk/release_authority.py +133 -0
  190. synlynk-0.27.5/synlynk/release_marketing.py +460 -0
  191. synlynk-0.27.5/synlynk/release_readme.py +600 -0
  192. synlynk-0.27.5/synlynk/release_signals.py +168 -0
  193. synlynk-0.27.5/synlynk/repo_classifier.py +111 -0
  194. synlynk-0.27.5/synlynk/rollback.py +327 -0
  195. synlynk-0.27.5/synlynk/runners/__init__.py +6 -0
  196. synlynk-0.27.5/synlynk/runners/base.py +24 -0
  197. synlynk-0.27.5/synlynk/runners/fly.py +69 -0
  198. synlynk-0.27.5/synlynk/runners/local.py +74 -0
  199. synlynk-0.27.5/synlynk/runners/manager.py +91 -0
  200. synlynk-0.27.5/synlynk/runtime.py +30 -0
  201. synlynk-0.27.5/synlynk/sandbox.py +65 -0
  202. synlynk-0.27.5/synlynk/scan.py +2124 -0
  203. synlynk-0.27.5/synlynk/scheduler.py +315 -0
  204. synlynk-0.27.5/synlynk/selftest.py +1658 -0
  205. synlynk-0.27.5/synlynk/sentinel.py +1274 -0
  206. synlynk-0.27.5/synlynk/session.py +108 -0
  207. synlynk-0.27.5/synlynk/sfia.py +192 -0
  208. synlynk-0.27.5/synlynk/spike.py +124 -0
  209. synlynk-0.27.5/synlynk/standalone_venv.py +101 -0
  210. synlynk-0.27.5/synlynk/state_inventory.py +374 -0
  211. synlynk-0.27.5/synlynk/state_registry.py +271 -0
  212. synlynk-0.27.5/synlynk/state_repair.py +266 -0
  213. synlynk-0.27.5/synlynk/status.py +536 -0
  214. synlynk-0.27.5/synlynk/story_claims.py +25 -0
  215. synlynk-0.27.5/synlynk/story_governance.py +68 -0
  216. synlynk-0.27.5/synlynk/story_provisioning.py +233 -0
  217. synlynk-0.27.5/synlynk/support_engineer.py +669 -0
  218. synlynk-0.27.5/synlynk/surface.py +113 -0
  219. synlynk-0.27.5/synlynk/swarm.py +73 -0
  220. synlynk-0.27.5/synlynk/taxonomy.py +708 -0
  221. synlynk-0.27.5/synlynk/taxonomy_standards.py +133 -0
  222. synlynk-0.27.5/synlynk/team.py +1292 -0
  223. synlynk-0.27.5/synlynk/testbed/__init__.py +4 -0
  224. synlynk-0.27.5/synlynk/testbed/cli.py +207 -0
  225. synlynk-0.27.5/synlynk/testbed/driver.py +281 -0
  226. synlynk-0.27.5/synlynk/testbed/identities.py +101 -0
  227. synlynk-0.27.5/synlynk/testbed/installer.py +148 -0
  228. synlynk-0.27.5/synlynk/testbed/invariants.py +65 -0
  229. synlynk-0.27.5/synlynk/testbed/scenarios.py +128 -0
  230. synlynk-0.27.5/synlynk/testbed/state_db_soak.py +544 -0
  231. synlynk-0.27.5/synlynk/tool_installer.py +175 -0
  232. synlynk-0.27.5/synlynk/topology_discovery.py +300 -0
  233. synlynk-0.27.5/synlynk/tpm_hooks.py +99 -0
  234. synlynk-0.27.5/synlynk/tpm_sweep.py +157 -0
  235. synlynk-0.27.5/synlynk/tui.py +166 -0
  236. synlynk-0.27.5/synlynk/types_registry.py +149 -0
  237. synlynk-0.27.5/synlynk/uninstall.py +34 -0
  238. synlynk-0.27.5/synlynk/upgrade.py +388 -0
  239. synlynk-0.27.5/synlynk/ux_nudges.py +30 -0
  240. synlynk-0.27.5/synlynk/uxcore.py +778 -0
  241. synlynk-0.27.5/synlynk/verify_effects.py +414 -0
  242. synlynk-0.27.5/synlynk/version_policy.py +58 -0
  243. synlynk-0.27.5/synlynk/viz/__init__.py +78 -0
  244. synlynk-0.27.5/synlynk/viz/activity.py +313 -0
  245. synlynk-0.27.5/synlynk/viz/architect.py +760 -0
  246. synlynk-0.27.5/synlynk/viz/banner.py +26 -0
  247. synlynk-0.27.5/synlynk/viz/board.py +231 -0
  248. synlynk-0.27.5/synlynk/viz/cache.py +89 -0
  249. synlynk-0.27.5/synlynk/viz/canvases.py +2607 -0
  250. synlynk-0.27.5/synlynk/viz/chrome.py +68 -0
  251. synlynk-0.27.5/synlynk/viz/constants.py +15 -0
  252. synlynk-0.27.5/synlynk/viz/data.py +898 -0
  253. synlynk-0.27.5/synlynk/viz/efficiency.py +1241 -0
  254. synlynk-0.27.5/synlynk/viz/effort.py +427 -0
  255. synlynk-0.27.5/synlynk/viz/format.py +59 -0
  256. synlynk-0.27.5/synlynk/viz/gantt.py +1215 -0
  257. synlynk-0.27.5/synlynk/viz/gantt_model.py +44 -0
  258. synlynk-0.27.5/synlynk/viz/graphify.py +496 -0
  259. synlynk-0.27.5/synlynk/viz/heartbeats.py +192 -0
  260. synlynk-0.27.5/synlynk/viz/home.py +686 -0
  261. synlynk-0.27.5/synlynk/viz/journeys.py +560 -0
  262. synlynk-0.27.5/synlynk/viz/logical_expand.py +189 -0
  263. synlynk-0.27.5/synlynk/viz/nav.py +78 -0
  264. synlynk-0.27.5/synlynk/viz/observatory.py +360 -0
  265. synlynk-0.27.5/synlynk/viz/onboarding.py +529 -0
  266. synlynk-0.27.5/synlynk/viz/overview.py +786 -0
  267. synlynk-0.27.5/synlynk/viz/ports.py +31 -0
  268. synlynk-0.27.5/synlynk/viz/roles.py +49 -0
  269. synlynk-0.27.5/synlynk/viz/server.py +952 -0
  270. synlynk-0.27.5/synlynk/viz/source.py +62 -0
  271. synlynk-0.27.5/synlynk/viz/write_routes.py +17 -0
  272. synlynk-0.27.5/synlynk/viz_views.py +987 -0
  273. synlynk-0.27.5/synlynk/vizor_daemon.py +1906 -0
  274. synlynk-0.27.5/synlynk/vizor_ensure.py +22 -0
  275. synlynk-0.27.5/synlynk/wal_ledger.py +156 -0
  276. synlynk-0.27.5/synlynk/watch.py +63 -0
  277. synlynk-0.27.5/synlynk/wave6.py +65 -0
  278. synlynk-0.27.5/synlynk/wizard.py +1358 -0
  279. synlynk-0.27.5/synlynk/workspace.py +94 -0
  280. synlynk-0.27.5/synlynk/workspace_agent.py +54 -0
  281. synlynk-0.27.5/synlynk/worktree.py +592 -0
  282. synlynk-0.27.5/synlynk/worktree_lease.py +359 -0
  283. synlynk-0.27.5/synlynk/worktree_prune.py +259 -0
  284. synlynk-0.27.5/synlynk/worktree_sparse.py +238 -0
  285. synlynk-0.27.5/synlynk.egg-info/PKG-INFO +179 -0
  286. synlynk-0.27.5/synlynk.egg-info/SOURCES.txt +778 -0
  287. synlynk-0.27.5/synlynk.egg-info/dependency_links.txt +1 -0
  288. synlynk-0.27.5/synlynk.egg-info/entry_points.txt +2 -0
  289. synlynk-0.27.5/synlynk.egg-info/requires.txt +7 -0
  290. synlynk-0.27.5/synlynk.egg-info/top_level.txt +1 -0
  291. synlynk-0.27.5/tests/test_adapter_conformance.py +136 -0
  292. synlynk-0.27.5/tests/test_addon.py +14 -0
  293. synlynk-0.27.5/tests/test_advisory.py +56 -0
  294. synlynk-0.27.5/tests/test_agent_cli.py +4620 -0
  295. synlynk-0.27.5/tests/test_agent_quota_tracking.py +2231 -0
  296. synlynk-0.27.5/tests/test_agent_role_columns_preserved.py +21 -0
  297. synlynk-0.27.5/tests/test_agent_store.py +481 -0
  298. synlynk-0.27.5/tests/test_agy_adapter.py +48 -0
  299. synlynk-0.27.5/tests/test_agy_dispatch_fix.py +1808 -0
  300. synlynk-0.27.5/tests/test_agy_model_discovery.py +163 -0
  301. synlynk-0.27.5/tests/test_approval_gate.py +36 -0
  302. synlynk-0.27.5/tests/test_architect_review_dispatch.py +79 -0
  303. synlynk-0.27.5/tests/test_artifact_harvesting.py +62 -0
  304. synlynk-0.27.5/tests/test_attribution.py +119 -0
  305. synlynk-0.27.5/tests/test_autonomous_capability_rerouting.py +69 -0
  306. synlynk-0.27.5/tests/test_autonomous_goal_forming_e2e.py +90 -0
  307. synlynk-0.27.5/tests/test_autonomous_role_charters.py +82 -0
  308. synlynk-0.27.5/tests/test_autonomy_dial.py +67 -0
  309. synlynk-0.27.5/tests/test_backlog.py +467 -0
  310. synlynk-0.27.5/tests/test_backlog_automation.py +189 -0
  311. synlynk-0.27.5/tests/test_backlog_triage_triggers.py +80 -0
  312. synlynk-0.27.5/tests/test_backup.py +170 -0
  313. synlynk-0.27.5/tests/test_backup_package.py +52 -0
  314. synlynk-0.27.5/tests/test_baseline_metrics.py +57 -0
  315. synlynk-0.27.5/tests/test_board.py +118 -0
  316. synlynk-0.27.5/tests/test_board_context_scoping.py +76 -0
  317. synlynk-0.27.5/tests/test_board_governance.py +139 -0
  318. synlynk-0.27.5/tests/test_boardroom_hud.py +159 -0
  319. synlynk-0.27.5/tests/test_brief_and_tui.py +25 -0
  320. synlynk-0.27.5/tests/test_brownfield_init.py +159 -0
  321. synlynk-0.27.5/tests/test_brownfield_synthesizer.py +202 -0
  322. synlynk-0.27.5/tests/test_bs6_workspace_views_spec.py +43 -0
  323. synlynk-0.27.5/tests/test_canon.py +235 -0
  324. synlynk-0.27.5/tests/test_capability.py +124 -0
  325. synlynk-0.27.5/tests/test_capability_backfill.py +139 -0
  326. synlynk-0.27.5/tests/test_capability_classifier.py +83 -0
  327. synlynk-0.27.5/tests/test_capability_pack.py +103 -0
  328. synlynk-0.27.5/tests/test_capability_report.py +569 -0
  329. synlynk-0.27.5/tests/test_capability_scoring.py +1315 -0
  330. synlynk-0.27.5/tests/test_capability_sweep.py +720 -0
  331. synlynk-0.27.5/tests/test_capability_sweep_boundary_guard.py +101 -0
  332. synlynk-0.27.5/tests/test_capability_taxonomy.py +132 -0
  333. synlynk-0.27.5/tests/test_capability_watch.py +381 -0
  334. synlynk-0.27.5/tests/test_capability_window.py +121 -0
  335. synlynk-0.27.5/tests/test_capability_window_dirty_input.py +89 -0
  336. synlynk-0.27.5/tests/test_charter_graphify.py +125 -0
  337. synlynk-0.27.5/tests/test_charter_injection.py +162 -0
  338. synlynk-0.27.5/tests/test_charter_injection_dispatch.py +144 -0
  339. synlynk-0.27.5/tests/test_charter_schema.py +275 -0
  340. synlynk-0.27.5/tests/test_charters.py +196 -0
  341. synlynk-0.27.5/tests/test_checkpoint_identity.py +21 -0
  342. synlynk-0.27.5/tests/test_ci_workflow_paths.py +113 -0
  343. synlynk-0.27.5/tests/test_circuit_breaker.py +597 -0
  344. synlynk-0.27.5/tests/test_circuit_breaker_live19.py +147 -0
  345. synlynk-0.27.5/tests/test_claude_adapter.py +41 -0
  346. synlynk-0.27.5/tests/test_cleanse_execution_log_models.py +72 -0
  347. synlynk-0.27.5/tests/test_cleanup_legacy_project_shards.py +119 -0
  348. synlynk-0.27.5/tests/test_cli_cold_start.py +88 -0
  349. synlynk-0.27.5/tests/test_cli_compressed_surface.py +51 -0
  350. synlynk-0.27.5/tests/test_cli_context_commands.py +36 -0
  351. synlynk-0.27.5/tests/test_cli_distribution_e2e.py +255 -0
  352. synlynk-0.27.5/tests/test_cli_fleet.py +23 -0
  353. synlynk-0.27.5/tests/test_cli_parser.py +272 -0
  354. synlynk-0.27.5/tests/test_cli_pm.py +39 -0
  355. synlynk-0.27.5/tests/test_cli_probe_deps.py +46 -0
  356. synlynk-0.27.5/tests/test_cli_story_claim.py +88 -0
  357. synlynk-0.27.5/tests/test_cmd_watch.py +21 -0
  358. synlynk-0.27.5/tests/test_codex_adapter.py +35 -0
  359. synlynk-0.27.5/tests/test_codex_baseline_flags.py +21 -0
  360. synlynk-0.27.5/tests/test_codex_model_discovery.py +182 -0
  361. synlynk-0.27.5/tests/test_cold_start_harness_tiebreak.py +86 -0
  362. synlynk-0.27.5/tests/test_coldstart.py +293 -0
  363. synlynk-0.27.5/tests/test_coldstart_graphify.py +132 -0
  364. synlynk-0.27.5/tests/test_completion_tracker.py +131 -0
  365. synlynk-0.27.5/tests/test_completion_tracker_vizor.py +39 -0
  366. synlynk-0.27.5/tests/test_concierge.py +52 -0
  367. synlynk-0.27.5/tests/test_config.py +68 -0
  368. synlynk-0.27.5/tests/test_config_schema.py +45 -0
  369. synlynk-0.27.5/tests/test_config_split.py +193 -0
  370. synlynk-0.27.5/tests/test_conftest_curses.py +54 -0
  371. synlynk-0.27.5/tests/test_connectors.py +53 -0
  372. synlynk-0.27.5/tests/test_constants.py +14 -0
  373. synlynk-0.27.5/tests/test_container_exec.py +161 -0
  374. synlynk-0.27.5/tests/test_context.py +61 -0
  375. synlynk-0.27.5/tests/test_context_compaction.py +253 -0
  376. synlynk-0.27.5/tests/test_context_compaction_schema.py +80 -0
  377. synlynk-0.27.5/tests/test_context_validator.py +25 -0
  378. synlynk-0.27.5/tests/test_control_plane_daemon_health.py +271 -0
  379. synlynk-0.27.5/tests/test_cost_attribution_mismatch_guard.py +229 -0
  380. synlynk-0.27.5/tests/test_cost_audit.py +390 -0
  381. synlynk-0.27.5/tests/test_cost_entries.py +100 -0
  382. synlynk-0.27.5/tests/test_cost_estimate_drift.py +160 -0
  383. synlynk-0.27.5/tests/test_cost_ledger.py +2210 -0
  384. synlynk-0.27.5/tests/test_costs.py +200 -0
  385. synlynk-0.27.5/tests/test_costs_dual_ledger_live20.py +80 -0
  386. synlynk-0.27.5/tests/test_cycle_migration.py +38 -0
  387. synlynk-0.27.5/tests/test_daemon_autonomous_schedule.py +131 -0
  388. synlynk-0.27.5/tests/test_daemon_liveness_1572.py +445 -0
  389. synlynk-0.27.5/tests/test_daemon_quota_calibration_tick.py +26 -0
  390. synlynk-0.27.5/tests/test_daemon_start_false_failure_2333.py +172 -0
  391. synlynk-0.27.5/tests/test_daemon_start_lock_decoupling.py +77 -0
  392. synlynk-0.27.5/tests/test_daemon_status_pidfile_health_2553.py +171 -0
  393. synlynk-0.27.5/tests/test_daemon_supervision_discovery.py +131 -0
  394. synlynk-0.27.5/tests/test_daemon_token_refresh.py +750 -0
  395. synlynk-0.27.5/tests/test_dag_capability_filtering.py +48 -0
  396. synlynk-0.27.5/tests/test_db.py +909 -0
  397. synlynk-0.27.5/tests/test_db_isolation_hygiene.py +116 -0
  398. synlynk-0.27.5/tests/test_db_migration.py +275 -0
  399. synlynk-0.27.5/tests/test_db_pr_check_merge_restricted.py +131 -0
  400. synlynk-0.27.5/tests/test_db_read_only.py +70 -0
  401. synlynk-0.27.5/tests/test_db_resolution.py +18 -0
  402. synlynk-0.27.5/tests/test_decide_audit.py +6 -0
  403. synlynk-0.27.5/tests/test_decide_preflight.py +193 -0
  404. synlynk-0.27.5/tests/test_deprecate_execution_log_models.py +68 -0
  405. synlynk-0.27.5/tests/test_devlog_session_linking.py +42 -0
  406. synlynk-0.27.5/tests/test_discovery_graphify.py +58 -0
  407. synlynk-0.27.5/tests/test_discovery_semantic.py +15 -0
  408. synlynk-0.27.5/tests/test_discovery_static.py +29 -0
  409. synlynk-0.27.5/tests/test_dispatch.py +4314 -0
  410. synlynk-0.27.5/tests/test_dispatch_auto_routing.py +111 -0
  411. synlynk-0.27.5/tests/test_dispatch_capability_routing.py +83 -0
  412. synlynk-0.27.5/tests/test_dispatch_claim_gate.py +133 -0
  413. synlynk-0.27.5/tests/test_dispatch_container.py +250 -0
  414. synlynk-0.27.5/tests/test_dispatch_context_mode_hint.py +67 -0
  415. synlynk-0.27.5/tests/test_dispatch_cycle.py +222 -0
  416. synlynk-0.27.5/tests/test_dispatch_fallback_logging.py +229 -0
  417. synlynk-0.27.5/tests/test_dispatch_github_identity.py +444 -0
  418. synlynk-0.27.5/tests/test_dispatch_local_agent.py +62 -0
  419. synlynk-0.27.5/tests/test_dispatch_model_defaults.py +49 -0
  420. synlynk-0.27.5/tests/test_dispatch_model_routing.py +219 -0
  421. synlynk-0.27.5/tests/test_dispatch_model_validation.py +91 -0
  422. synlynk-0.27.5/tests/test_dispatch_nudges.py +39 -0
  423. synlynk-0.27.5/tests/test_dispatch_pipeline_shim.py +15 -0
  424. synlynk-0.27.5/tests/test_dispatch_pipeline_stages.py +27 -0
  425. synlynk-0.27.5/tests/test_dispatch_preflight_hardening.py +55 -0
  426. synlynk-0.27.5/tests/test_dispatch_preview.py +20 -0
  427. synlynk-0.27.5/tests/test_dispatch_request.py +22 -0
  428. synlynk-0.27.5/tests/test_dispatch_session_threading.py +138 -0
  429. synlynk-0.27.5/tests/test_docs_sync.py +24 -0
  430. synlynk-0.27.5/tests/test_doctor_config_schema.py +68 -0
  431. synlynk-0.27.5/tests/test_doctor_graphify.py +118 -0
  432. synlynk-0.27.5/tests/test_doctor_identity_roles.py +75 -0
  433. synlynk-0.27.5/tests/test_doctor_product_store.py +68 -0
  434. synlynk-0.27.5/tests/test_doctor_roadmap_drift.py +38 -0
  435. synlynk-0.27.5/tests/test_doctor_task_leases.py +77 -0
  436. synlynk-0.27.5/tests/test_doctor_todo_drift.py +81 -0
  437. synlynk-0.27.5/tests/test_e2e.py +399 -0
  438. synlynk-0.27.5/tests/test_ecosystem_status.py +520 -0
  439. synlynk-0.27.5/tests/test_effect_verified_completion.py +245 -0
  440. synlynk-0.27.5/tests/test_events.py +440 -0
  441. synlynk-0.27.5/tests/test_examples.py +114 -0
  442. synlynk-0.27.5/tests/test_fail_closed_routing.py +37 -0
  443. synlynk-0.27.5/tests/test_federated_quota_capture.py +766 -0
  444. synlynk-0.27.5/tests/test_fencing.py +87 -0
  445. synlynk-0.27.5/tests/test_first_win.py +25 -0
  446. synlynk-0.27.5/tests/test_first_win_loop.py +56 -0
  447. synlynk-0.27.5/tests/test_fleet_operability.py +480 -0
  448. synlynk-0.27.5/tests/test_fleet_scheduler.py +681 -0
  449. synlynk-0.27.5/tests/test_fleet_version_engine.py +42 -0
  450. synlynk-0.27.5/tests/test_four_point_attribution.py +74 -0
  451. synlynk-0.27.5/tests/test_ftue_e2e.py +14 -0
  452. synlynk-0.27.5/tests/test_gantt_dual_pivot.py +121 -0
  453. synlynk-0.27.5/tests/test_gap_scanner.py +34 -0
  454. synlynk-0.27.5/tests/test_gateway.py +181 -0
  455. synlynk-0.27.5/tests/test_gc.py +9 -0
  456. synlynk-0.27.5/tests/test_generated_docs_lock.py +142 -0
  457. synlynk-0.27.5/tests/test_get_db_sandbox_fallback.py +352 -0
  458. synlynk-0.27.5/tests/test_gh_role.py +67 -0
  459. synlynk-0.27.5/tests/test_gh_shim.py +213 -0
  460. synlynk-0.27.5/tests/test_gh_sync.py +689 -0
  461. synlynk-0.27.5/tests/test_gh_sync_backfill.py +64 -0
  462. synlynk-0.27.5/tests/test_gh_sync_cli.py +35 -0
  463. synlynk-0.27.5/tests/test_gh_verify.py +557 -0
  464. synlynk-0.27.5/tests/test_gh_write_call_site_threading.py +95 -0
  465. synlynk-0.27.5/tests/test_gh_write_guard.py +76 -0
  466. synlynk-0.27.5/tests/test_github_app_auth.py +351 -0
  467. synlynk-0.27.5/tests/test_goal_tag_parsing.py +13 -0
  468. synlynk-0.27.5/tests/test_goals.py +274 -0
  469. synlynk-0.27.5/tests/test_goals_kinds.py +55 -0
  470. synlynk-0.27.5/tests/test_governs_auto_association.py +112 -0
  471. synlynk-0.27.5/tests/test_governs_compressed.py +62 -0
  472. synlynk-0.27.5/tests/test_governs_engine_tenancy.py +84 -0
  473. synlynk-0.27.5/tests/test_governs_fsm.py +63 -0
  474. synlynk-0.27.5/tests/test_governs_linkage_warning.py +113 -0
  475. synlynk-0.27.5/tests/test_governs_multi_workspace.py +81 -0
  476. synlynk-0.27.5/tests/test_governs_phase_audit.py +32 -0
  477. synlynk-0.27.5/tests/test_governs_phase_gate.py +44 -0
  478. synlynk-0.27.5/tests/test_governs_relay_events.py +79 -0
  479. synlynk-0.27.5/tests/test_governs_rephase.py +21 -0
  480. synlynk-0.27.5/tests/test_governs_resolver.py +128 -0
  481. synlynk-0.27.5/tests/test_governs_start.py +78 -0
  482. synlynk-0.27.5/tests/test_governs_sweep.py +126 -0
  483. synlynk-0.27.5/tests/test_graph_refresh_api.py +110 -0
  484. synlynk-0.27.5/tests/test_graph_traversal_cache.py +293 -0
  485. synlynk-0.27.5/tests/test_graphify_skills.py +72 -0
  486. synlynk-0.27.5/tests/test_greenfield_blueprints.py +41 -0
  487. synlynk-0.27.5/tests/test_grok_adapter.py +54 -0
  488. synlynk-0.27.5/tests/test_grok_model_discovery.py +148 -0
  489. synlynk-0.27.5/tests/test_grok_write_guard.py +82 -0
  490. synlynk-0.27.5/tests/test_handoff_cycle_map.py +22 -0
  491. synlynk-0.27.5/tests/test_handover.py +192 -0
  492. synlynk-0.27.5/tests/test_harness_adapter_permission_error_identity.py +23 -0
  493. synlynk-0.27.5/tests/test_harness_adapter_registry.py +50 -0
  494. synlynk-0.27.5/tests/test_harness_billing_config.py +66 -0
  495. synlynk-0.27.5/tests/test_harness_compatibility.py +296 -0
  496. synlynk-0.27.5/tests/test_harness_model_id_hygiene.py +148 -0
  497. synlynk-0.27.5/tests/test_heal.py +119 -0
  498. synlynk-0.27.5/tests/test_heal_cycles.py +104 -0
  499. synlynk-0.27.5/tests/test_heal_orphans.py +52 -0
  500. synlynk-0.27.5/tests/test_home_cmd.py +48 -0
  501. synlynk-0.27.5/tests/test_housekeeping.py +127 -0
  502. synlynk-0.27.5/tests/test_hud_buffer.py +43 -0
  503. synlynk-0.27.5/tests/test_hud_cycles.py +18 -0
  504. synlynk-0.27.5/tests/test_hud_errors.py +22 -0
  505. synlynk-0.27.5/tests/test_hud_integration.py +96 -0
  506. synlynk-0.27.5/tests/test_hud_live.py +37 -0
  507. synlynk-0.27.5/tests/test_hud_renderer.py +96 -0
  508. synlynk-0.27.5/tests/test_hud_snapshot.py +91 -0
  509. synlynk-0.27.5/tests/test_identity_file_permissions.py +70 -0
  510. synlynk-0.27.5/tests/test_identity_init_role.py +263 -0
  511. synlynk-0.27.5/tests/test_identity_init_role_token_seed.py +47 -0
  512. synlynk-0.27.5/tests/test_identity_list.py +23 -0
  513. synlynk-0.27.5/tests/test_identity_roles.py +45 -0
  514. synlynk-0.27.5/tests/test_impact.py +85 -0
  515. synlynk-0.27.5/tests/test_init_business_goals.py +5 -0
  516. synlynk-0.27.5/tests/test_init_noninteractive.py +84 -0
  517. synlynk-0.27.5/tests/test_init_rollback.py +87 -0
  518. synlynk-0.27.5/tests/test_install.py +25 -0
  519. synlynk-0.27.5/tests/test_install_manifest.py +112 -0
  520. synlynk-0.27.5/tests/test_install_sh.py +22 -0
  521. synlynk-0.27.5/tests/test_install_sh_matrix.py +26 -0
  522. synlynk-0.27.5/tests/test_instruction_reach.py +469 -0
  523. synlynk-0.27.5/tests/test_instructions.py +362 -0
  524. synlynk-0.27.5/tests/test_issue_2205_job_status.py +100 -0
  525. synlynk-0.27.5/tests/test_jev_engine.py +101 -0
  526. synlynk-0.27.5/tests/test_job_provenance_purpose_resolution.py +74 -0
  527. synlynk-0.27.5/tests/test_job_status_projection.py +367 -0
  528. synlynk-0.27.5/tests/test_job_status_taxonomy.py +81 -0
  529. synlynk-0.27.5/tests/test_job_timing_metrics.py +228 -0
  530. synlynk-0.27.5/tests/test_job_truth.py +508 -0
  531. synlynk-0.27.5/tests/test_jobs.py +5004 -0
  532. synlynk-0.27.5/tests/test_jobs_gh_write_provisional.py +102 -0
  533. synlynk-0.27.5/tests/test_jobs_reconcile_live19.py +233 -0
  534. synlynk-0.27.5/tests/test_launch.py +336 -0
  535. synlynk-0.27.5/tests/test_launch_templates.py +18 -0
  536. synlynk-0.27.5/tests/test_layered_topology_dispatch.py +107 -0
  537. synlynk-0.27.5/tests/test_lazy.py +42 -0
  538. synlynk-0.27.5/tests/test_lifecycle_telemetry.py +81 -0
  539. synlynk-0.27.5/tests/test_live19_live20_e2e.py +210 -0
  540. synlynk-0.27.5/tests/test_live27_catalog_invariants.py +151 -0
  541. synlynk-0.27.5/tests/test_local_adapter.py +61 -0
  542. synlynk-0.27.5/tests/test_local_agent.py +656 -0
  543. synlynk-0.27.5/tests/test_local_agent_ab_test.py +154 -0
  544. synlynk-0.27.5/tests/test_local_agent_concurrency.py +211 -0
  545. synlynk-0.27.5/tests/test_local_agent_hardware.py +101 -0
  546. synlynk-0.27.5/tests/test_local_agent_seed.py +97 -0
  547. synlynk-0.27.5/tests/test_local_http_auth.py +50 -0
  548. synlynk-0.27.5/tests/test_local_pilot.py +644 -0
  549. synlynk-0.27.5/tests/test_local_pilot_ledger.py +681 -0
  550. synlynk-0.27.5/tests/test_local_qualification_benchmark.py +221 -0
  551. synlynk-0.27.5/tests/test_logs_token_redaction.py +27 -0
  552. synlynk-0.27.5/tests/test_magic_heal.py +82 -0
  553. synlynk-0.27.5/tests/test_maintainer.py +64 -0
  554. synlynk-0.27.5/tests/test_maintainer_graph_sweep.py +94 -0
  555. synlynk-0.27.5/tests/test_marketing.py +277 -0
  556. synlynk-0.27.5/tests/test_marketing_workflow.py +100 -0
  557. synlynk-0.27.5/tests/test_media.py +64 -0
  558. synlynk-0.27.5/tests/test_merge_class.py +37 -0
  559. synlynk-0.27.5/tests/test_merge_oracle.py +41 -0
  560. synlynk-0.27.5/tests/test_mesh_conflict.py +189 -0
  561. synlynk-0.27.5/tests/test_mesh_federation.py +90 -0
  562. synlynk-0.27.5/tests/test_migrate.py +1127 -0
  563. synlynk-0.27.5/tests/test_migrations_framework.py +320 -0
  564. synlynk-0.27.5/tests/test_milestone_circuit_breaker_failover.py +65 -0
  565. synlynk-0.27.5/tests/test_milestone_effect_failover.py +124 -0
  566. synlynk-0.27.5/tests/test_model_catalog_discovery.py +294 -0
  567. synlynk-0.27.5/tests/test_model_resolution_allowlist.py +86 -0
  568. synlynk-0.27.5/tests/test_models.py +149 -0
  569. synlynk-0.27.5/tests/test_models_catalog.py +217 -0
  570. synlynk-0.27.5/tests/test_modularise.py +73 -0
  571. synlynk-0.27.5/tests/test_multiharness_journeys_e2e.py +144 -0
  572. synlynk-0.27.5/tests/test_multirepo_graph.py +68 -0
  573. synlynk-0.27.5/tests/test_multitrack_quota.py +123 -0
  574. synlynk-0.27.5/tests/test_muse_adapter.py +72 -0
  575. synlynk-0.27.5/tests/test_muse_harness.py +361 -0
  576. synlynk-0.27.5/tests/test_noop_worktree_cleanup.py +102 -0
  577. synlynk-0.27.5/tests/test_notifier_slack.py +48 -0
  578. synlynk-0.27.5/tests/test_observatory.py +121 -0
  579. synlynk-0.27.5/tests/test_onboarding_autoprobe.py +63 -0
  580. synlynk-0.27.5/tests/test_onboarding_db_migration.py +40 -0
  581. synlynk-0.27.5/tests/test_onboarding_safety.py +171 -0
  582. synlynk-0.27.5/tests/test_onboarding_state.py +88 -0
  583. synlynk-0.27.5/tests/test_onboarding_topology.py +157 -0
  584. synlynk-0.27.5/tests/test_oracle_self_transcript_crosscheck.py +231 -0
  585. synlynk-0.27.5/tests/test_oracle_ui.py +32 -0
  586. synlynk-0.27.5/tests/test_pack.py +87 -0
  587. synlynk-0.27.5/tests/test_pack_rich.py +96 -0
  588. synlynk-0.27.5/tests/test_pack_rich_context.py +51 -0
  589. synlynk-0.27.5/tests/test_packaging.py +134 -0
  590. synlynk-0.27.5/tests/test_packaging_metadata.py +31 -0
  591. synlynk-0.27.5/tests/test_parity.py +245 -0
  592. synlynk-0.27.5/tests/test_payment_models.py +552 -0
  593. synlynk-0.27.5/tests/test_platform_ops.py +316 -0
  594. synlynk-0.27.5/tests/test_pm_agent.py +226 -0
  595. synlynk-0.27.5/tests/test_pm_sweep_watchdog.py +112 -0
  596. synlynk-0.27.5/tests/test_policy.py +361 -0
  597. synlynk-0.27.5/tests/test_policy_cli.py +53 -0
  598. synlynk-0.27.5/tests/test_policy_gates.py +195 -0
  599. synlynk-0.27.5/tests/test_pr_check.py +187 -0
  600. synlynk-0.27.5/tests/test_pr_check_impact.py +41 -0
  601. synlynk-0.27.5/tests/test_pr_rebase.py +46 -0
  602. synlynk-0.27.5/tests/test_pr_review_multiplier.py +238 -0
  603. synlynk-0.27.5/tests/test_preflight.py +129 -0
  604. synlynk-0.27.5/tests/test_preflight_e2e.py +54 -0
  605. synlynk-0.27.5/tests/test_preflight_mcp.py +22 -0
  606. synlynk-0.27.5/tests/test_probe.py +562 -0
  607. synlynk-0.27.5/tests/test_probe_binding.py +52 -0
  608. synlynk-0.27.5/tests/test_process_lifecycle.py +262 -0
  609. synlynk-0.27.5/tests/test_product_store.py +202 -0
  610. synlynk-0.27.5/tests/test_project_root_hardening.py +26 -0
  611. synlynk-0.27.5/tests/test_provenance_attestation.py +291 -0
  612. synlynk-0.27.5/tests/test_pytest_collection.py +9 -0
  613. synlynk-0.27.5/tests/test_pytest_shim.py +90 -0
  614. synlynk-0.27.5/tests/test_qa_gate.py +265 -0
  615. synlynk-0.27.5/tests/test_quota_burn_rate_weighting.py +97 -0
  616. synlynk-0.27.5/tests/test_quota_calibration.py +173 -0
  617. synlynk-0.27.5/tests/test_quota_cli.py +76 -0
  618. synlynk-0.27.5/tests/test_quota_reservation_integration.py +146 -0
  619. synlynk-0.27.5/tests/test_readiness_matrix.py +249 -0
  620. synlynk-0.27.5/tests/test_rebase.py +7 -0
  621. synlynk-0.27.5/tests/test_reconcile_circuit_breaker.py +116 -0
  622. synlynk-0.27.5/tests/test_reconciler_unattended_loop.py +369 -0
  623. synlynk-0.27.5/tests/test_redaction.py +54 -0
  624. synlynk-0.27.5/tests/test_regen_e2e.py +23 -0
  625. synlynk-0.27.5/tests/test_regen_guard.py +48 -0
  626. synlynk-0.27.5/tests/test_registry_vault.py +17 -0
  627. synlynk-0.27.5/tests/test_relay.py +24 -0
  628. synlynk-0.27.5/tests/test_relay_cancellation.py +65 -0
  629. synlynk-0.27.5/tests/test_relay_hub.py +1248 -0
  630. synlynk-0.27.5/tests/test_relay_hub_integration.py +431 -0
  631. synlynk-0.27.5/tests/test_relay_hub_onboarding.py +82 -0
  632. synlynk-0.27.5/tests/test_relay_p2p.py +101 -0
  633. synlynk-0.27.5/tests/test_release.py +238 -0
  634. synlynk-0.27.5/tests/test_release_authority.py +90 -0
  635. synlynk-0.27.5/tests/test_release_checklist.py +68 -0
  636. synlynk-0.27.5/tests/test_release_docs_pr_mode.py +100 -0
  637. synlynk-0.27.5/tests/test_release_marketing.py +276 -0
  638. synlynk-0.27.5/tests/test_release_signals.py +208 -0
  639. synlynk-0.27.5/tests/test_repo_classifier.py +35 -0
  640. synlynk-0.27.5/tests/test_resolve_dispatch_harness.py +181 -0
  641. synlynk-0.27.5/tests/test_roadmap_commands.py +65 -0
  642. synlynk-0.27.5/tests/test_roadmap_governed_update.py +246 -0
  643. synlynk-0.27.5/tests/test_roadmap_linkage.py +67 -0
  644. synlynk-0.27.5/tests/test_roadmap_table_converter.py +43 -0
  645. synlynk-0.27.5/tests/test_role_add_identity_prompt.py +43 -0
  646. synlynk-0.27.5/tests/test_roles.py +314 -0
  647. synlynk-0.27.5/tests/test_rollback.py +464 -0
  648. synlynk-0.27.5/tests/test_runners.py +33 -0
  649. synlynk-0.27.5/tests/test_sandbox.py +24 -0
  650. synlynk-0.27.5/tests/test_scan.py +70 -0
  651. synlynk-0.27.5/tests/test_scan_graphify_auto.py +236 -0
  652. synlynk-0.27.5/tests/test_selftest.py +688 -0
  653. synlynk-0.27.5/tests/test_selftest_isolation.py +134 -0
  654. synlynk-0.27.5/tests/test_sentinel.py +560 -0
  655. synlynk-0.27.5/tests/test_sentinel_noop_alert.py +97 -0
  656. synlynk-0.27.5/tests/test_sentinel_quota_exhaustion.py +41 -0
  657. synlynk-0.27.5/tests/test_session.py +185 -0
  658. synlynk-0.27.5/tests/test_sfia.py +162 -0
  659. synlynk-0.27.5/tests/test_slack_notifier.py +48 -0
  660. synlynk-0.27.5/tests/test_sop_reload_tiering.py +141 -0
  661. synlynk-0.27.5/tests/test_spike.py +51 -0
  662. synlynk-0.27.5/tests/test_sqlite_concurrency.py +123 -0
  663. synlynk-0.27.5/tests/test_standalone_venv.py +28 -0
  664. synlynk-0.27.5/tests/test_state_db_soak.py +225 -0
  665. synlynk-0.27.5/tests/test_state_inventory.py +506 -0
  666. synlynk-0.27.5/tests/test_state_registry.py +144 -0
  667. synlynk-0.27.5/tests/test_state_repair.py +104 -0
  668. synlynk-0.27.5/tests/test_static_scan.py +624 -0
  669. synlynk-0.27.5/tests/test_status.py +210 -0
  670. synlynk-0.27.5/tests/test_story_home_claims.py +98 -0
  671. synlynk-0.27.5/tests/test_story_lifecycle.py +76 -0
  672. synlynk-0.27.5/tests/test_story_provisioning.py +173 -0
  673. synlynk-0.27.5/tests/test_story_unstranding.py +128 -0
  674. synlynk-0.27.5/tests/test_subscriptions_migration.py +57 -0
  675. synlynk-0.27.5/tests/test_support_engineer.py +19 -0
  676. synlynk-0.27.5/tests/test_surface.py +59 -0
  677. synlynk-0.27.5/tests/test_surface_tiering.py +65 -0
  678. synlynk-0.27.5/tests/test_swarm_engine.py +67 -0
  679. synlynk-0.27.5/tests/test_synlynk.py +9161 -0
  680. synlynk-0.27.5/tests/test_task_leases.py +315 -0
  681. synlynk-0.27.5/tests/test_task_type_inference.py +30 -0
  682. synlynk-0.27.5/tests/test_taxonomy.py +127 -0
  683. synlynk-0.27.5/tests/test_taxonomy_standards.py +73 -0
  684. synlynk-0.27.5/tests/test_tc9_gh_write_probe.py +229 -0
  685. synlynk-0.27.5/tests/test_team.py +75 -0
  686. synlynk-0.27.5/tests/test_testbed_cli.py +87 -0
  687. synlynk-0.27.5/tests/test_testbed_driver.py +114 -0
  688. synlynk-0.27.5/tests/test_testbed_identities.py +55 -0
  689. synlynk-0.27.5/tests/test_testbed_installer.py +63 -0
  690. synlynk-0.27.5/tests/test_testbed_scenarios.py +86 -0
  691. synlynk-0.27.5/tests/test_tier_upgrade_rollback.py +40 -0
  692. synlynk-0.27.5/tests/test_todo_md.py +55 -0
  693. synlynk-0.27.5/tests/test_tool_installer.py +144 -0
  694. synlynk-0.27.5/tests/test_tool_installer_provision.py +16 -0
  695. synlynk-0.27.5/tests/test_tpm_hooks.py +102 -0
  696. synlynk-0.27.5/tests/test_tpm_sweep.py +297 -0
  697. synlynk-0.27.5/tests/test_tui.py +75 -0
  698. synlynk-0.27.5/tests/test_tui_panels.py +54 -0
  699. synlynk-0.27.5/tests/test_types_registry.py +74 -0
  700. synlynk-0.27.5/tests/test_unified_onboarding_e2e.py +80 -0
  701. synlynk-0.27.5/tests/test_upgrade.py +297 -0
  702. synlynk-0.27.5/tests/test_upgrade_all.py +111 -0
  703. synlynk-0.27.5/tests/test_upgrade_uninstall.py +20 -0
  704. synlynk-0.27.5/tests/test_ux_journey_map.py +51 -0
  705. synlynk-0.27.5/tests/test_ux_nudges.py +48 -0
  706. synlynk-0.27.5/tests/test_uxcore_reads.py +65 -0
  707. synlynk-0.27.5/tests/test_uxcore_writes.py +228 -0
  708. synlynk-0.27.5/tests/test_v024_e2e_integration.py +56 -0
  709. synlynk-0.27.5/tests/test_v0274_acceptance_matrix.py +84 -0
  710. synlynk-0.27.5/tests/test_v0_20_0_milestone_spec.py +55 -0
  711. synlynk-0.27.5/tests/test_verify_effects.py +434 -0
  712. synlynk-0.27.5/tests/test_version_policy.py +27 -0
  713. synlynk-0.27.5/tests/test_viz.py +926 -0
  714. synlynk-0.27.5/tests/test_viz_banner.py +22 -0
  715. synlynk-0.27.5/tests/test_viz_bs6.py +50 -0
  716. synlynk-0.27.5/tests/test_viz_circuit_breaker.py +32 -0
  717. synlynk-0.27.5/tests/test_viz_dynamic_lod.py +50 -0
  718. synlynk-0.27.5/tests/test_viz_gantt_rows.py +79 -0
  719. synlynk-0.27.5/tests/test_viz_generic_scanner.py +105 -0
  720. synlynk-0.27.5/tests/test_viz_goals.py +7 -0
  721. synlynk-0.27.5/tests/test_viz_governs_board.py +75 -0
  722. synlynk-0.27.5/tests/test_viz_graphify.py +143 -0
  723. synlynk-0.27.5/tests/test_viz_graphify_routes.py +99 -0
  724. synlynk-0.27.5/tests/test_viz_infra_view.py +57 -0
  725. synlynk-0.27.5/tests/test_viz_kg_interactive.py +68 -0
  726. synlynk-0.27.5/tests/test_viz_logical_expand.py +252 -0
  727. synlynk-0.27.5/tests/test_viz_logical_view.py +31 -0
  728. synlynk-0.27.5/tests/test_viz_nav.py +88 -0
  729. synlynk-0.27.5/tests/test_viz_nav_restructure.py +193 -0
  730. synlynk-0.27.5/tests/test_viz_onboarding.py +188 -0
  731. synlynk-0.27.5/tests/test_viz_onboarding_engine.py +156 -0
  732. synlynk-0.27.5/tests/test_viz_product_view.py +50 -0
  733. synlynk-0.27.5/tests/test_viz_refresh_button.py +34 -0
  734. synlynk-0.27.5/tests/test_viz_regression.py +23 -0
  735. synlynk-0.27.5/tests/test_viz_roles.py +43 -0
  736. synlynk-0.27.5/tests/test_viz_sentinel_hud.py +537 -0
  737. synlynk-0.27.5/tests/test_viz_serve.py +212 -0
  738. synlynk-0.27.5/tests/test_viz_skinny_payloads.py +103 -0
  739. synlynk-0.27.5/tests/test_viz_source_api.py +35 -0
  740. synlynk-0.27.5/tests/test_viz_unified_canvas.py +174 -0
  741. synlynk-0.27.5/tests/test_viz_views.py +159 -0
  742. synlynk-0.27.5/tests/test_viz_worktrees.py +25 -0
  743. synlynk-0.27.5/tests/test_viz_world_radar.py +63 -0
  744. synlynk-0.27.5/tests/test_viz_write_path_table.py +43 -0
  745. synlynk-0.27.5/tests/test_vizor_architect_hud.py +32 -0
  746. synlynk-0.27.5/tests/test_vizor_daemon.py +927 -0
  747. synlynk-0.27.5/tests/test_vizor_daemon_stream.py +291 -0
  748. synlynk-0.27.5/tests/test_vizor_efficiency.py +185 -0
  749. synlynk-0.27.5/tests/test_vizor_goal_scoping.py +78 -0
  750. synlynk-0.27.5/tests/test_vizor_goals_panel.py +26 -0
  751. synlynk-0.27.5/tests/test_vizor_heartbeats.py +188 -0
  752. synlynk-0.27.5/tests/test_vizor_html_relative_routes.py +12 -0
  753. synlynk-0.27.5/tests/test_vizor_hub_fence.py +59 -0
  754. synlynk-0.27.5/tests/test_vizor_memorable_ports.py +50 -0
  755. synlynk-0.27.5/tests/test_vizor_multi_workspace_e2e.py +106 -0
  756. synlynk-0.27.5/tests/test_vizor_repo_truth.py +134 -0
  757. synlynk-0.27.5/tests/test_vizor_rxcc_truth.py +71 -0
  758. synlynk-0.27.5/tests/test_vizor_scoped_routing.py +81 -0
  759. synlynk-0.27.5/tests/test_vizor_workspace_context.py +41 -0
  760. synlynk-0.27.5/tests/test_vizor_write_routes.py +94 -0
  761. synlynk-0.27.5/tests/test_wal_ledger.py +127 -0
  762. synlynk-0.27.5/tests/test_watch_graph_drift.py +61 -0
  763. synlynk-0.27.5/tests/test_wave2_state_policy.py +58 -0
  764. synlynk-0.27.5/tests/test_wave4_runtime_surfaces.py +38 -0
  765. synlynk-0.27.5/tests/test_wave6.py +53 -0
  766. synlynk-0.27.5/tests/test_wizard.py +344 -0
  767. synlynk-0.27.5/tests/test_wizard_onboarding_engine.py +62 -0
  768. synlynk-0.27.5/tests/test_workspace_add_repo.py +99 -0
  769. synlynk-0.27.5/tests/test_workspace_agent.py +51 -0
  770. synlynk-0.27.5/tests/test_workspace_scan.py +698 -0
  771. synlynk-0.27.5/tests/test_worktree.py +562 -0
  772. synlynk-0.27.5/tests/test_worktree_lease.py +227 -0
  773. synlynk-0.27.5/tests/test_worktree_lease_concurrency.py +64 -0
  774. synlynk-0.27.5/tests/test_worktree_lineage.py +110 -0
  775. synlynk-0.27.5/tests/test_worktree_pre_commit.py +75 -0
  776. synlynk-0.27.5/tests/test_worktree_prune.py +141 -0
  777. synlynk-0.27.5/tests/test_worktree_sparse.py +130 -0
  778. synlynk-0.27.5/tests/test_worktree_sparse_ast.py +134 -0
  779. synlynk-0.27.5/tests/test_worktree_timestamp.py +50 -0
  780. synlynk-0.27.5/tests/test_zero_risk_packaging.py +60 -0
synlynk-0.27.5/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nikhil Soman
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,179 @@
1
+ Metadata-Version: 2.4
2
+ Name: synlynk
3
+ Version: 0.27.5
4
+ Summary: The coordination OS for multi-agent development — context injection, dispatch, telemetry, and sentinel for Claude, Agy, Codex, and Grok.
5
+ License: MIT
6
+ Project-URL: Homepage, https://synlynk.com
7
+ Project-URL: Repository, https://github.com/nikhilsoman/synlynk
8
+ Project-URL: Bug Tracker, https://github.com/nikhilsoman/synlynk/issues
9
+ Project-URL: Changelog, https://github.com/nikhilsoman/synlynk/blob/main/CHANGELOG.md
10
+ Keywords: ai,agents,claude,codex,gemini,grok,multi-agent,developer-tools
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Provides-Extra: test
26
+ Requires-Dist: pytest>=7.0.0; extra == "test"
27
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "test"
28
+ Provides-Extra: hub
29
+ Requires-Dist: nats-py>=2.16.0; extra == "hub"
30
+ Dynamic: license-file
31
+
32
+ <p align="center">
33
+ <img src="docs/img/logo/lockup.svg" alt="synlynk — neutral control plane for coding tasks" height="80">
34
+ </p>
35
+
36
+ <p align="center"><strong>Synlynk is a neutral control plane that routes coding tasks across AI vendors and local models, then proves the result.</strong></p>
37
+ <p align="center"><a href="https://synlynk.com">synlynk.com</a></p>
38
+
39
+ <p align="center">
40
+ <a href="https://github.com/nikhilsoman/synlynk"><img src="https://img.shields.io/badge/tests-5399%20collected-brightgreen" alt="Tests"</a>
41
+ <a href="https://github.com/nikhilsoman/synlynk"><img src="https://img.shields.io/badge/version-0.27.5-blue" alt="Version"></a>
42
+ <a href="https://github.com/nikhilsoman/synlynk"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>
43
+ <a href="https://github.com/nikhilsoman/synlynk"><img src="https://img.shields.io/badge/python-3.9%2B-blue" alt="Python"></a>
44
+ </p>
45
+
46
+ Synlynk is a neutral control plane that routes coding tasks across AI vendors and local models, then proves the result. The Python CLI injects scoped project context into every dispatch, uses empirical harness allocation only after a harness has at least five completed, merged jobs for the relevant task type, and follows the documented interim policy until then. See the [empirical capability policy](docs/blog/244-chore-empirical-capability-policy.md) and [routing policy](.synlynk/policy.json). Synlynk also tracks costs and hallucination loops. A shared `project-docs/` directory keeps every tool in sync: Claude Code, Codex, and AGY all read the same context, decisions, and progress.
47
+
48
+ **v0.27.5:** Developer Preview Stable Release — Full 6-gate operationalization milestone including VS Code / OpenVSX extension listing & distribution (v0.27.0), verified sub-15-minute quickstart onboarding loop (v0.27.1), prerequisite auditing & doctor self-healing remediation (v0.27.2), 5-way cross-harness journey matrix for Claude, Codex, Agy, Grok, and Muse (v0.27.3), comprehensive acceptance matrix and GOVERNS audit (v0.27.4), and stable distribution packaging (v0.27.5). 5399 tests collected.
49
+
50
+ ## Documentation
51
+
52
+ Start with the [documentation hub](docs/README.md), the [10-minute quickstart](docs/quickstart.md), or a [task-oriented how-to](docs/how-to/README.md). The complete [command reference](docs/reference/commands.md) is generated from `COMMAND_TAXONOMY`.
53
+
54
+ | | | |
55
+ |:---:|:---:|:---:|
56
+ | [![Official Reference](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/site/src/assets/img/docs/synlynk-official-reference-thumb.png)](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-official-reference.pdf) | [![Command Reference](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/site/src/assets/img/docs/synlynk-command-reference-thumb.png)](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-command-reference.pdf) | [![Quick Start Guide](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/site/src/assets/img/docs/synlynk-quickstart-guide-thumb.png)](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-quickstart-guide.pdf) |
57
+ | **[Official Reference](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-official-reference.pdf)** | **[Command Reference](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-command-reference.pdf)** | **[Quick Start Guide](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-quickstart-guide.pdf)** |
58
+ | 14-page full reference: architecture, all commands, agent profiles, relay, SQLite schema, changelog | 9-page command catalog: flags, options, usage scenarios | 5-page getting started: install, init, dispatch, invite |
59
+
60
+ ## Install
61
+
62
+ **From PyPI (Standard / Global CLI):**
63
+ ```bash
64
+ pip install synlynk
65
+ # or isolated via pipx
66
+ pipx install synlynk
67
+ ```
68
+
69
+ **From Source / Git:**
70
+ ```bash
71
+ pipx install git+https://github.com/nikhilsoman/synlynk
72
+ ```
73
+
74
+ **Visual Studio Code Extension:**
75
+ Native IDE reach into agent dispatch, jobs, logs, and diagnostics is available in [`clients/vscode/`](clients/vscode/).
76
+
77
+ **Run directly without installing (contributor / checkout mode):**
78
+ ```bash
79
+ python3 bin/synlynk.py <command>
80
+ ```
81
+
82
+ **Requirements:** Python 3.10+, stdlib only — zero required external dependencies.
83
+
84
+ ## Quick start
85
+
86
+ Get up and running in 60 seconds:
87
+
88
+ 1. **Install synlynk globally:**
89
+ ```bash
90
+ pipx install git+https://github.com/nikhilsoman/synlynk
91
+ ```
92
+
93
+ 2. **Initialize your project:**
94
+ Runs the interactive FTUE wizard to discover installed AI agent CLI tools, configure workspace topology, and bootstrap project state.
95
+ ```bash
96
+ synlynk init --wizard
97
+ ```
98
+
99
+ 3. **Analyze repository structure:**
100
+ Scans the codebase to build and update the static source map.
101
+ ```bash
102
+ synlynk scan
103
+ ```
104
+
105
+ 4. **Migrate existing flat-file projects (optional):**
106
+ If you have a project created using an older version of synlynk, migrate its `project-docs/` markdown files to `state.db`.
107
+ ```bash
108
+ synlynk migrate
109
+ ```
110
+
111
+ 5. **Dispatch a task to an agent in the background:**
112
+ ```bash
113
+ synlynk dispatch claude --task "refactor auth module"
114
+ ```
115
+ `--task` must be a non-empty string — `dispatch_agent()` fails closed on an empty or whitespace-only task before creating any job, worktree, or cost entry (see [#720](https://github.com/nikhilsoman/synlynk/issues/720))
116
+ If `--task` is built from a shell variable in automation, don't interpolate it unchecked — an unset variable silently expands to an empty string
117
+ Sanity-check what a dispatch would actually send with `--dry-run` first:
118
+ ```bash
119
+ synlynk dispatch claude --task "$TASK_VAR" --dry-run
120
+ ```
121
+
122
+ Every dispatched agent is also asked to echo a receipt marker
123
+ (`SYNLYNK_TASK_RECEIVED: <task_sha256>`) as its literal first line of
124
+ output, confirming it received the exact task text before doing any
125
+ work. If a job's log is missing this marker (or prints it late, or with
126
+ the wrong digest) and no corroborating git activity shows up in its
127
+ worktree, Synlynk marks the job `task_delivery_failed` and skips
128
+ auto-finalize/push for that worktree — the files stay in place for
129
+ audit. If real work *did* land despite a missing/late marker, the job
130
+ is not blocked; it's flagged with a non-blocking WARN note instead
131
+ (see #720).
132
+
133
+ 6. **Check running jobs:**
134
+ ```bash
135
+ synlynk jobs
136
+ ```
137
+
138
+ 7. **Tail a job's output:**
139
+ ```bash
140
+ synlynk logs --job <job-id>
141
+ ```
142
+
143
+ ## How it works
144
+
145
+ At the core of synlynk is a dual-storage model designed for agent speed and Git reliability:
146
+
147
+ - **`state.db` is the permanent source of truth** for all project state, including stories, roadmaps, memories, devlogs, and costs.
148
+ - **`project-docs/` flat files are write-through backups.** Every write to `state.db` automatically updates the corresponding markdown files in `project-docs/` (e.g., `todo.md`, `roadmap.md`, `memory.md`, `costs.md`). This ensures a human-readable, Git-trackable record of project state.
149
+ - **`generate_context()` resolves state dynamically.** Once a project is migrated, it reads directly from the SQLite database to compile the current active context. For non-migrated repositories, it falls back to reading raw flat files.
150
+ - **`synlynk exec <cmd>` manages context injection.** Before handing off to your AI tool, it compiles the active tasks and decisions, writes a compacted snapshot to `.synlynk/context.md` (active tasks only, no completed items), and checks cumulative spend limits in `.synlynk/config.json`. After the session ends, it detects flatline loops (3 consecutive failures of the same command) and writes alerts to `sentinel.md`.
151
+
152
+ The AI tool is instructed (via `CLAUDE.md` / `GEMINI.md`) to read `.synlynk/context.md` at session start. Cost tracking is fully automated: `state.db` records costs to the `cost_entries` table, which are written through to `project-docs/costs.md`.
153
+
154
+ ## Commands
155
+
156
+ Commands are grouped by where you'll reach for them in a typical project lifecycle.
157
+
158
+ <!-- commands:start -->
159
+
160
+ **Start here:**
161
+
162
+ - `synlynk home`
163
+ - `synlynk init`
164
+ - `synlynk start`
165
+ - `synlynk quickstart`
166
+ - `synlynk brainstorm`
167
+ - `synlynk brief`
168
+ - `synlynk scan`
169
+ - `synlynk join`
170
+ - `synlynk governs`
171
+ - `synlynk preflight`
172
+ - `synlynk status`
173
+ - `synlynk watch`
174
+ - `synlynk viz`
175
+
176
+ Full command reference: [docs/reference/commands.md](docs/reference/commands.md)
177
+
178
+ <!-- commands:end -->
179
+ <!-- commands:end -->
@@ -0,0 +1,148 @@
1
+ <p align="center">
2
+ <img src="docs/img/logo/lockup.svg" alt="synlynk — neutral control plane for coding tasks" height="80">
3
+ </p>
4
+
5
+ <p align="center"><strong>Synlynk is a neutral control plane that routes coding tasks across AI vendors and local models, then proves the result.</strong></p>
6
+ <p align="center"><a href="https://synlynk.com">synlynk.com</a></p>
7
+
8
+ <p align="center">
9
+ <a href="https://github.com/nikhilsoman/synlynk"><img src="https://img.shields.io/badge/tests-5399%20collected-brightgreen" alt="Tests"</a>
10
+ <a href="https://github.com/nikhilsoman/synlynk"><img src="https://img.shields.io/badge/version-0.27.5-blue" alt="Version"></a>
11
+ <a href="https://github.com/nikhilsoman/synlynk"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>
12
+ <a href="https://github.com/nikhilsoman/synlynk"><img src="https://img.shields.io/badge/python-3.9%2B-blue" alt="Python"></a>
13
+ </p>
14
+
15
+ Synlynk is a neutral control plane that routes coding tasks across AI vendors and local models, then proves the result. The Python CLI injects scoped project context into every dispatch, uses empirical harness allocation only after a harness has at least five completed, merged jobs for the relevant task type, and follows the documented interim policy until then. See the [empirical capability policy](docs/blog/244-chore-empirical-capability-policy.md) and [routing policy](.synlynk/policy.json). Synlynk also tracks costs and hallucination loops. A shared `project-docs/` directory keeps every tool in sync: Claude Code, Codex, and AGY all read the same context, decisions, and progress.
16
+
17
+ **v0.27.5:** Developer Preview Stable Release — Full 6-gate operationalization milestone including VS Code / OpenVSX extension listing & distribution (v0.27.0), verified sub-15-minute quickstart onboarding loop (v0.27.1), prerequisite auditing & doctor self-healing remediation (v0.27.2), 5-way cross-harness journey matrix for Claude, Codex, Agy, Grok, and Muse (v0.27.3), comprehensive acceptance matrix and GOVERNS audit (v0.27.4), and stable distribution packaging (v0.27.5). 5399 tests collected.
18
+
19
+ ## Documentation
20
+
21
+ Start with the [documentation hub](docs/README.md), the [10-minute quickstart](docs/quickstart.md), or a [task-oriented how-to](docs/how-to/README.md). The complete [command reference](docs/reference/commands.md) is generated from `COMMAND_TAXONOMY`.
22
+
23
+ | | | |
24
+ |:---:|:---:|:---:|
25
+ | [![Official Reference](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/site/src/assets/img/docs/synlynk-official-reference-thumb.png)](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-official-reference.pdf) | [![Command Reference](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/site/src/assets/img/docs/synlynk-command-reference-thumb.png)](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-command-reference.pdf) | [![Quick Start Guide](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/site/src/assets/img/docs/synlynk-quickstart-guide-thumb.png)](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-quickstart-guide.pdf) |
26
+ | **[Official Reference](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-official-reference.pdf)** | **[Command Reference](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-command-reference.pdf)** | **[Quick Start Guide](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-quickstart-guide.pdf)** |
27
+ | 14-page full reference: architecture, all commands, agent profiles, relay, SQLite schema, changelog | 9-page command catalog: flags, options, usage scenarios | 5-page getting started: install, init, dispatch, invite |
28
+
29
+ ## Install
30
+
31
+ **From PyPI (Standard / Global CLI):**
32
+ ```bash
33
+ pip install synlynk
34
+ # or isolated via pipx
35
+ pipx install synlynk
36
+ ```
37
+
38
+ **From Source / Git:**
39
+ ```bash
40
+ pipx install git+https://github.com/nikhilsoman/synlynk
41
+ ```
42
+
43
+ **Visual Studio Code Extension:**
44
+ Native IDE reach into agent dispatch, jobs, logs, and diagnostics is available in [`clients/vscode/`](clients/vscode/).
45
+
46
+ **Run directly without installing (contributor / checkout mode):**
47
+ ```bash
48
+ python3 bin/synlynk.py <command>
49
+ ```
50
+
51
+ **Requirements:** Python 3.10+, stdlib only — zero required external dependencies.
52
+
53
+ ## Quick start
54
+
55
+ Get up and running in 60 seconds:
56
+
57
+ 1. **Install synlynk globally:**
58
+ ```bash
59
+ pipx install git+https://github.com/nikhilsoman/synlynk
60
+ ```
61
+
62
+ 2. **Initialize your project:**
63
+ Runs the interactive FTUE wizard to discover installed AI agent CLI tools, configure workspace topology, and bootstrap project state.
64
+ ```bash
65
+ synlynk init --wizard
66
+ ```
67
+
68
+ 3. **Analyze repository structure:**
69
+ Scans the codebase to build and update the static source map.
70
+ ```bash
71
+ synlynk scan
72
+ ```
73
+
74
+ 4. **Migrate existing flat-file projects (optional):**
75
+ If you have a project created using an older version of synlynk, migrate its `project-docs/` markdown files to `state.db`.
76
+ ```bash
77
+ synlynk migrate
78
+ ```
79
+
80
+ 5. **Dispatch a task to an agent in the background:**
81
+ ```bash
82
+ synlynk dispatch claude --task "refactor auth module"
83
+ ```
84
+ `--task` must be a non-empty string — `dispatch_agent()` fails closed on an empty or whitespace-only task before creating any job, worktree, or cost entry (see [#720](https://github.com/nikhilsoman/synlynk/issues/720))
85
+ If `--task` is built from a shell variable in automation, don't interpolate it unchecked — an unset variable silently expands to an empty string
86
+ Sanity-check what a dispatch would actually send with `--dry-run` first:
87
+ ```bash
88
+ synlynk dispatch claude --task "$TASK_VAR" --dry-run
89
+ ```
90
+
91
+ Every dispatched agent is also asked to echo a receipt marker
92
+ (`SYNLYNK_TASK_RECEIVED: <task_sha256>`) as its literal first line of
93
+ output, confirming it received the exact task text before doing any
94
+ work. If a job's log is missing this marker (or prints it late, or with
95
+ the wrong digest) and no corroborating git activity shows up in its
96
+ worktree, Synlynk marks the job `task_delivery_failed` and skips
97
+ auto-finalize/push for that worktree — the files stay in place for
98
+ audit. If real work *did* land despite a missing/late marker, the job
99
+ is not blocked; it's flagged with a non-blocking WARN note instead
100
+ (see #720).
101
+
102
+ 6. **Check running jobs:**
103
+ ```bash
104
+ synlynk jobs
105
+ ```
106
+
107
+ 7. **Tail a job's output:**
108
+ ```bash
109
+ synlynk logs --job <job-id>
110
+ ```
111
+
112
+ ## How it works
113
+
114
+ At the core of synlynk is a dual-storage model designed for agent speed and Git reliability:
115
+
116
+ - **`state.db` is the permanent source of truth** for all project state, including stories, roadmaps, memories, devlogs, and costs.
117
+ - **`project-docs/` flat files are write-through backups.** Every write to `state.db` automatically updates the corresponding markdown files in `project-docs/` (e.g., `todo.md`, `roadmap.md`, `memory.md`, `costs.md`). This ensures a human-readable, Git-trackable record of project state.
118
+ - **`generate_context()` resolves state dynamically.** Once a project is migrated, it reads directly from the SQLite database to compile the current active context. For non-migrated repositories, it falls back to reading raw flat files.
119
+ - **`synlynk exec <cmd>` manages context injection.** Before handing off to your AI tool, it compiles the active tasks and decisions, writes a compacted snapshot to `.synlynk/context.md` (active tasks only, no completed items), and checks cumulative spend limits in `.synlynk/config.json`. After the session ends, it detects flatline loops (3 consecutive failures of the same command) and writes alerts to `sentinel.md`.
120
+
121
+ The AI tool is instructed (via `CLAUDE.md` / `GEMINI.md`) to read `.synlynk/context.md` at session start. Cost tracking is fully automated: `state.db` records costs to the `cost_entries` table, which are written through to `project-docs/costs.md`.
122
+
123
+ ## Commands
124
+
125
+ Commands are grouped by where you'll reach for them in a typical project lifecycle.
126
+
127
+ <!-- commands:start -->
128
+
129
+ **Start here:**
130
+
131
+ - `synlynk home`
132
+ - `synlynk init`
133
+ - `synlynk start`
134
+ - `synlynk quickstart`
135
+ - `synlynk brainstorm`
136
+ - `synlynk brief`
137
+ - `synlynk scan`
138
+ - `synlynk join`
139
+ - `synlynk governs`
140
+ - `synlynk preflight`
141
+ - `synlynk status`
142
+ - `synlynk watch`
143
+ - `synlynk viz`
144
+
145
+ Full command reference: [docs/reference/commands.md](docs/reference/commands.md)
146
+
147
+ <!-- commands:end -->
148
+ <!-- commands:end -->
synlynk-0.27.5/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.27.5
@@ -0,0 +1,54 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "synlynk"
7
+ dynamic = ["version"]
8
+ description = "The coordination OS for multi-agent development — context injection, dispatch, telemetry, and sentinel for Claude, Agy, Codex, and Grok."
9
+ readme = "README.md"
10
+ license = { text = "MIT" }
11
+ requires-python = ">=3.10"
12
+ keywords = ["ai", "agents", "claude", "codex", "gemini", "grok", "multi-agent", "developer-tools"]
13
+ classifiers = [
14
+ "Development Status :: 4 - Beta",
15
+ "Environment :: Console",
16
+ "Intended Audience :: Developers",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Topic :: Software Development :: Libraries :: Python Modules",
24
+ "Topic :: Utilities",
25
+ ]
26
+ dependencies = []
27
+
28
+ [project.optional-dependencies]
29
+ test = [
30
+ "pytest>=7.0.0",
31
+ "pytest-xdist>=3.0.0",
32
+ ]
33
+ hub = [
34
+ "nats-py>=2.16.0",
35
+ ]
36
+
37
+ [project.urls]
38
+ Homepage = "https://synlynk.com"
39
+ Repository = "https://github.com/nikhilsoman/synlynk"
40
+ "Bug Tracker" = "https://github.com/nikhilsoman/synlynk/issues"
41
+ Changelog = "https://github.com/nikhilsoman/synlynk/blob/main/CHANGELOG.md"
42
+
43
+ [project.scripts]
44
+ synlynk = "synlynk:main"
45
+
46
+ [tool.setuptools.packages.find]
47
+ where = ["."]
48
+ include = ["synlynk*"]
49
+
50
+ [tool.setuptools.dynamic]
51
+ version = { file = ["VERSION"] }
52
+
53
+ [tool.setuptools.package-data]
54
+ synlynk = ["py.typed", "capability_baseline.json", "packs/*.yaml"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+