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.
- synlynk-0.27.5/LICENSE +21 -0
- synlynk-0.27.5/PKG-INFO +179 -0
- synlynk-0.27.5/README.md +148 -0
- synlynk-0.27.5/VERSION +1 -0
- synlynk-0.27.5/pyproject.toml +54 -0
- synlynk-0.27.5/setup.cfg +4 -0
- synlynk-0.27.5/synlynk/__init__.py +3672 -0
- synlynk-0.27.5/synlynk/__main__.py +4 -0
- synlynk-0.27.5/synlynk/_constants.py +374 -0
- synlynk-0.27.5/synlynk/_fast_cli.py +56 -0
- synlynk-0.27.5/synlynk/_lazy.py +15 -0
- synlynk-0.27.5/synlynk/addon.py +26 -0
- synlynk-0.27.5/synlynk/advisory.py +131 -0
- synlynk-0.27.5/synlynk/agent_cli.py +365 -0
- synlynk-0.27.5/synlynk/agent_store.py +421 -0
- synlynk-0.27.5/synlynk/approval_gate.py +41 -0
- synlynk-0.27.5/synlynk/attribution.py +232 -0
- synlynk-0.27.5/synlynk/autonomy.py +71 -0
- synlynk-0.27.5/synlynk/backlog.py +1007 -0
- synlynk-0.27.5/synlynk/backlog_extractor.py +126 -0
- synlynk-0.27.5/synlynk/backup.py +325 -0
- synlynk-0.27.5/synlynk/baseline.py +179 -0
- synlynk-0.27.5/synlynk/board.py +344 -0
- synlynk-0.27.5/synlynk/board_governance.py +214 -0
- synlynk-0.27.5/synlynk/brief.py +67 -0
- synlynk-0.27.5/synlynk/canon.py +230 -0
- synlynk-0.27.5/synlynk/capability.py +258 -0
- synlynk-0.27.5/synlynk/capability_backfill.py +196 -0
- synlynk-0.27.5/synlynk/capability_baseline.json +38 -0
- synlynk-0.27.5/synlynk/capability_classifier.py +72 -0
- synlynk-0.27.5/synlynk/capability_pack.py +173 -0
- synlynk-0.27.5/synlynk/capability_probe.py +339 -0
- synlynk-0.27.5/synlynk/capability_report.py +336 -0
- synlynk-0.27.5/synlynk/capability_roles.py +19 -0
- synlynk-0.27.5/synlynk/capability_sweep.py +694 -0
- synlynk-0.27.5/synlynk/capability_watch.py +368 -0
- synlynk-0.27.5/synlynk/capability_window.py +250 -0
- synlynk-0.27.5/synlynk/charter_injection.py +114 -0
- synlynk-0.27.5/synlynk/charter_schema.py +207 -0
- synlynk-0.27.5/synlynk/charters.py +664 -0
- synlynk-0.27.5/synlynk/ci_paths.py +47 -0
- synlynk-0.27.5/synlynk/circuit_breaker.py +332 -0
- synlynk-0.27.5/synlynk/cli.py +3991 -0
- synlynk-0.27.5/synlynk/coldstart.py +788 -0
- synlynk-0.27.5/synlynk/completion_tracker.py +127 -0
- synlynk-0.27.5/synlynk/concierge.py +33 -0
- synlynk-0.27.5/synlynk/config_schema.py +105 -0
- synlynk-0.27.5/synlynk/connectors.py +109 -0
- synlynk-0.27.5/synlynk/container_exec.py +199 -0
- synlynk-0.27.5/synlynk/context.py +625 -0
- synlynk-0.27.5/synlynk/context_compaction.py +189 -0
- synlynk-0.27.5/synlynk/context_validator.py +30 -0
- synlynk-0.27.5/synlynk/cost_audit.py +1071 -0
- synlynk-0.27.5/synlynk/costs.py +1447 -0
- synlynk-0.27.5/synlynk/daemon.py +1902 -0
- synlynk-0.27.5/synlynk/db.py +5700 -0
- synlynk-0.27.5/synlynk/db_schema.py +642 -0
- synlynk-0.27.5/synlynk/discovery.py +120 -0
- synlynk-0.27.5/synlynk/discovery_semantic.py +11 -0
- synlynk-0.27.5/synlynk/dispatch.py +6199 -0
- synlynk-0.27.5/synlynk/dispatch_pipeline.py +128 -0
- synlynk-0.27.5/synlynk/doctor.py +1947 -0
- synlynk-0.27.5/synlynk/events.py +527 -0
- synlynk-0.27.5/synlynk/examples.py +13 -0
- synlynk-0.27.5/synlynk/fencing.py +55 -0
- synlynk-0.27.5/synlynk/first_win.py +36 -0
- synlynk-0.27.5/synlynk/first_win_loop.py +73 -0
- synlynk-0.27.5/synlynk/fleet.py +667 -0
- synlynk-0.27.5/synlynk/fleet_templates.py +112 -0
- synlynk-0.27.5/synlynk/gap_scanner.py +59 -0
- synlynk-0.27.5/synlynk/gateway.py +162 -0
- synlynk-0.27.5/synlynk/gc_cmd.py +144 -0
- synlynk-0.27.5/synlynk/gh_role.py +67 -0
- synlynk-0.27.5/synlynk/gh_shim.py +211 -0
- synlynk-0.27.5/synlynk/gh_sync.py +389 -0
- synlynk-0.27.5/synlynk/gh_sync_backfill.py +71 -0
- synlynk-0.27.5/synlynk/gh_sync_cli.py +51 -0
- synlynk-0.27.5/synlynk/gh_verify.py +579 -0
- synlynk-0.27.5/synlynk/git_ref_lock.py +39 -0
- synlynk-0.27.5/synlynk/github_app_auth.py +317 -0
- synlynk-0.27.5/synlynk/github_repo.py +17 -0
- synlynk-0.27.5/synlynk/goal_synthesizer.py +240 -0
- synlynk-0.27.5/synlynk/governs_cli.py +403 -0
- synlynk-0.27.5/synlynk/governs_compressed.py +87 -0
- synlynk-0.27.5/synlynk/governs_engine.py +261 -0
- synlynk-0.27.5/synlynk/governs_fsm.py +140 -0
- synlynk-0.27.5/synlynk/governs_gate.py +191 -0
- synlynk-0.27.5/synlynk/governs_resolver.py +72 -0
- synlynk-0.27.5/synlynk/graph_cache.py +278 -0
- synlynk-0.27.5/synlynk/greenfield_blueprints.py +214 -0
- synlynk-0.27.5/synlynk/handover.py +217 -0
- synlynk-0.27.5/synlynk/harness_adapters/__init__.py +1 -0
- synlynk-0.27.5/synlynk/harness_adapters/agy.py +45 -0
- synlynk-0.27.5/synlynk/harness_adapters/base.py +54 -0
- synlynk-0.27.5/synlynk/harness_adapters/claude.py +42 -0
- synlynk-0.27.5/synlynk/harness_adapters/codex.py +66 -0
- synlynk-0.27.5/synlynk/harness_adapters/generic_api.py +71 -0
- synlynk-0.27.5/synlynk/harness_adapters/grok.py +56 -0
- synlynk-0.27.5/synlynk/harness_adapters/local.py +69 -0
- synlynk-0.27.5/synlynk/harness_adapters/muse.py +65 -0
- synlynk-0.27.5/synlynk/harness_adapters/registry.py +31 -0
- synlynk-0.27.5/synlynk/harness_adapters/request.py +37 -0
- synlynk-0.27.5/synlynk/heal.py +383 -0
- synlynk-0.27.5/synlynk/heal_cycles.py +183 -0
- synlynk-0.27.5/synlynk/heal_orphans.py +127 -0
- synlynk-0.27.5/synlynk/hud.py +474 -0
- synlynk-0.27.5/synlynk/identity_roles.py +52 -0
- synlynk-0.27.5/synlynk/impact.py +325 -0
- synlynk-0.27.5/synlynk/install.py +43 -0
- synlynk-0.27.5/synlynk/install_manifest.py +83 -0
- synlynk-0.27.5/synlynk/instructions.py +1276 -0
- synlynk-0.27.5/synlynk/jev.py +100 -0
- synlynk-0.27.5/synlynk/job_status_projection.py +362 -0
- synlynk-0.27.5/synlynk/job_truth.py +655 -0
- synlynk-0.27.5/synlynk/jobs.py +6843 -0
- synlynk-0.27.5/synlynk/launch.py +190 -0
- synlynk-0.27.5/synlynk/launch_dag.py +485 -0
- synlynk-0.27.5/synlynk/launch_templates.py +353 -0
- synlynk-0.27.5/synlynk/lifecycle.py +194 -0
- synlynk-0.27.5/synlynk/lineage.py +238 -0
- synlynk-0.27.5/synlynk/local_agent.py +859 -0
- synlynk-0.27.5/synlynk/local_agent_seed.py +55 -0
- synlynk-0.27.5/synlynk/local_http_auth.py +107 -0
- synlynk-0.27.5/synlynk/local_pilot.py +409 -0
- synlynk-0.27.5/synlynk/local_pilot_ledger.py +574 -0
- synlynk-0.27.5/synlynk/local_pilot_runner.py +361 -0
- synlynk-0.27.5/synlynk/logs.py +116 -0
- synlynk-0.27.5/synlynk/maintainer.py +235 -0
- synlynk-0.27.5/synlynk/marketing.py +592 -0
- synlynk-0.27.5/synlynk/media.py +207 -0
- synlynk-0.27.5/synlynk/merge_class.py +35 -0
- synlynk-0.27.5/synlynk/merge_oracle.py +90 -0
- synlynk-0.27.5/synlynk/mesh.py +579 -0
- synlynk-0.27.5/synlynk/migrations/__init__.py +16 -0
- synlynk-0.27.5/synlynk/migrations/m0016_cost_entries_pr_number.py +25 -0
- synlynk-0.27.5/synlynk/migrations/m0017_daemon_job_purpose.py +33 -0
- synlynk-0.27.5/synlynk/migrations/m0018_job_provenance_attestations.py +39 -0
- synlynk-0.27.5/synlynk/migrations/m0019_policy_gate_events.py +25 -0
- synlynk-0.27.5/synlynk/migrations/m0020_quota_snapshots.py +27 -0
- synlynk-0.27.5/synlynk/migrations/m0021_harness_model_catalog.py +82 -0
- synlynk-0.27.5/synlynk/migrations/m0022_subscriptions_harness_name.py +37 -0
- synlynk-0.27.5/synlynk/migrations/m0023_cleanse_execution_log_models.py +45 -0
- synlynk-0.27.5/synlynk/migrations/m0024_local_pilot_ledger.py +119 -0
- synlynk-0.27.5/synlynk/migrations/m0025_local_pilot_review_selection.py +20 -0
- synlynk-0.27.5/synlynk/migrations/m0026_local_pilot_resume_authorization.py +59 -0
- synlynk-0.27.5/synlynk/migrations/m0027_local_pilot_resume_lifecycle_serialization.py +32 -0
- synlynk-0.27.5/synlynk/migrations/m0028_deprecate_execution_log_models.py +39 -0
- synlynk-0.27.5/synlynk/migrations/m0029_roadmap_arcs_milestone_eligibility.py +69 -0
- synlynk-0.27.5/synlynk/migrations/m0030_github_sync_map.py +31 -0
- synlynk-0.27.5/synlynk/migrations/m0031_quota_burn_rate_weights.py +21 -0
- synlynk-0.27.5/synlynk/migrations/runner.py +75 -0
- synlynk-0.27.5/synlynk/models.py +1131 -0
- synlynk-0.27.5/synlynk/multirepo_graph.py +145 -0
- synlynk-0.27.5/synlynk/notifiers/__init__.py +0 -0
- synlynk-0.27.5/synlynk/notifiers/slack.py +48 -0
- synlynk-0.27.5/synlynk/observatory.py +337 -0
- synlynk-0.27.5/synlynk/onboarding_state.py +188 -0
- synlynk-0.27.5/synlynk/pack.py +305 -0
- synlynk-0.27.5/synlynk/packs/agency.yaml +1 -0
- synlynk-0.27.5/synlynk/packs/software-product.yaml +1 -0
- synlynk-0.27.5/synlynk/packs/studio.yaml +1 -0
- synlynk-0.27.5/synlynk/parity.py +532 -0
- synlynk-0.27.5/synlynk/platform_ops.py +1013 -0
- synlynk-0.27.5/synlynk/platform_status.py +191 -0
- synlynk-0.27.5/synlynk/pm_agent.py +288 -0
- synlynk-0.27.5/synlynk/policy.py +379 -0
- synlynk-0.27.5/synlynk/policy_cli.py +88 -0
- synlynk-0.27.5/synlynk/policy_gates.py +111 -0
- synlynk-0.27.5/synlynk/pr_check.py +75 -0
- synlynk-0.27.5/synlynk/pr_multiplier.py +144 -0
- synlynk-0.27.5/synlynk/pr_rebase.py +68 -0
- synlynk-0.27.5/synlynk/preflight.py +225 -0
- synlynk-0.27.5/synlynk/probe.py +1869 -0
- synlynk-0.27.5/synlynk/probe_binding.py +182 -0
- synlynk-0.27.5/synlynk/process_lifecycle.py +326 -0
- synlynk-0.27.5/synlynk/product_store.py +322 -0
- synlynk-0.27.5/synlynk/provenance.py +198 -0
- synlynk-0.27.5/synlynk/py.typed +0 -0
- synlynk-0.27.5/synlynk/pytest_shim.py +63 -0
- synlynk-0.27.5/synlynk/qa_gate.py +151 -0
- synlynk-0.27.5/synlynk/quota.py +1182 -0
- synlynk-0.27.5/synlynk/quota_capture.py +676 -0
- synlynk-0.27.5/synlynk/readiness.py +481 -0
- synlynk-0.27.5/synlynk/rebase.py +452 -0
- synlynk-0.27.5/synlynk/regen_guard.py +90 -0
- synlynk-0.27.5/synlynk/registry.py +47 -0
- synlynk-0.27.5/synlynk/relay.py +402 -0
- synlynk-0.27.5/synlynk/relay_hub.py +1190 -0
- synlynk-0.27.5/synlynk/release_authority.py +133 -0
- synlynk-0.27.5/synlynk/release_marketing.py +460 -0
- synlynk-0.27.5/synlynk/release_readme.py +600 -0
- synlynk-0.27.5/synlynk/release_signals.py +168 -0
- synlynk-0.27.5/synlynk/repo_classifier.py +111 -0
- synlynk-0.27.5/synlynk/rollback.py +327 -0
- synlynk-0.27.5/synlynk/runners/__init__.py +6 -0
- synlynk-0.27.5/synlynk/runners/base.py +24 -0
- synlynk-0.27.5/synlynk/runners/fly.py +69 -0
- synlynk-0.27.5/synlynk/runners/local.py +74 -0
- synlynk-0.27.5/synlynk/runners/manager.py +91 -0
- synlynk-0.27.5/synlynk/runtime.py +30 -0
- synlynk-0.27.5/synlynk/sandbox.py +65 -0
- synlynk-0.27.5/synlynk/scan.py +2124 -0
- synlynk-0.27.5/synlynk/scheduler.py +315 -0
- synlynk-0.27.5/synlynk/selftest.py +1658 -0
- synlynk-0.27.5/synlynk/sentinel.py +1274 -0
- synlynk-0.27.5/synlynk/session.py +108 -0
- synlynk-0.27.5/synlynk/sfia.py +192 -0
- synlynk-0.27.5/synlynk/spike.py +124 -0
- synlynk-0.27.5/synlynk/standalone_venv.py +101 -0
- synlynk-0.27.5/synlynk/state_inventory.py +374 -0
- synlynk-0.27.5/synlynk/state_registry.py +271 -0
- synlynk-0.27.5/synlynk/state_repair.py +266 -0
- synlynk-0.27.5/synlynk/status.py +536 -0
- synlynk-0.27.5/synlynk/story_claims.py +25 -0
- synlynk-0.27.5/synlynk/story_governance.py +68 -0
- synlynk-0.27.5/synlynk/story_provisioning.py +233 -0
- synlynk-0.27.5/synlynk/support_engineer.py +669 -0
- synlynk-0.27.5/synlynk/surface.py +113 -0
- synlynk-0.27.5/synlynk/swarm.py +73 -0
- synlynk-0.27.5/synlynk/taxonomy.py +708 -0
- synlynk-0.27.5/synlynk/taxonomy_standards.py +133 -0
- synlynk-0.27.5/synlynk/team.py +1292 -0
- synlynk-0.27.5/synlynk/testbed/__init__.py +4 -0
- synlynk-0.27.5/synlynk/testbed/cli.py +207 -0
- synlynk-0.27.5/synlynk/testbed/driver.py +281 -0
- synlynk-0.27.5/synlynk/testbed/identities.py +101 -0
- synlynk-0.27.5/synlynk/testbed/installer.py +148 -0
- synlynk-0.27.5/synlynk/testbed/invariants.py +65 -0
- synlynk-0.27.5/synlynk/testbed/scenarios.py +128 -0
- synlynk-0.27.5/synlynk/testbed/state_db_soak.py +544 -0
- synlynk-0.27.5/synlynk/tool_installer.py +175 -0
- synlynk-0.27.5/synlynk/topology_discovery.py +300 -0
- synlynk-0.27.5/synlynk/tpm_hooks.py +99 -0
- synlynk-0.27.5/synlynk/tpm_sweep.py +157 -0
- synlynk-0.27.5/synlynk/tui.py +166 -0
- synlynk-0.27.5/synlynk/types_registry.py +149 -0
- synlynk-0.27.5/synlynk/uninstall.py +34 -0
- synlynk-0.27.5/synlynk/upgrade.py +388 -0
- synlynk-0.27.5/synlynk/ux_nudges.py +30 -0
- synlynk-0.27.5/synlynk/uxcore.py +778 -0
- synlynk-0.27.5/synlynk/verify_effects.py +414 -0
- synlynk-0.27.5/synlynk/version_policy.py +58 -0
- synlynk-0.27.5/synlynk/viz/__init__.py +78 -0
- synlynk-0.27.5/synlynk/viz/activity.py +313 -0
- synlynk-0.27.5/synlynk/viz/architect.py +760 -0
- synlynk-0.27.5/synlynk/viz/banner.py +26 -0
- synlynk-0.27.5/synlynk/viz/board.py +231 -0
- synlynk-0.27.5/synlynk/viz/cache.py +89 -0
- synlynk-0.27.5/synlynk/viz/canvases.py +2607 -0
- synlynk-0.27.5/synlynk/viz/chrome.py +68 -0
- synlynk-0.27.5/synlynk/viz/constants.py +15 -0
- synlynk-0.27.5/synlynk/viz/data.py +898 -0
- synlynk-0.27.5/synlynk/viz/efficiency.py +1241 -0
- synlynk-0.27.5/synlynk/viz/effort.py +427 -0
- synlynk-0.27.5/synlynk/viz/format.py +59 -0
- synlynk-0.27.5/synlynk/viz/gantt.py +1215 -0
- synlynk-0.27.5/synlynk/viz/gantt_model.py +44 -0
- synlynk-0.27.5/synlynk/viz/graphify.py +496 -0
- synlynk-0.27.5/synlynk/viz/heartbeats.py +192 -0
- synlynk-0.27.5/synlynk/viz/home.py +686 -0
- synlynk-0.27.5/synlynk/viz/journeys.py +560 -0
- synlynk-0.27.5/synlynk/viz/logical_expand.py +189 -0
- synlynk-0.27.5/synlynk/viz/nav.py +78 -0
- synlynk-0.27.5/synlynk/viz/observatory.py +360 -0
- synlynk-0.27.5/synlynk/viz/onboarding.py +529 -0
- synlynk-0.27.5/synlynk/viz/overview.py +786 -0
- synlynk-0.27.5/synlynk/viz/ports.py +31 -0
- synlynk-0.27.5/synlynk/viz/roles.py +49 -0
- synlynk-0.27.5/synlynk/viz/server.py +952 -0
- synlynk-0.27.5/synlynk/viz/source.py +62 -0
- synlynk-0.27.5/synlynk/viz/write_routes.py +17 -0
- synlynk-0.27.5/synlynk/viz_views.py +987 -0
- synlynk-0.27.5/synlynk/vizor_daemon.py +1906 -0
- synlynk-0.27.5/synlynk/vizor_ensure.py +22 -0
- synlynk-0.27.5/synlynk/wal_ledger.py +156 -0
- synlynk-0.27.5/synlynk/watch.py +63 -0
- synlynk-0.27.5/synlynk/wave6.py +65 -0
- synlynk-0.27.5/synlynk/wizard.py +1358 -0
- synlynk-0.27.5/synlynk/workspace.py +94 -0
- synlynk-0.27.5/synlynk/workspace_agent.py +54 -0
- synlynk-0.27.5/synlynk/worktree.py +592 -0
- synlynk-0.27.5/synlynk/worktree_lease.py +359 -0
- synlynk-0.27.5/synlynk/worktree_prune.py +259 -0
- synlynk-0.27.5/synlynk/worktree_sparse.py +238 -0
- synlynk-0.27.5/synlynk.egg-info/PKG-INFO +179 -0
- synlynk-0.27.5/synlynk.egg-info/SOURCES.txt +778 -0
- synlynk-0.27.5/synlynk.egg-info/dependency_links.txt +1 -0
- synlynk-0.27.5/synlynk.egg-info/entry_points.txt +2 -0
- synlynk-0.27.5/synlynk.egg-info/requires.txt +7 -0
- synlynk-0.27.5/synlynk.egg-info/top_level.txt +1 -0
- synlynk-0.27.5/tests/test_adapter_conformance.py +136 -0
- synlynk-0.27.5/tests/test_addon.py +14 -0
- synlynk-0.27.5/tests/test_advisory.py +56 -0
- synlynk-0.27.5/tests/test_agent_cli.py +4620 -0
- synlynk-0.27.5/tests/test_agent_quota_tracking.py +2231 -0
- synlynk-0.27.5/tests/test_agent_role_columns_preserved.py +21 -0
- synlynk-0.27.5/tests/test_agent_store.py +481 -0
- synlynk-0.27.5/tests/test_agy_adapter.py +48 -0
- synlynk-0.27.5/tests/test_agy_dispatch_fix.py +1808 -0
- synlynk-0.27.5/tests/test_agy_model_discovery.py +163 -0
- synlynk-0.27.5/tests/test_approval_gate.py +36 -0
- synlynk-0.27.5/tests/test_architect_review_dispatch.py +79 -0
- synlynk-0.27.5/tests/test_artifact_harvesting.py +62 -0
- synlynk-0.27.5/tests/test_attribution.py +119 -0
- synlynk-0.27.5/tests/test_autonomous_capability_rerouting.py +69 -0
- synlynk-0.27.5/tests/test_autonomous_goal_forming_e2e.py +90 -0
- synlynk-0.27.5/tests/test_autonomous_role_charters.py +82 -0
- synlynk-0.27.5/tests/test_autonomy_dial.py +67 -0
- synlynk-0.27.5/tests/test_backlog.py +467 -0
- synlynk-0.27.5/tests/test_backlog_automation.py +189 -0
- synlynk-0.27.5/tests/test_backlog_triage_triggers.py +80 -0
- synlynk-0.27.5/tests/test_backup.py +170 -0
- synlynk-0.27.5/tests/test_backup_package.py +52 -0
- synlynk-0.27.5/tests/test_baseline_metrics.py +57 -0
- synlynk-0.27.5/tests/test_board.py +118 -0
- synlynk-0.27.5/tests/test_board_context_scoping.py +76 -0
- synlynk-0.27.5/tests/test_board_governance.py +139 -0
- synlynk-0.27.5/tests/test_boardroom_hud.py +159 -0
- synlynk-0.27.5/tests/test_brief_and_tui.py +25 -0
- synlynk-0.27.5/tests/test_brownfield_init.py +159 -0
- synlynk-0.27.5/tests/test_brownfield_synthesizer.py +202 -0
- synlynk-0.27.5/tests/test_bs6_workspace_views_spec.py +43 -0
- synlynk-0.27.5/tests/test_canon.py +235 -0
- synlynk-0.27.5/tests/test_capability.py +124 -0
- synlynk-0.27.5/tests/test_capability_backfill.py +139 -0
- synlynk-0.27.5/tests/test_capability_classifier.py +83 -0
- synlynk-0.27.5/tests/test_capability_pack.py +103 -0
- synlynk-0.27.5/tests/test_capability_report.py +569 -0
- synlynk-0.27.5/tests/test_capability_scoring.py +1315 -0
- synlynk-0.27.5/tests/test_capability_sweep.py +720 -0
- synlynk-0.27.5/tests/test_capability_sweep_boundary_guard.py +101 -0
- synlynk-0.27.5/tests/test_capability_taxonomy.py +132 -0
- synlynk-0.27.5/tests/test_capability_watch.py +381 -0
- synlynk-0.27.5/tests/test_capability_window.py +121 -0
- synlynk-0.27.5/tests/test_capability_window_dirty_input.py +89 -0
- synlynk-0.27.5/tests/test_charter_graphify.py +125 -0
- synlynk-0.27.5/tests/test_charter_injection.py +162 -0
- synlynk-0.27.5/tests/test_charter_injection_dispatch.py +144 -0
- synlynk-0.27.5/tests/test_charter_schema.py +275 -0
- synlynk-0.27.5/tests/test_charters.py +196 -0
- synlynk-0.27.5/tests/test_checkpoint_identity.py +21 -0
- synlynk-0.27.5/tests/test_ci_workflow_paths.py +113 -0
- synlynk-0.27.5/tests/test_circuit_breaker.py +597 -0
- synlynk-0.27.5/tests/test_circuit_breaker_live19.py +147 -0
- synlynk-0.27.5/tests/test_claude_adapter.py +41 -0
- synlynk-0.27.5/tests/test_cleanse_execution_log_models.py +72 -0
- synlynk-0.27.5/tests/test_cleanup_legacy_project_shards.py +119 -0
- synlynk-0.27.5/tests/test_cli_cold_start.py +88 -0
- synlynk-0.27.5/tests/test_cli_compressed_surface.py +51 -0
- synlynk-0.27.5/tests/test_cli_context_commands.py +36 -0
- synlynk-0.27.5/tests/test_cli_distribution_e2e.py +255 -0
- synlynk-0.27.5/tests/test_cli_fleet.py +23 -0
- synlynk-0.27.5/tests/test_cli_parser.py +272 -0
- synlynk-0.27.5/tests/test_cli_pm.py +39 -0
- synlynk-0.27.5/tests/test_cli_probe_deps.py +46 -0
- synlynk-0.27.5/tests/test_cli_story_claim.py +88 -0
- synlynk-0.27.5/tests/test_cmd_watch.py +21 -0
- synlynk-0.27.5/tests/test_codex_adapter.py +35 -0
- synlynk-0.27.5/tests/test_codex_baseline_flags.py +21 -0
- synlynk-0.27.5/tests/test_codex_model_discovery.py +182 -0
- synlynk-0.27.5/tests/test_cold_start_harness_tiebreak.py +86 -0
- synlynk-0.27.5/tests/test_coldstart.py +293 -0
- synlynk-0.27.5/tests/test_coldstart_graphify.py +132 -0
- synlynk-0.27.5/tests/test_completion_tracker.py +131 -0
- synlynk-0.27.5/tests/test_completion_tracker_vizor.py +39 -0
- synlynk-0.27.5/tests/test_concierge.py +52 -0
- synlynk-0.27.5/tests/test_config.py +68 -0
- synlynk-0.27.5/tests/test_config_schema.py +45 -0
- synlynk-0.27.5/tests/test_config_split.py +193 -0
- synlynk-0.27.5/tests/test_conftest_curses.py +54 -0
- synlynk-0.27.5/tests/test_connectors.py +53 -0
- synlynk-0.27.5/tests/test_constants.py +14 -0
- synlynk-0.27.5/tests/test_container_exec.py +161 -0
- synlynk-0.27.5/tests/test_context.py +61 -0
- synlynk-0.27.5/tests/test_context_compaction.py +253 -0
- synlynk-0.27.5/tests/test_context_compaction_schema.py +80 -0
- synlynk-0.27.5/tests/test_context_validator.py +25 -0
- synlynk-0.27.5/tests/test_control_plane_daemon_health.py +271 -0
- synlynk-0.27.5/tests/test_cost_attribution_mismatch_guard.py +229 -0
- synlynk-0.27.5/tests/test_cost_audit.py +390 -0
- synlynk-0.27.5/tests/test_cost_entries.py +100 -0
- synlynk-0.27.5/tests/test_cost_estimate_drift.py +160 -0
- synlynk-0.27.5/tests/test_cost_ledger.py +2210 -0
- synlynk-0.27.5/tests/test_costs.py +200 -0
- synlynk-0.27.5/tests/test_costs_dual_ledger_live20.py +80 -0
- synlynk-0.27.5/tests/test_cycle_migration.py +38 -0
- synlynk-0.27.5/tests/test_daemon_autonomous_schedule.py +131 -0
- synlynk-0.27.5/tests/test_daemon_liveness_1572.py +445 -0
- synlynk-0.27.5/tests/test_daemon_quota_calibration_tick.py +26 -0
- synlynk-0.27.5/tests/test_daemon_start_false_failure_2333.py +172 -0
- synlynk-0.27.5/tests/test_daemon_start_lock_decoupling.py +77 -0
- synlynk-0.27.5/tests/test_daemon_status_pidfile_health_2553.py +171 -0
- synlynk-0.27.5/tests/test_daemon_supervision_discovery.py +131 -0
- synlynk-0.27.5/tests/test_daemon_token_refresh.py +750 -0
- synlynk-0.27.5/tests/test_dag_capability_filtering.py +48 -0
- synlynk-0.27.5/tests/test_db.py +909 -0
- synlynk-0.27.5/tests/test_db_isolation_hygiene.py +116 -0
- synlynk-0.27.5/tests/test_db_migration.py +275 -0
- synlynk-0.27.5/tests/test_db_pr_check_merge_restricted.py +131 -0
- synlynk-0.27.5/tests/test_db_read_only.py +70 -0
- synlynk-0.27.5/tests/test_db_resolution.py +18 -0
- synlynk-0.27.5/tests/test_decide_audit.py +6 -0
- synlynk-0.27.5/tests/test_decide_preflight.py +193 -0
- synlynk-0.27.5/tests/test_deprecate_execution_log_models.py +68 -0
- synlynk-0.27.5/tests/test_devlog_session_linking.py +42 -0
- synlynk-0.27.5/tests/test_discovery_graphify.py +58 -0
- synlynk-0.27.5/tests/test_discovery_semantic.py +15 -0
- synlynk-0.27.5/tests/test_discovery_static.py +29 -0
- synlynk-0.27.5/tests/test_dispatch.py +4314 -0
- synlynk-0.27.5/tests/test_dispatch_auto_routing.py +111 -0
- synlynk-0.27.5/tests/test_dispatch_capability_routing.py +83 -0
- synlynk-0.27.5/tests/test_dispatch_claim_gate.py +133 -0
- synlynk-0.27.5/tests/test_dispatch_container.py +250 -0
- synlynk-0.27.5/tests/test_dispatch_context_mode_hint.py +67 -0
- synlynk-0.27.5/tests/test_dispatch_cycle.py +222 -0
- synlynk-0.27.5/tests/test_dispatch_fallback_logging.py +229 -0
- synlynk-0.27.5/tests/test_dispatch_github_identity.py +444 -0
- synlynk-0.27.5/tests/test_dispatch_local_agent.py +62 -0
- synlynk-0.27.5/tests/test_dispatch_model_defaults.py +49 -0
- synlynk-0.27.5/tests/test_dispatch_model_routing.py +219 -0
- synlynk-0.27.5/tests/test_dispatch_model_validation.py +91 -0
- synlynk-0.27.5/tests/test_dispatch_nudges.py +39 -0
- synlynk-0.27.5/tests/test_dispatch_pipeline_shim.py +15 -0
- synlynk-0.27.5/tests/test_dispatch_pipeline_stages.py +27 -0
- synlynk-0.27.5/tests/test_dispatch_preflight_hardening.py +55 -0
- synlynk-0.27.5/tests/test_dispatch_preview.py +20 -0
- synlynk-0.27.5/tests/test_dispatch_request.py +22 -0
- synlynk-0.27.5/tests/test_dispatch_session_threading.py +138 -0
- synlynk-0.27.5/tests/test_docs_sync.py +24 -0
- synlynk-0.27.5/tests/test_doctor_config_schema.py +68 -0
- synlynk-0.27.5/tests/test_doctor_graphify.py +118 -0
- synlynk-0.27.5/tests/test_doctor_identity_roles.py +75 -0
- synlynk-0.27.5/tests/test_doctor_product_store.py +68 -0
- synlynk-0.27.5/tests/test_doctor_roadmap_drift.py +38 -0
- synlynk-0.27.5/tests/test_doctor_task_leases.py +77 -0
- synlynk-0.27.5/tests/test_doctor_todo_drift.py +81 -0
- synlynk-0.27.5/tests/test_e2e.py +399 -0
- synlynk-0.27.5/tests/test_ecosystem_status.py +520 -0
- synlynk-0.27.5/tests/test_effect_verified_completion.py +245 -0
- synlynk-0.27.5/tests/test_events.py +440 -0
- synlynk-0.27.5/tests/test_examples.py +114 -0
- synlynk-0.27.5/tests/test_fail_closed_routing.py +37 -0
- synlynk-0.27.5/tests/test_federated_quota_capture.py +766 -0
- synlynk-0.27.5/tests/test_fencing.py +87 -0
- synlynk-0.27.5/tests/test_first_win.py +25 -0
- synlynk-0.27.5/tests/test_first_win_loop.py +56 -0
- synlynk-0.27.5/tests/test_fleet_operability.py +480 -0
- synlynk-0.27.5/tests/test_fleet_scheduler.py +681 -0
- synlynk-0.27.5/tests/test_fleet_version_engine.py +42 -0
- synlynk-0.27.5/tests/test_four_point_attribution.py +74 -0
- synlynk-0.27.5/tests/test_ftue_e2e.py +14 -0
- synlynk-0.27.5/tests/test_gantt_dual_pivot.py +121 -0
- synlynk-0.27.5/tests/test_gap_scanner.py +34 -0
- synlynk-0.27.5/tests/test_gateway.py +181 -0
- synlynk-0.27.5/tests/test_gc.py +9 -0
- synlynk-0.27.5/tests/test_generated_docs_lock.py +142 -0
- synlynk-0.27.5/tests/test_get_db_sandbox_fallback.py +352 -0
- synlynk-0.27.5/tests/test_gh_role.py +67 -0
- synlynk-0.27.5/tests/test_gh_shim.py +213 -0
- synlynk-0.27.5/tests/test_gh_sync.py +689 -0
- synlynk-0.27.5/tests/test_gh_sync_backfill.py +64 -0
- synlynk-0.27.5/tests/test_gh_sync_cli.py +35 -0
- synlynk-0.27.5/tests/test_gh_verify.py +557 -0
- synlynk-0.27.5/tests/test_gh_write_call_site_threading.py +95 -0
- synlynk-0.27.5/tests/test_gh_write_guard.py +76 -0
- synlynk-0.27.5/tests/test_github_app_auth.py +351 -0
- synlynk-0.27.5/tests/test_goal_tag_parsing.py +13 -0
- synlynk-0.27.5/tests/test_goals.py +274 -0
- synlynk-0.27.5/tests/test_goals_kinds.py +55 -0
- synlynk-0.27.5/tests/test_governs_auto_association.py +112 -0
- synlynk-0.27.5/tests/test_governs_compressed.py +62 -0
- synlynk-0.27.5/tests/test_governs_engine_tenancy.py +84 -0
- synlynk-0.27.5/tests/test_governs_fsm.py +63 -0
- synlynk-0.27.5/tests/test_governs_linkage_warning.py +113 -0
- synlynk-0.27.5/tests/test_governs_multi_workspace.py +81 -0
- synlynk-0.27.5/tests/test_governs_phase_audit.py +32 -0
- synlynk-0.27.5/tests/test_governs_phase_gate.py +44 -0
- synlynk-0.27.5/tests/test_governs_relay_events.py +79 -0
- synlynk-0.27.5/tests/test_governs_rephase.py +21 -0
- synlynk-0.27.5/tests/test_governs_resolver.py +128 -0
- synlynk-0.27.5/tests/test_governs_start.py +78 -0
- synlynk-0.27.5/tests/test_governs_sweep.py +126 -0
- synlynk-0.27.5/tests/test_graph_refresh_api.py +110 -0
- synlynk-0.27.5/tests/test_graph_traversal_cache.py +293 -0
- synlynk-0.27.5/tests/test_graphify_skills.py +72 -0
- synlynk-0.27.5/tests/test_greenfield_blueprints.py +41 -0
- synlynk-0.27.5/tests/test_grok_adapter.py +54 -0
- synlynk-0.27.5/tests/test_grok_model_discovery.py +148 -0
- synlynk-0.27.5/tests/test_grok_write_guard.py +82 -0
- synlynk-0.27.5/tests/test_handoff_cycle_map.py +22 -0
- synlynk-0.27.5/tests/test_handover.py +192 -0
- synlynk-0.27.5/tests/test_harness_adapter_permission_error_identity.py +23 -0
- synlynk-0.27.5/tests/test_harness_adapter_registry.py +50 -0
- synlynk-0.27.5/tests/test_harness_billing_config.py +66 -0
- synlynk-0.27.5/tests/test_harness_compatibility.py +296 -0
- synlynk-0.27.5/tests/test_harness_model_id_hygiene.py +148 -0
- synlynk-0.27.5/tests/test_heal.py +119 -0
- synlynk-0.27.5/tests/test_heal_cycles.py +104 -0
- synlynk-0.27.5/tests/test_heal_orphans.py +52 -0
- synlynk-0.27.5/tests/test_home_cmd.py +48 -0
- synlynk-0.27.5/tests/test_housekeeping.py +127 -0
- synlynk-0.27.5/tests/test_hud_buffer.py +43 -0
- synlynk-0.27.5/tests/test_hud_cycles.py +18 -0
- synlynk-0.27.5/tests/test_hud_errors.py +22 -0
- synlynk-0.27.5/tests/test_hud_integration.py +96 -0
- synlynk-0.27.5/tests/test_hud_live.py +37 -0
- synlynk-0.27.5/tests/test_hud_renderer.py +96 -0
- synlynk-0.27.5/tests/test_hud_snapshot.py +91 -0
- synlynk-0.27.5/tests/test_identity_file_permissions.py +70 -0
- synlynk-0.27.5/tests/test_identity_init_role.py +263 -0
- synlynk-0.27.5/tests/test_identity_init_role_token_seed.py +47 -0
- synlynk-0.27.5/tests/test_identity_list.py +23 -0
- synlynk-0.27.5/tests/test_identity_roles.py +45 -0
- synlynk-0.27.5/tests/test_impact.py +85 -0
- synlynk-0.27.5/tests/test_init_business_goals.py +5 -0
- synlynk-0.27.5/tests/test_init_noninteractive.py +84 -0
- synlynk-0.27.5/tests/test_init_rollback.py +87 -0
- synlynk-0.27.5/tests/test_install.py +25 -0
- synlynk-0.27.5/tests/test_install_manifest.py +112 -0
- synlynk-0.27.5/tests/test_install_sh.py +22 -0
- synlynk-0.27.5/tests/test_install_sh_matrix.py +26 -0
- synlynk-0.27.5/tests/test_instruction_reach.py +469 -0
- synlynk-0.27.5/tests/test_instructions.py +362 -0
- synlynk-0.27.5/tests/test_issue_2205_job_status.py +100 -0
- synlynk-0.27.5/tests/test_jev_engine.py +101 -0
- synlynk-0.27.5/tests/test_job_provenance_purpose_resolution.py +74 -0
- synlynk-0.27.5/tests/test_job_status_projection.py +367 -0
- synlynk-0.27.5/tests/test_job_status_taxonomy.py +81 -0
- synlynk-0.27.5/tests/test_job_timing_metrics.py +228 -0
- synlynk-0.27.5/tests/test_job_truth.py +508 -0
- synlynk-0.27.5/tests/test_jobs.py +5004 -0
- synlynk-0.27.5/tests/test_jobs_gh_write_provisional.py +102 -0
- synlynk-0.27.5/tests/test_jobs_reconcile_live19.py +233 -0
- synlynk-0.27.5/tests/test_launch.py +336 -0
- synlynk-0.27.5/tests/test_launch_templates.py +18 -0
- synlynk-0.27.5/tests/test_layered_topology_dispatch.py +107 -0
- synlynk-0.27.5/tests/test_lazy.py +42 -0
- synlynk-0.27.5/tests/test_lifecycle_telemetry.py +81 -0
- synlynk-0.27.5/tests/test_live19_live20_e2e.py +210 -0
- synlynk-0.27.5/tests/test_live27_catalog_invariants.py +151 -0
- synlynk-0.27.5/tests/test_local_adapter.py +61 -0
- synlynk-0.27.5/tests/test_local_agent.py +656 -0
- synlynk-0.27.5/tests/test_local_agent_ab_test.py +154 -0
- synlynk-0.27.5/tests/test_local_agent_concurrency.py +211 -0
- synlynk-0.27.5/tests/test_local_agent_hardware.py +101 -0
- synlynk-0.27.5/tests/test_local_agent_seed.py +97 -0
- synlynk-0.27.5/tests/test_local_http_auth.py +50 -0
- synlynk-0.27.5/tests/test_local_pilot.py +644 -0
- synlynk-0.27.5/tests/test_local_pilot_ledger.py +681 -0
- synlynk-0.27.5/tests/test_local_qualification_benchmark.py +221 -0
- synlynk-0.27.5/tests/test_logs_token_redaction.py +27 -0
- synlynk-0.27.5/tests/test_magic_heal.py +82 -0
- synlynk-0.27.5/tests/test_maintainer.py +64 -0
- synlynk-0.27.5/tests/test_maintainer_graph_sweep.py +94 -0
- synlynk-0.27.5/tests/test_marketing.py +277 -0
- synlynk-0.27.5/tests/test_marketing_workflow.py +100 -0
- synlynk-0.27.5/tests/test_media.py +64 -0
- synlynk-0.27.5/tests/test_merge_class.py +37 -0
- synlynk-0.27.5/tests/test_merge_oracle.py +41 -0
- synlynk-0.27.5/tests/test_mesh_conflict.py +189 -0
- synlynk-0.27.5/tests/test_mesh_federation.py +90 -0
- synlynk-0.27.5/tests/test_migrate.py +1127 -0
- synlynk-0.27.5/tests/test_migrations_framework.py +320 -0
- synlynk-0.27.5/tests/test_milestone_circuit_breaker_failover.py +65 -0
- synlynk-0.27.5/tests/test_milestone_effect_failover.py +124 -0
- synlynk-0.27.5/tests/test_model_catalog_discovery.py +294 -0
- synlynk-0.27.5/tests/test_model_resolution_allowlist.py +86 -0
- synlynk-0.27.5/tests/test_models.py +149 -0
- synlynk-0.27.5/tests/test_models_catalog.py +217 -0
- synlynk-0.27.5/tests/test_modularise.py +73 -0
- synlynk-0.27.5/tests/test_multiharness_journeys_e2e.py +144 -0
- synlynk-0.27.5/tests/test_multirepo_graph.py +68 -0
- synlynk-0.27.5/tests/test_multitrack_quota.py +123 -0
- synlynk-0.27.5/tests/test_muse_adapter.py +72 -0
- synlynk-0.27.5/tests/test_muse_harness.py +361 -0
- synlynk-0.27.5/tests/test_noop_worktree_cleanup.py +102 -0
- synlynk-0.27.5/tests/test_notifier_slack.py +48 -0
- synlynk-0.27.5/tests/test_observatory.py +121 -0
- synlynk-0.27.5/tests/test_onboarding_autoprobe.py +63 -0
- synlynk-0.27.5/tests/test_onboarding_db_migration.py +40 -0
- synlynk-0.27.5/tests/test_onboarding_safety.py +171 -0
- synlynk-0.27.5/tests/test_onboarding_state.py +88 -0
- synlynk-0.27.5/tests/test_onboarding_topology.py +157 -0
- synlynk-0.27.5/tests/test_oracle_self_transcript_crosscheck.py +231 -0
- synlynk-0.27.5/tests/test_oracle_ui.py +32 -0
- synlynk-0.27.5/tests/test_pack.py +87 -0
- synlynk-0.27.5/tests/test_pack_rich.py +96 -0
- synlynk-0.27.5/tests/test_pack_rich_context.py +51 -0
- synlynk-0.27.5/tests/test_packaging.py +134 -0
- synlynk-0.27.5/tests/test_packaging_metadata.py +31 -0
- synlynk-0.27.5/tests/test_parity.py +245 -0
- synlynk-0.27.5/tests/test_payment_models.py +552 -0
- synlynk-0.27.5/tests/test_platform_ops.py +316 -0
- synlynk-0.27.5/tests/test_pm_agent.py +226 -0
- synlynk-0.27.5/tests/test_pm_sweep_watchdog.py +112 -0
- synlynk-0.27.5/tests/test_policy.py +361 -0
- synlynk-0.27.5/tests/test_policy_cli.py +53 -0
- synlynk-0.27.5/tests/test_policy_gates.py +195 -0
- synlynk-0.27.5/tests/test_pr_check.py +187 -0
- synlynk-0.27.5/tests/test_pr_check_impact.py +41 -0
- synlynk-0.27.5/tests/test_pr_rebase.py +46 -0
- synlynk-0.27.5/tests/test_pr_review_multiplier.py +238 -0
- synlynk-0.27.5/tests/test_preflight.py +129 -0
- synlynk-0.27.5/tests/test_preflight_e2e.py +54 -0
- synlynk-0.27.5/tests/test_preflight_mcp.py +22 -0
- synlynk-0.27.5/tests/test_probe.py +562 -0
- synlynk-0.27.5/tests/test_probe_binding.py +52 -0
- synlynk-0.27.5/tests/test_process_lifecycle.py +262 -0
- synlynk-0.27.5/tests/test_product_store.py +202 -0
- synlynk-0.27.5/tests/test_project_root_hardening.py +26 -0
- synlynk-0.27.5/tests/test_provenance_attestation.py +291 -0
- synlynk-0.27.5/tests/test_pytest_collection.py +9 -0
- synlynk-0.27.5/tests/test_pytest_shim.py +90 -0
- synlynk-0.27.5/tests/test_qa_gate.py +265 -0
- synlynk-0.27.5/tests/test_quota_burn_rate_weighting.py +97 -0
- synlynk-0.27.5/tests/test_quota_calibration.py +173 -0
- synlynk-0.27.5/tests/test_quota_cli.py +76 -0
- synlynk-0.27.5/tests/test_quota_reservation_integration.py +146 -0
- synlynk-0.27.5/tests/test_readiness_matrix.py +249 -0
- synlynk-0.27.5/tests/test_rebase.py +7 -0
- synlynk-0.27.5/tests/test_reconcile_circuit_breaker.py +116 -0
- synlynk-0.27.5/tests/test_reconciler_unattended_loop.py +369 -0
- synlynk-0.27.5/tests/test_redaction.py +54 -0
- synlynk-0.27.5/tests/test_regen_e2e.py +23 -0
- synlynk-0.27.5/tests/test_regen_guard.py +48 -0
- synlynk-0.27.5/tests/test_registry_vault.py +17 -0
- synlynk-0.27.5/tests/test_relay.py +24 -0
- synlynk-0.27.5/tests/test_relay_cancellation.py +65 -0
- synlynk-0.27.5/tests/test_relay_hub.py +1248 -0
- synlynk-0.27.5/tests/test_relay_hub_integration.py +431 -0
- synlynk-0.27.5/tests/test_relay_hub_onboarding.py +82 -0
- synlynk-0.27.5/tests/test_relay_p2p.py +101 -0
- synlynk-0.27.5/tests/test_release.py +238 -0
- synlynk-0.27.5/tests/test_release_authority.py +90 -0
- synlynk-0.27.5/tests/test_release_checklist.py +68 -0
- synlynk-0.27.5/tests/test_release_docs_pr_mode.py +100 -0
- synlynk-0.27.5/tests/test_release_marketing.py +276 -0
- synlynk-0.27.5/tests/test_release_signals.py +208 -0
- synlynk-0.27.5/tests/test_repo_classifier.py +35 -0
- synlynk-0.27.5/tests/test_resolve_dispatch_harness.py +181 -0
- synlynk-0.27.5/tests/test_roadmap_commands.py +65 -0
- synlynk-0.27.5/tests/test_roadmap_governed_update.py +246 -0
- synlynk-0.27.5/tests/test_roadmap_linkage.py +67 -0
- synlynk-0.27.5/tests/test_roadmap_table_converter.py +43 -0
- synlynk-0.27.5/tests/test_role_add_identity_prompt.py +43 -0
- synlynk-0.27.5/tests/test_roles.py +314 -0
- synlynk-0.27.5/tests/test_rollback.py +464 -0
- synlynk-0.27.5/tests/test_runners.py +33 -0
- synlynk-0.27.5/tests/test_sandbox.py +24 -0
- synlynk-0.27.5/tests/test_scan.py +70 -0
- synlynk-0.27.5/tests/test_scan_graphify_auto.py +236 -0
- synlynk-0.27.5/tests/test_selftest.py +688 -0
- synlynk-0.27.5/tests/test_selftest_isolation.py +134 -0
- synlynk-0.27.5/tests/test_sentinel.py +560 -0
- synlynk-0.27.5/tests/test_sentinel_noop_alert.py +97 -0
- synlynk-0.27.5/tests/test_sentinel_quota_exhaustion.py +41 -0
- synlynk-0.27.5/tests/test_session.py +185 -0
- synlynk-0.27.5/tests/test_sfia.py +162 -0
- synlynk-0.27.5/tests/test_slack_notifier.py +48 -0
- synlynk-0.27.5/tests/test_sop_reload_tiering.py +141 -0
- synlynk-0.27.5/tests/test_spike.py +51 -0
- synlynk-0.27.5/tests/test_sqlite_concurrency.py +123 -0
- synlynk-0.27.5/tests/test_standalone_venv.py +28 -0
- synlynk-0.27.5/tests/test_state_db_soak.py +225 -0
- synlynk-0.27.5/tests/test_state_inventory.py +506 -0
- synlynk-0.27.5/tests/test_state_registry.py +144 -0
- synlynk-0.27.5/tests/test_state_repair.py +104 -0
- synlynk-0.27.5/tests/test_static_scan.py +624 -0
- synlynk-0.27.5/tests/test_status.py +210 -0
- synlynk-0.27.5/tests/test_story_home_claims.py +98 -0
- synlynk-0.27.5/tests/test_story_lifecycle.py +76 -0
- synlynk-0.27.5/tests/test_story_provisioning.py +173 -0
- synlynk-0.27.5/tests/test_story_unstranding.py +128 -0
- synlynk-0.27.5/tests/test_subscriptions_migration.py +57 -0
- synlynk-0.27.5/tests/test_support_engineer.py +19 -0
- synlynk-0.27.5/tests/test_surface.py +59 -0
- synlynk-0.27.5/tests/test_surface_tiering.py +65 -0
- synlynk-0.27.5/tests/test_swarm_engine.py +67 -0
- synlynk-0.27.5/tests/test_synlynk.py +9161 -0
- synlynk-0.27.5/tests/test_task_leases.py +315 -0
- synlynk-0.27.5/tests/test_task_type_inference.py +30 -0
- synlynk-0.27.5/tests/test_taxonomy.py +127 -0
- synlynk-0.27.5/tests/test_taxonomy_standards.py +73 -0
- synlynk-0.27.5/tests/test_tc9_gh_write_probe.py +229 -0
- synlynk-0.27.5/tests/test_team.py +75 -0
- synlynk-0.27.5/tests/test_testbed_cli.py +87 -0
- synlynk-0.27.5/tests/test_testbed_driver.py +114 -0
- synlynk-0.27.5/tests/test_testbed_identities.py +55 -0
- synlynk-0.27.5/tests/test_testbed_installer.py +63 -0
- synlynk-0.27.5/tests/test_testbed_scenarios.py +86 -0
- synlynk-0.27.5/tests/test_tier_upgrade_rollback.py +40 -0
- synlynk-0.27.5/tests/test_todo_md.py +55 -0
- synlynk-0.27.5/tests/test_tool_installer.py +144 -0
- synlynk-0.27.5/tests/test_tool_installer_provision.py +16 -0
- synlynk-0.27.5/tests/test_tpm_hooks.py +102 -0
- synlynk-0.27.5/tests/test_tpm_sweep.py +297 -0
- synlynk-0.27.5/tests/test_tui.py +75 -0
- synlynk-0.27.5/tests/test_tui_panels.py +54 -0
- synlynk-0.27.5/tests/test_types_registry.py +74 -0
- synlynk-0.27.5/tests/test_unified_onboarding_e2e.py +80 -0
- synlynk-0.27.5/tests/test_upgrade.py +297 -0
- synlynk-0.27.5/tests/test_upgrade_all.py +111 -0
- synlynk-0.27.5/tests/test_upgrade_uninstall.py +20 -0
- synlynk-0.27.5/tests/test_ux_journey_map.py +51 -0
- synlynk-0.27.5/tests/test_ux_nudges.py +48 -0
- synlynk-0.27.5/tests/test_uxcore_reads.py +65 -0
- synlynk-0.27.5/tests/test_uxcore_writes.py +228 -0
- synlynk-0.27.5/tests/test_v024_e2e_integration.py +56 -0
- synlynk-0.27.5/tests/test_v0274_acceptance_matrix.py +84 -0
- synlynk-0.27.5/tests/test_v0_20_0_milestone_spec.py +55 -0
- synlynk-0.27.5/tests/test_verify_effects.py +434 -0
- synlynk-0.27.5/tests/test_version_policy.py +27 -0
- synlynk-0.27.5/tests/test_viz.py +926 -0
- synlynk-0.27.5/tests/test_viz_banner.py +22 -0
- synlynk-0.27.5/tests/test_viz_bs6.py +50 -0
- synlynk-0.27.5/tests/test_viz_circuit_breaker.py +32 -0
- synlynk-0.27.5/tests/test_viz_dynamic_lod.py +50 -0
- synlynk-0.27.5/tests/test_viz_gantt_rows.py +79 -0
- synlynk-0.27.5/tests/test_viz_generic_scanner.py +105 -0
- synlynk-0.27.5/tests/test_viz_goals.py +7 -0
- synlynk-0.27.5/tests/test_viz_governs_board.py +75 -0
- synlynk-0.27.5/tests/test_viz_graphify.py +143 -0
- synlynk-0.27.5/tests/test_viz_graphify_routes.py +99 -0
- synlynk-0.27.5/tests/test_viz_infra_view.py +57 -0
- synlynk-0.27.5/tests/test_viz_kg_interactive.py +68 -0
- synlynk-0.27.5/tests/test_viz_logical_expand.py +252 -0
- synlynk-0.27.5/tests/test_viz_logical_view.py +31 -0
- synlynk-0.27.5/tests/test_viz_nav.py +88 -0
- synlynk-0.27.5/tests/test_viz_nav_restructure.py +193 -0
- synlynk-0.27.5/tests/test_viz_onboarding.py +188 -0
- synlynk-0.27.5/tests/test_viz_onboarding_engine.py +156 -0
- synlynk-0.27.5/tests/test_viz_product_view.py +50 -0
- synlynk-0.27.5/tests/test_viz_refresh_button.py +34 -0
- synlynk-0.27.5/tests/test_viz_regression.py +23 -0
- synlynk-0.27.5/tests/test_viz_roles.py +43 -0
- synlynk-0.27.5/tests/test_viz_sentinel_hud.py +537 -0
- synlynk-0.27.5/tests/test_viz_serve.py +212 -0
- synlynk-0.27.5/tests/test_viz_skinny_payloads.py +103 -0
- synlynk-0.27.5/tests/test_viz_source_api.py +35 -0
- synlynk-0.27.5/tests/test_viz_unified_canvas.py +174 -0
- synlynk-0.27.5/tests/test_viz_views.py +159 -0
- synlynk-0.27.5/tests/test_viz_worktrees.py +25 -0
- synlynk-0.27.5/tests/test_viz_world_radar.py +63 -0
- synlynk-0.27.5/tests/test_viz_write_path_table.py +43 -0
- synlynk-0.27.5/tests/test_vizor_architect_hud.py +32 -0
- synlynk-0.27.5/tests/test_vizor_daemon.py +927 -0
- synlynk-0.27.5/tests/test_vizor_daemon_stream.py +291 -0
- synlynk-0.27.5/tests/test_vizor_efficiency.py +185 -0
- synlynk-0.27.5/tests/test_vizor_goal_scoping.py +78 -0
- synlynk-0.27.5/tests/test_vizor_goals_panel.py +26 -0
- synlynk-0.27.5/tests/test_vizor_heartbeats.py +188 -0
- synlynk-0.27.5/tests/test_vizor_html_relative_routes.py +12 -0
- synlynk-0.27.5/tests/test_vizor_hub_fence.py +59 -0
- synlynk-0.27.5/tests/test_vizor_memorable_ports.py +50 -0
- synlynk-0.27.5/tests/test_vizor_multi_workspace_e2e.py +106 -0
- synlynk-0.27.5/tests/test_vizor_repo_truth.py +134 -0
- synlynk-0.27.5/tests/test_vizor_rxcc_truth.py +71 -0
- synlynk-0.27.5/tests/test_vizor_scoped_routing.py +81 -0
- synlynk-0.27.5/tests/test_vizor_workspace_context.py +41 -0
- synlynk-0.27.5/tests/test_vizor_write_routes.py +94 -0
- synlynk-0.27.5/tests/test_wal_ledger.py +127 -0
- synlynk-0.27.5/tests/test_watch_graph_drift.py +61 -0
- synlynk-0.27.5/tests/test_wave2_state_policy.py +58 -0
- synlynk-0.27.5/tests/test_wave4_runtime_surfaces.py +38 -0
- synlynk-0.27.5/tests/test_wave6.py +53 -0
- synlynk-0.27.5/tests/test_wizard.py +344 -0
- synlynk-0.27.5/tests/test_wizard_onboarding_engine.py +62 -0
- synlynk-0.27.5/tests/test_workspace_add_repo.py +99 -0
- synlynk-0.27.5/tests/test_workspace_agent.py +51 -0
- synlynk-0.27.5/tests/test_workspace_scan.py +698 -0
- synlynk-0.27.5/tests/test_worktree.py +562 -0
- synlynk-0.27.5/tests/test_worktree_lease.py +227 -0
- synlynk-0.27.5/tests/test_worktree_lease_concurrency.py +64 -0
- synlynk-0.27.5/tests/test_worktree_lineage.py +110 -0
- synlynk-0.27.5/tests/test_worktree_pre_commit.py +75 -0
- synlynk-0.27.5/tests/test_worktree_prune.py +141 -0
- synlynk-0.27.5/tests/test_worktree_sparse.py +130 -0
- synlynk-0.27.5/tests/test_worktree_sparse_ast.py +134 -0
- synlynk-0.27.5/tests/test_worktree_timestamp.py +50 -0
- 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.
|
synlynk-0.27.5/PKG-INFO
ADDED
|
@@ -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
|
+
| [](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-official-reference.pdf) | [](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-command-reference.pdf) | [](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 -->
|
synlynk-0.27.5/README.md
ADDED
|
@@ -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
|
+
| [](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-official-reference.pdf) | [](https://raw.githubusercontent.com/nikhilsoman/synlynk/main/docs/synlynk-command-reference.pdf) | [](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"]
|
synlynk-0.27.5/setup.cfg
ADDED