agent-lifecycle-kit 2.38.0__tar.gz → 2.40.0__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.
- {agent_lifecycle_kit-2.38.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-2.40.0}/PKG-INFO +2 -2
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/README.md +1 -1
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/pyproject.toml +1 -1
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/_version.py +1 -1
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/closing_resource_recovery.py +191 -103
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/declared_ledger.py +79 -39
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/authority_io.py +29 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/query.py +14 -1
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +2 -2
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/tests/cli/fixtures/external-consumer-cases.json +3 -1
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/LICENSE +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/NOTICE +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/README.md +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/manifest.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/docs/guides/ai-sdlc-integration.md +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/docs/ru/guides/ai-sdlc-integration.md +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/setup.cfg +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/__main__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/closing_resource_admission.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/closing_resource_policy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/closing_resources.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/closing_types.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/contracts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/declared_ledger_legacy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/declared_ledger_records.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/financial_transactions.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/host_bridge.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/input_fit.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/journal.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/legacy_source_usage.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/normalization.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/opening_balances.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/profile_schema.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/source_usage_context.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/support_profiles.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/usage_types.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/workflow_authority_store.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/workflow_state_store.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/accounting/workflow_store.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/agent_plugin_probe.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/attempt_authority.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/bootstrap_r11.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/codex_exact_prompt.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/codex_input_diagnostics.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/codex_prompt_preparation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/codex_source_exposure.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/codex_source_subject.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/external_check.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/external_jobs.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/immutable_input.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/input_lifecycle.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/launch_execution.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/launch_preflight.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/lifecycle_control.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/limited_native_evidence.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/managed_process.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/ordinary_audit.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/private_input.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/process.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/process_admission.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/process_capture.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/process_control.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/process_groups.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/process_telemetry.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/qualification.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/qualification_context.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/session_store.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/source_review_contracts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/source_review_history.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/source_review_inputs.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/source_review_preparation_records.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/source_review_roles.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/source_review_shards.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/source_review_support.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/source_review_transcript.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/start_input.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/start_receipts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/start_routing.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/windows_pipe.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/adapter_sessions/worktree_identity.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/delta.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/delta_review.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/domain_language.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/external_checks.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/implementation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/ownership.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/package.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/proof_chain.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/proof_findings.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/proof_integrity.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/review_packet.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/audit/security_analysis.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/benchmarks/qualification.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/benchmarks/reporting.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/benchmarks/stratification.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/changesets/git.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/changesets/git_io.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/changesets/snapshot.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/adapter.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/command_registry.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/compact_plan_commands.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch_adapters.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch_audit.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch_contracts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch_metrics.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch_observability.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch_planning.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/dispatch_research.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/errors.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/followup.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/lifecycle_parsers.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/main.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/metrics_parser.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/observability_parsers.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/parsers.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/plan_lock_commands.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/planning_parsers.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/policy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/project.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/research.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/start.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/strategy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/workflow_task_parsers.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/cli/worktree.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/compiler/output_contract.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/compiler/phase_packets.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/compiler/small_model_packets.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/compiler/task_packets.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/context/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/context/checkpoint_store.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/context/checkpoints.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/context/external_memory.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/context/profiles.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/context/rendering.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/context/thread_bridge_context.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/agent_plugin_qualification_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/artifact_authoring_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/audit_optimization_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/authority_text.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/bounded_json.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/closing_resource_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/closing_time.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/closing_window_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/compact_plan_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/compatibility.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/deadline_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/deadlines.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/display_identity.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/domain_language.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/domain_language_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/ed25519.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/errors.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/evidence_receipt_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/execution_target.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/external_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/external_job_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/finding_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/goal_validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/immutable_input_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/implementation_audit_validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/independent_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/launch_qualification.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/legacy_runner_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/lifecycle_action_catalog.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/lifecycle_control_definitions.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/lifecycle_control_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/lifecycle_control_validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/local_launch_validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/model_classes.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/multi_run_view_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/ownership_paths.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/paths.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/performance_limits.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/persistence.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/phase_packet_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/plan_delta_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/plan_manifest_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/preparation_policy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/private_storage.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/private_storage_compat.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/process_execution_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/process_lock.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/process_redaction.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/project_profile_preset_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/proof_validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/public_locators.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/quality_modes.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/redaction.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/release_accounting_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/research_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/review_input_types.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/review_round_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/reviewer_identity_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/scoped_usage_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/security_analysis_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/statistical_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/structured_result_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/thread_bridge_schema_definitions.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/thread_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/thread_bridge_validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/token_estimation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/validation_ladder_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/windows_security.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_artifact_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_authority.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_authority_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_authorization_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_continuation_batch_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_continuation_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_economics_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_finalization_types.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_run_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_state_authority.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_state_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_storage.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_storage_context.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_storage_io.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/contracts/workflow_storage_schemas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/external-checks/declared-dependencies.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/external-checks/import-boundaries.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/external-checks/module-dependencies.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/lifecycle-baselines.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/model-routing-profile.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/feature-implementation.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/quick-change.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/research-review.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/risk-execution-policy.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/data/profiles/small-context-profile.v1.json +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/diagnostics/readiness.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/followup/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/followup/records.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/freeze/locks.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/freeze/package_integrity.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/freeze/review_inputs.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/goal/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/goal/records.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/goal/view.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/agent_plugin_qualification.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/context_events.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/external_jobs.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_common.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_profile.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/lifecycle_control.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/lifecycle_control_qualification.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/lifecycle_gate.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/opencode_compatibility.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/process_port.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/structured_results.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/thread_bridge.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/planning.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/security_findings.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/audit_efficiency.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/audit_optimization.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/audit_samples.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/command_resources.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/cost_collection.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/costs.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/goal_progress.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/phase_resources.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/plan_package_comparison.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/release_accounting.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/metrics/workflow_economics.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/migration/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/migration/legacy_runner.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/model_routing/resolver.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/authority.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/canonical.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/ed25519.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/git_objects.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/matching.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/scanner.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/compact_packages.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/completeness.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/continuity.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/deltas.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/manifest_contract.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/prerequisites.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/templates.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/tiering.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/traceability.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/planning/verification.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/apply.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/proposals.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/quality_floor.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/policy/thread_bridge.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/project/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/project/domain_language.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/project/guidance.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/project/merge.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/project/presets.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/project/principles.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/project/profile.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/py.typed +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/architecture_policy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/dependency_impact.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/external_checks.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/packs.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/security_analysis.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/quality/validation_ladder.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/attention.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/change_summary.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/execution_resources.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/multi_run.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/reporting/usage_export.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/research/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/research/evidence.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/research/preflight.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/research/provenance.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/research/validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/resources.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review/provenance.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review/validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/assignments.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/contracts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/independence.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/operator_templates.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/preflight.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/results.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/review_mesh/validation_helpers.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/runner/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/runner/core.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/specification/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/specification/completion_check.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/specification/validation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/artifact_builders.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/audit_evidence.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/authorization.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/checkpoint_gate.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/closing_policy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/closing_window.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/continuation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/continuation_batch.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/controller.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/deadline_guards.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/events.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/gates.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/immutable_input.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/initialization.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/leases.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/limited_usage.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/next_action.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/operation_kernel.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/plan_adoption.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/run.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/state.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/storage.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/storage_io.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/task_outcomes.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/task_start.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/transactions.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/transition_contract.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
- {agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle_kit.egg-info/top_level.txt +0 -0
{agent_lifecycle_kit-2.38.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-2.40.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-lifecycle-kit
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.40.0
|
|
4
4
|
Summary: Provider-neutral lifecycle control layer that helps coding agents plan, execute, validate, and prove software tasks to completion.
|
|
5
5
|
Author: Agent Lifecycle Kit contributors
|
|
6
6
|
License: Apache-2.0
|
|
@@ -42,7 +42,7 @@ Release 2.28 adds [bounded lifecycle and accounting baselines](docs/reference/pe
|
|
|
42
42
|
## Quick start
|
|
43
43
|
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.23 adds [compact S0/S1 authoring](docs/reference/tier-proportional-plan-packages.md) with explicit checklist completion and unchanged approval gates. Release 2.22 adds [conservative plan-review reuse](docs/reference/conservative-delta-review.md) with independent current applicability and no automatic full reruns. Release 2.21 adds [command accounting, bounded preparation and response recovery](docs/reference/source-native-workflow-accounting.md). Release 2.20 adds [target-bound initialization](docs/reference/cli.md#release-220-composed-initialization-and-digest-display), [bounded local continuation](docs/reference/workflow-continuation.md) and batched Git snapshots. Release 2.19 adds [safe artifact authoring and planning preflight](docs/reference/safe-artifact-authoring.md), [bounded review handoff](docs/reference/review-mesh.md#bounded-review-handoff) and thin skills with complete references. Release 2.18 bounds process/Git diagnostics, hardens signing and distinguishes OpenCode 1.x/2.x compatibility ([adapter notes](docs/adapters/opencode.md)); 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
|
|
44
44
|
|
|
45
|
-
It includes macOS, Linux and Windows instructions, Python 3.11-3.15, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.
|
|
45
|
+
It includes macOS, Linux and Windows instructions, Python 3.11-3.15, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.40.0`, and common `agent-lifecycle version` errors. See [2.15 migration notes](docs/reference/cli.md#migrating-authority-artifacts-to-215) and [authority boundaries](docs/reference/authority-artifact-boundaries.md).
|
|
46
46
|
|
|
47
47
|
For a quick start, run:
|
|
48
48
|
|
|
@@ -19,7 +19,7 @@ Release 2.28 adds [bounded lifecycle and accounting baselines](docs/reference/pe
|
|
|
19
19
|
## Quick start
|
|
20
20
|
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.23 adds [compact S0/S1 authoring](docs/reference/tier-proportional-plan-packages.md) with explicit checklist completion and unchanged approval gates. Release 2.22 adds [conservative plan-review reuse](docs/reference/conservative-delta-review.md) with independent current applicability and no automatic full reruns. Release 2.21 adds [command accounting, bounded preparation and response recovery](docs/reference/source-native-workflow-accounting.md). Release 2.20 adds [target-bound initialization](docs/reference/cli.md#release-220-composed-initialization-and-digest-display), [bounded local continuation](docs/reference/workflow-continuation.md) and batched Git snapshots. Release 2.19 adds [safe artifact authoring and planning preflight](docs/reference/safe-artifact-authoring.md), [bounded review handoff](docs/reference/review-mesh.md#bounded-review-handoff) and thin skills with complete references. Release 2.18 bounds process/Git diagnostics, hardens signing and distinguishes OpenCode 1.x/2.x compatibility ([adapter notes](docs/adapters/opencode.md)); 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
|
|
21
21
|
|
|
22
|
-
It includes macOS, Linux and Windows instructions, Python 3.11-3.15, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.
|
|
22
|
+
It includes macOS, Linux and Windows instructions, Python 3.11-3.15, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.40.0`, and common `agent-lifecycle version` errors. See [2.15 migration notes](docs/reference/cli.md#migrating-authority-artifacts-to-215) and [authority boundaries](docs/reference/authority-artifact-boundaries.md).
|
|
23
23
|
|
|
24
24
|
For a quick start, run:
|
|
25
25
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-lifecycle-kit"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.40.0"
|
|
8
8
|
description = "Provider-neutral lifecycle control layer that helps coding agents plan, execute, validate, and prove software tasks to completion."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.16"
|
|
@@ -156,6 +156,97 @@ _SIDECAR_FIELDS = frozenset(
|
|
|
156
156
|
)
|
|
157
157
|
|
|
158
158
|
|
|
159
|
+
def _closing_sidecar_owner(
|
|
160
|
+
item: dict,
|
|
161
|
+
operations: dict,
|
|
162
|
+
seen: set[str],
|
|
163
|
+
window: str,
|
|
164
|
+
proposal: dict,
|
|
165
|
+
effect_digest: str,
|
|
166
|
+
) -> tuple[str, str]:
|
|
167
|
+
"""Validate sidecar membership before inspecting native financial facts."""
|
|
168
|
+
if (
|
|
169
|
+
type(item) is not dict
|
|
170
|
+
or set(item) != _SIDECAR_FIELDS
|
|
171
|
+
or (item.get("schemaVersion") != "agent-closing-operation-binding.v1")
|
|
172
|
+
):
|
|
173
|
+
_unavailable("Closing operation sidecar is malformed")
|
|
174
|
+
operation_id = item.get("operationId")
|
|
175
|
+
if type(operation_id) is not str or operation_id in seen or operation_id not in operations:
|
|
176
|
+
_unavailable("Closing operation is duplicated or absent from native accounting")
|
|
177
|
+
seen.add(operation_id)
|
|
178
|
+
if item.get("closingWindowId") != window:
|
|
179
|
+
_unavailable("Closing operation belongs to another window")
|
|
180
|
+
if (
|
|
181
|
+
item.get("runId") != proposal["runId"]
|
|
182
|
+
or item.get("budgetScopeId") != proposal["budgetScopeId"]
|
|
183
|
+
or item.get("bindingId") != proposal["bindingId"]
|
|
184
|
+
or item.get("policyEffectDigest") != effect_digest
|
|
185
|
+
or item.get("unit") != proposal["unit"]
|
|
186
|
+
):
|
|
187
|
+
_unavailable("Closing operation differs from the signed scope")
|
|
188
|
+
for revision_name in ("expectedJournalRevision", "expectedWorkflowRevision", "expectedAuthorityEpoch"):
|
|
189
|
+
if _amount(item[revision_name], revision_name) > (1 << 53) - 1:
|
|
190
|
+
_unavailable("Closing operation revision exceeds the safe-integer domain")
|
|
191
|
+
if (
|
|
192
|
+
type(item["expectedGuardStateDigest"]) is not str
|
|
193
|
+
or re.fullmatch(r"[0-9a-f]{64}", item["expectedGuardStateDigest"]) is None
|
|
194
|
+
):
|
|
195
|
+
_unavailable("Closing guard identity is malformed")
|
|
196
|
+
owner = _owner_key(item.get("owner"))
|
|
197
|
+
return operation_id, owner
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def _validate_closing_native_binding(
|
|
201
|
+
item: dict,
|
|
202
|
+
native: dict,
|
|
203
|
+
operation_id: str,
|
|
204
|
+
owner: str,
|
|
205
|
+
proposal: dict,
|
|
206
|
+
) -> None:
|
|
207
|
+
"""Require the exact persisted native identity for this sidecar."""
|
|
208
|
+
binding = native.get("binding")
|
|
209
|
+
if type(binding) is not dict or native.get("digest") != digest(binding):
|
|
210
|
+
_unavailable("Native operation binding is corrupted")
|
|
211
|
+
if (
|
|
212
|
+
item.get("nativeOperationDigest") != native["digest"]
|
|
213
|
+
or binding.get("operation_id") != operation_id
|
|
214
|
+
or binding.get("budget_scope_id") != proposal["budgetScopeId"]
|
|
215
|
+
or binding.get("run_id") != proposal["runId"]
|
|
216
|
+
or (binding.get("task_id") or "") != owner
|
|
217
|
+
or binding.get("unit_definition_id") != proposal["unit"]["unitDefinitionId"]
|
|
218
|
+
or binding.get("upper_bound_tokens") != item.get("upperBound")
|
|
219
|
+
):
|
|
220
|
+
_unavailable("Closing sidecar does not match the native operation")
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def _closing_native_amounts(item: dict, native: dict) -> tuple[int | None, int]:
|
|
224
|
+
"""Preserve settlement and reservation checks in their original order."""
|
|
225
|
+
upper = _amount(item["upperBound"], "operation upper bound")
|
|
226
|
+
reserved = _amount(native.get("reservation"), "native reservation")
|
|
227
|
+
if reserved not in {0, upper}:
|
|
228
|
+
_unavailable("Native reservation has an unsupported partial value")
|
|
229
|
+
actual = native.get("actual")
|
|
230
|
+
if actual is not None:
|
|
231
|
+
_amount(actual, "native actual")
|
|
232
|
+
native_status = native.get("state")
|
|
233
|
+
if native_status not in {
|
|
234
|
+
"RESERVED",
|
|
235
|
+
"DISPATCHED",
|
|
236
|
+
"UNAVAILABLE",
|
|
237
|
+
"SETTLED",
|
|
238
|
+
"CANCELLED_WITH_NO_DISPATCH_PROOF",
|
|
239
|
+
}:
|
|
240
|
+
_unavailable("Native operation state is unsupported")
|
|
241
|
+
if (native_status == "SETTLED") != (actual is not None):
|
|
242
|
+
_unavailable("Native settlement state and actual differ")
|
|
243
|
+
if native_status in {"SETTLED", "CANCELLED_WITH_NO_DISPATCH_PROOF"} and reserved != 0:
|
|
244
|
+
_unavailable("Finalized operation still holds a reservation")
|
|
245
|
+
if native_status in {"RESERVED", "DISPATCHED", "UNAVAILABLE"} and reserved != upper:
|
|
246
|
+
_unavailable("Pending operation lost its reservation")
|
|
247
|
+
return actual, reserved
|
|
248
|
+
|
|
249
|
+
|
|
159
250
|
def _window_operations(
|
|
160
251
|
state: dict,
|
|
161
252
|
proposal: dict,
|
|
@@ -170,71 +261,17 @@ def _window_operations(
|
|
|
170
261
|
totals: dict[str, dict[str, int]] = {}
|
|
171
262
|
seen: set[str] = set()
|
|
172
263
|
for item in bindings:
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
_unavailable("Closing operation is duplicated or absent from native accounting")
|
|
182
|
-
seen.add(operation_id)
|
|
183
|
-
if item.get("closingWindowId") != window:
|
|
184
|
-
_unavailable("Closing operation belongs to another window")
|
|
185
|
-
if (
|
|
186
|
-
item.get("runId") != proposal["runId"]
|
|
187
|
-
or item.get("budgetScopeId") != proposal["budgetScopeId"]
|
|
188
|
-
or item.get("bindingId") != proposal["bindingId"]
|
|
189
|
-
or item.get("policyEffectDigest") != effect_digest
|
|
190
|
-
or item.get("unit") != proposal["unit"]
|
|
191
|
-
):
|
|
192
|
-
_unavailable("Closing operation differs from the signed scope")
|
|
193
|
-
for revision_name in ("expectedJournalRevision", "expectedWorkflowRevision", "expectedAuthorityEpoch"):
|
|
194
|
-
if _amount(item[revision_name], revision_name) > (1 << 53) - 1:
|
|
195
|
-
_unavailable("Closing operation revision exceeds the safe-integer domain")
|
|
196
|
-
if (
|
|
197
|
-
type(item["expectedGuardStateDigest"]) is not str
|
|
198
|
-
or re.fullmatch(r"[0-9a-f]{64}", item["expectedGuardStateDigest"]) is None
|
|
199
|
-
):
|
|
200
|
-
_unavailable("Closing guard identity is malformed")
|
|
201
|
-
owner = _owner_key(item.get("owner"))
|
|
264
|
+
operation_id, owner = _closing_sidecar_owner(
|
|
265
|
+
item,
|
|
266
|
+
operations,
|
|
267
|
+
seen,
|
|
268
|
+
window,
|
|
269
|
+
proposal,
|
|
270
|
+
effect_digest,
|
|
271
|
+
)
|
|
202
272
|
native = operations[operation_id]
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
_unavailable("Native operation binding is corrupted")
|
|
206
|
-
if (
|
|
207
|
-
item.get("nativeOperationDigest") != native["digest"]
|
|
208
|
-
or binding.get("operation_id") != operation_id
|
|
209
|
-
or binding.get("budget_scope_id") != proposal["budgetScopeId"]
|
|
210
|
-
or binding.get("run_id") != proposal["runId"]
|
|
211
|
-
or (binding.get("task_id") or "") != owner
|
|
212
|
-
or binding.get("unit_definition_id") != proposal["unit"]["unitDefinitionId"]
|
|
213
|
-
or binding.get("upper_bound_tokens") != item.get("upperBound")
|
|
214
|
-
):
|
|
215
|
-
_unavailable("Closing sidecar does not match the native operation")
|
|
216
|
-
upper = _amount(item["upperBound"], "operation upper bound")
|
|
217
|
-
reserved = _amount(native.get("reservation"), "native reservation")
|
|
218
|
-
if reserved not in {0, upper}:
|
|
219
|
-
_unavailable("Native reservation has an unsupported partial value")
|
|
220
|
-
actual = native.get("actual")
|
|
221
|
-
if actual is not None:
|
|
222
|
-
_amount(actual, "native actual")
|
|
223
|
-
native_status = native.get("state")
|
|
224
|
-
if native_status not in {
|
|
225
|
-
"RESERVED",
|
|
226
|
-
"DISPATCHED",
|
|
227
|
-
"UNAVAILABLE",
|
|
228
|
-
"SETTLED",
|
|
229
|
-
"CANCELLED_WITH_NO_DISPATCH_PROOF",
|
|
230
|
-
}:
|
|
231
|
-
_unavailable("Native operation state is unsupported")
|
|
232
|
-
if (native_status == "SETTLED") != (actual is not None):
|
|
233
|
-
_unavailable("Native settlement state and actual differ")
|
|
234
|
-
if native_status in {"SETTLED", "CANCELLED_WITH_NO_DISPATCH_PROOF"} and reserved != 0:
|
|
235
|
-
_unavailable("Finalized operation still holds a reservation")
|
|
236
|
-
if native_status in {"RESERVED", "DISPATCHED", "UNAVAILABLE"} and reserved != upper:
|
|
237
|
-
_unavailable("Pending operation lost its reservation")
|
|
273
|
+
_validate_closing_native_binding(item, native, operation_id, owner, proposal)
|
|
274
|
+
actual, reserved = _closing_native_amounts(item, native)
|
|
238
275
|
row = totals.setdefault(owner, {"spent": 0, "reservations": 0})
|
|
239
276
|
row["spent"] = _sum([row["spent"], actual or 0], "window spend")
|
|
240
277
|
row["reservations"] = _sum([row["reservations"], reserved], "window reservations")
|
|
@@ -275,19 +312,15 @@ def _protected_buckets(state: dict, proposal: dict, buckets: list[dict], owners:
|
|
|
275
312
|
return current
|
|
276
313
|
|
|
277
314
|
|
|
278
|
-
def
|
|
315
|
+
def _validate_closing_reconstruction(
|
|
279
316
|
state: dict,
|
|
280
317
|
journal_revision: int,
|
|
281
318
|
proposal: dict,
|
|
282
319
|
operation_bindings: list[dict],
|
|
283
320
|
protection_buckets: list[dict],
|
|
284
321
|
policy_effect_digest: str,
|
|
285
|
-
) -> list[dict]:
|
|
286
|
-
"""
|
|
287
|
-
|
|
288
|
-
A caller must authenticate the proposal, effect, and SQL snapshot separately.
|
|
289
|
-
Returned rows deliberately contain no financial admission or permission.
|
|
290
|
-
"""
|
|
322
|
+
) -> tuple[int, list[dict]]:
|
|
323
|
+
"""Validate reconstruction scope and domain before selecting native owners."""
|
|
291
324
|
if type(state) is not dict or type(proposal) is not dict:
|
|
292
325
|
_unavailable("Native state or closing proposal is missing")
|
|
293
326
|
if proposal.get("schemaVersion") != "agent-closing-resource-proposal.v1":
|
|
@@ -314,6 +347,11 @@ def reconstruct_closing_balances(
|
|
|
314
347
|
limits = proposal.get("limits")
|
|
315
348
|
if type(limits) is not list or not limits:
|
|
316
349
|
_unavailable("Closing owner inventory is missing")
|
|
350
|
+
return revision, limits
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
def _select_closing_owner_limits(state: dict, limits: list[dict]) -> dict[str, dict]:
|
|
354
|
+
"""Require complete owner membership and consistent known financial facts."""
|
|
317
355
|
selected: dict[str, dict] = {}
|
|
318
356
|
for item in limits:
|
|
319
357
|
try:
|
|
@@ -333,6 +371,77 @@ def reconstruct_closing_balances(
|
|
|
333
371
|
or state.get("opening", {}).get("pending_operations") != []
|
|
334
372
|
):
|
|
335
373
|
_unavailable("Native qualification contradicts unknown financial facts")
|
|
374
|
+
return selected
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def _closing_balance_row(
|
|
378
|
+
native: Any,
|
|
379
|
+
owner: str,
|
|
380
|
+
limit: dict,
|
|
381
|
+
proposal: dict,
|
|
382
|
+
revision: int,
|
|
383
|
+
qualified: bool,
|
|
384
|
+
status: str,
|
|
385
|
+
window: dict[str, int],
|
|
386
|
+
pool: int,
|
|
387
|
+
) -> dict:
|
|
388
|
+
"""Project one validated owner without granting financial authority."""
|
|
389
|
+
entry = native.tasks[owner] if owner else None
|
|
390
|
+
known = entry["known_spent"] if entry else native.known_spent
|
|
391
|
+
spent = entry["spent"] if entry else native.spent
|
|
392
|
+
reserved = entry["active_reservations"] if entry else native.active_reservations
|
|
393
|
+
protected = entry["protected_closeout"] if entry else native.protected_closeout
|
|
394
|
+
enabled = limit["participation"] == "CLOSING_ENABLED"
|
|
395
|
+
if not enabled and (window["spent"] or window["reservations"] or pool):
|
|
396
|
+
_unavailable("Retained task acquired new-window resources")
|
|
397
|
+
if protected is not None and pool > protected:
|
|
398
|
+
_unavailable("Window protection exceeds native owner pool")
|
|
399
|
+
return {
|
|
400
|
+
"schemaVersion": "agent-closing-resource-balance.v1",
|
|
401
|
+
"runId": proposal["runId"],
|
|
402
|
+
"budgetScopeId": proposal["budgetScopeId"],
|
|
403
|
+
"closingWindowId": proposal["closingWindowId"],
|
|
404
|
+
"journalRevision": revision,
|
|
405
|
+
"unit": proposal["unit"],
|
|
406
|
+
"scope": limit["scope"],
|
|
407
|
+
"spentAtActivation": limit["knownSpentAtAnchor"],
|
|
408
|
+
"currentKnownCumulativeSpent": known,
|
|
409
|
+
"currentCumulativeSpent": spent if qualified else None,
|
|
410
|
+
"windowKnownSpent": window["spent"],
|
|
411
|
+
"windowSpent": window["spent"] if qualified else None,
|
|
412
|
+
"allActiveReservations": reserved,
|
|
413
|
+
"windowActiveReservations": window["reservations"] if reserved is not None else None,
|
|
414
|
+
"globalProtected": protected,
|
|
415
|
+
"windowProtected": pool if protected is not None else None,
|
|
416
|
+
"cumulativeCeiling": limit["prospectiveCumulativeCeiling"],
|
|
417
|
+
"windowAllowance": limit["approvedAdditional"],
|
|
418
|
+
"priorViolationsDigest": limit["priorViolationSetDigest"],
|
|
419
|
+
"qualification": status,
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
def reconstruct_closing_balances(
|
|
424
|
+
state: dict,
|
|
425
|
+
journal_revision: int,
|
|
426
|
+
proposal: dict,
|
|
427
|
+
operation_bindings: list[dict],
|
|
428
|
+
protection_buckets: list[dict],
|
|
429
|
+
policy_effect_digest: str,
|
|
430
|
+
) -> list[dict]:
|
|
431
|
+
"""Rebuild all owner rows from persisted membership and current native state.
|
|
432
|
+
|
|
433
|
+
A caller must authenticate the proposal, effect, and SQL snapshot separately.
|
|
434
|
+
Returned rows deliberately contain no financial admission or permission.
|
|
435
|
+
"""
|
|
436
|
+
revision, limits = _validate_closing_reconstruction(
|
|
437
|
+
state,
|
|
438
|
+
journal_revision,
|
|
439
|
+
proposal,
|
|
440
|
+
operation_bindings,
|
|
441
|
+
protection_buckets,
|
|
442
|
+
policy_effect_digest,
|
|
443
|
+
)
|
|
444
|
+
selected = _select_closing_owner_limits(state, limits)
|
|
336
445
|
operation_totals = _window_operations(state, proposal, operation_bindings, policy_effect_digest)
|
|
337
446
|
if not set(operation_totals) <= set(selected):
|
|
338
447
|
_unavailable("Closing operation has no owner")
|
|
@@ -353,45 +462,24 @@ def reconstruct_closing_balances(
|
|
|
353
462
|
run_reserved = _sum([x["reservations"] for x in operation_totals.values()], "run window reservations")
|
|
354
463
|
rows = []
|
|
355
464
|
for owner, limit in selected.items():
|
|
356
|
-
entry = native.tasks[owner] if owner else None
|
|
357
|
-
known = entry["known_spent"] if entry else native.known_spent
|
|
358
|
-
spent = entry["spent"] if entry else native.spent
|
|
359
|
-
reserved = entry["active_reservations"] if entry else native.active_reservations
|
|
360
|
-
protected = entry["protected_closeout"] if entry else native.protected_closeout
|
|
361
465
|
window = operation_totals.get(owner, {"spent": 0, "reservations": 0})
|
|
362
466
|
if owner == "":
|
|
363
467
|
window = {"spent": run_spent, "reservations": run_reserved}
|
|
364
468
|
pool = _sum(list(window_protected.values()), "run window protection")
|
|
365
469
|
else:
|
|
366
470
|
pool = window_protected.get(owner, 0)
|
|
367
|
-
enabled = limit["participation"] == "CLOSING_ENABLED"
|
|
368
|
-
if not enabled and (window["spent"] or window["reservations"] or pool):
|
|
369
|
-
_unavailable("Retained task acquired new-window resources")
|
|
370
|
-
if protected is not None and pool > protected:
|
|
371
|
-
_unavailable("Window protection exceeds native owner pool")
|
|
372
471
|
rows.append(
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
"windowKnownSpent": window["spent"],
|
|
385
|
-
"windowSpent": window["spent"] if qualified else None,
|
|
386
|
-
"allActiveReservations": reserved,
|
|
387
|
-
"windowActiveReservations": window["reservations"] if reserved is not None else None,
|
|
388
|
-
"globalProtected": protected,
|
|
389
|
-
"windowProtected": pool if protected is not None else None,
|
|
390
|
-
"cumulativeCeiling": limit["prospectiveCumulativeCeiling"],
|
|
391
|
-
"windowAllowance": limit["approvedAdditional"],
|
|
392
|
-
"priorViolationsDigest": limit["priorViolationSetDigest"],
|
|
393
|
-
"qualification": status,
|
|
394
|
-
}
|
|
472
|
+
_closing_balance_row(
|
|
473
|
+
native,
|
|
474
|
+
owner,
|
|
475
|
+
limit,
|
|
476
|
+
proposal,
|
|
477
|
+
revision,
|
|
478
|
+
qualified,
|
|
479
|
+
status,
|
|
480
|
+
window,
|
|
481
|
+
pool,
|
|
482
|
+
)
|
|
395
483
|
)
|
|
396
484
|
return rows
|
|
397
485
|
|
|
@@ -5,7 +5,9 @@ from __future__ import annotations
|
|
|
5
5
|
import hashlib
|
|
6
6
|
import os
|
|
7
7
|
import re
|
|
8
|
+
import secrets
|
|
8
9
|
import stat
|
|
10
|
+
from contextlib import ExitStack
|
|
9
11
|
from dataclasses import dataclass
|
|
10
12
|
from pathlib import Path
|
|
11
13
|
from typing import Any
|
|
@@ -22,6 +24,8 @@ from agent_lifecycle.accounting.declared_ledger_records import (
|
|
|
22
24
|
)
|
|
23
25
|
from agent_lifecycle.contracts import LifecycleError, canonical_bytes, canonical_digest
|
|
24
26
|
from agent_lifecycle.contracts.authority_io import (
|
|
27
|
+
create_authority_bytes,
|
|
28
|
+
hold_authority_read_fd,
|
|
25
29
|
normalize_authority_path,
|
|
26
30
|
read_authority_bytes,
|
|
27
31
|
replace_authority_bytes,
|
|
@@ -371,6 +375,22 @@ def _decode_coordinator_origin(
|
|
|
371
375
|
}
|
|
372
376
|
|
|
373
377
|
|
|
378
|
+
def _r11_coordinator_claim_matches(primary: Path, pending: Path, owned_claim: tuple[bytes, int] | None) -> bool:
|
|
379
|
+
if owned_claim is None:
|
|
380
|
+
return not pending.exists() and not pending.is_symlink()
|
|
381
|
+
raw, descriptor = owned_claim
|
|
382
|
+
try:
|
|
383
|
+
held, current = os.fstat(descriptor), pending.lstat()
|
|
384
|
+
return (
|
|
385
|
+
stat.S_ISREG(current.st_mode)
|
|
386
|
+
and os.path.samestat(held, current)
|
|
387
|
+
and held.st_mode == current.st_mode
|
|
388
|
+
and read_authority_bytes(pending, root=primary, max_bytes=131_072) == raw
|
|
389
|
+
)
|
|
390
|
+
except (OSError, LifecycleError):
|
|
391
|
+
return False
|
|
392
|
+
|
|
393
|
+
|
|
374
394
|
def read_coordinator_cost_head(project_root: Path, *, ancestor_head_sha256: str | None = None) -> dict[str, Any]:
|
|
375
395
|
"""Read current declared provenance and optionally prove a pinned ancestor.
|
|
376
396
|
|
|
@@ -379,6 +399,15 @@ def read_coordinator_cost_head(project_root: Path, *, ancestor_head_sha256: str
|
|
|
379
399
|
Missing, altered, cyclic, over-limit or pending ancestry never falls back to
|
|
380
400
|
a current-balance comparison. This reads no session history or telemetry.
|
|
381
401
|
"""
|
|
402
|
+
return _read_coordinator_cost_head(project_root, ancestor_head_sha256=ancestor_head_sha256)
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
def _read_coordinator_cost_head(
|
|
406
|
+
project_root: Path,
|
|
407
|
+
*,
|
|
408
|
+
ancestor_head_sha256: str | None = None,
|
|
409
|
+
owned_claim: tuple[bytes, int] | None = None,
|
|
410
|
+
) -> dict[str, Any]:
|
|
382
411
|
_require(
|
|
383
412
|
ancestor_head_sha256 is None
|
|
384
413
|
or (isinstance(ancestor_head_sha256, str) and re.fullmatch("[0-9a-f]{64}", ancestor_head_sha256) is not None),
|
|
@@ -389,7 +418,7 @@ def read_coordinator_cost_head(project_root: Path, *, ancestor_head_sha256: str
|
|
|
389
418
|
path = primary / _R11_COORDINATOR_HEAD
|
|
390
419
|
pending = path.with_suffix(".pending.json")
|
|
391
420
|
_require(
|
|
392
|
-
|
|
421
|
+
_r11_coordinator_claim_matches(primary, pending, owned_claim),
|
|
393
422
|
"r11-opening-pending",
|
|
394
423
|
"coordinator head update is unresolved",
|
|
395
424
|
)
|
|
@@ -495,8 +524,7 @@ def read_coordinator_cost_head(project_root: Path, *, ancestor_head_sha256: str
|
|
|
495
524
|
stable = (
|
|
496
525
|
_r11_coordinator_head_bytes(primary) == raw
|
|
497
526
|
and all(read_authority_bytes(p, root=primary, max_bytes=131_072) == value for p, value in observed.items())
|
|
498
|
-
and
|
|
499
|
-
and not pending.is_symlink()
|
|
527
|
+
and _r11_coordinator_claim_matches(primary, pending, owned_claim)
|
|
500
528
|
)
|
|
501
529
|
except OSError:
|
|
502
530
|
stable = False
|
|
@@ -575,8 +603,6 @@ def advance_coordinator_cost_head(project_root: Path, *, source_path: str) -> di
|
|
|
575
603
|
|
|
576
604
|
def exclusive(target: Path, raw: bytes) -> None:
|
|
577
605
|
if os.name == "nt":
|
|
578
|
-
from agent_lifecycle.contracts.authority_io import create_authority_bytes
|
|
579
|
-
|
|
580
606
|
create_authority_bytes(target, raw, root=primary, private=True)
|
|
581
607
|
return
|
|
582
608
|
fd = os.open(target, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600)
|
|
@@ -587,44 +613,58 @@ def advance_coordinator_cost_head(project_root: Path, *, source_path: str) -> di
|
|
|
587
613
|
|
|
588
614
|
# Refuse unsupported durability before creating a sticky claim.
|
|
589
615
|
_sync_directory(path.parent)
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
# This writer has not touched the head. Release only its own stale claim;
|
|
597
|
-
# a competing successful update must not be left blocked by this loser.
|
|
598
|
-
pending.unlink()
|
|
599
|
-
_sync_directory(path.parent)
|
|
600
|
-
raise LifecycleError("r11-opening-stale", "source/head changed after update claim")
|
|
601
|
-
if previous_raw is not None:
|
|
602
|
-
archive = path.parent / "coordinator-cost-head-history"
|
|
603
|
-
if os.name == "nt":
|
|
604
|
-
from agent_lifecycle.contracts.private_storage import ensure_private_directory
|
|
605
|
-
|
|
606
|
-
ensure_private_directory(archive, boundary=path.parent)
|
|
607
|
-
else:
|
|
608
|
-
archive.mkdir(mode=0o700, exist_ok=True)
|
|
609
|
-
_require(stat.S_ISDIR(archive.lstat().st_mode), "r11-opening-origin", "head archive is indirect")
|
|
610
|
-
archived = archive / (hashlib.sha256(previous_raw).hexdigest() + ".json")
|
|
611
|
-
if archived.exists():
|
|
616
|
+
claim = canonical_bytes({"head": head, "ownerNonce": secrets.token_hex(16)})
|
|
617
|
+
create_authority_bytes(pending, claim, root=primary, private=True)
|
|
618
|
+
with ExitStack() as guards:
|
|
619
|
+
descriptor = guards.enter_context(hold_authority_read_fd(pending, root=primary))
|
|
620
|
+
ownership = (claim, descriptor)
|
|
621
|
+
try:
|
|
612
622
|
_require(
|
|
613
|
-
|
|
614
|
-
"r11-opening-
|
|
615
|
-
"
|
|
623
|
+
_r11_coordinator_claim_matches(primary, pending, ownership),
|
|
624
|
+
"r11-opening-pending",
|
|
625
|
+
"coordinator claim ownership changed",
|
|
616
626
|
)
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
627
|
+
_sync_directory(path.parent)
|
|
628
|
+
if (
|
|
629
|
+
_r11_coordinator_head_bytes(primary) != previous_raw
|
|
630
|
+
or read_authority_bytes(primary / source_path, root=primary, max_bytes=131_072) != source_raw
|
|
631
|
+
):
|
|
632
|
+
guards.close()
|
|
633
|
+
pending.unlink()
|
|
634
|
+
_sync_directory(path.parent)
|
|
635
|
+
raise LifecycleError("r11-opening-stale", "source/head changed after update claim")
|
|
636
|
+
if previous_raw is not None:
|
|
637
|
+
archive = path.parent / "coordinator-cost-head-history"
|
|
638
|
+
if os.name == "nt":
|
|
639
|
+
from agent_lifecycle.contracts.private_storage import ensure_private_directory
|
|
640
|
+
|
|
641
|
+
ensure_private_directory(archive, boundary=path.parent)
|
|
642
|
+
else:
|
|
643
|
+
archive.mkdir(mode=0o700, exist_ok=True)
|
|
644
|
+
_require(stat.S_ISDIR(archive.lstat().st_mode), "r11-opening-origin", "head archive is indirect")
|
|
645
|
+
archived = archive / (hashlib.sha256(previous_raw).hexdigest() + ".json")
|
|
646
|
+
if archived.exists():
|
|
647
|
+
_require(
|
|
648
|
+
read_authority_bytes(archived, root=primary, max_bytes=131_072) == previous_raw,
|
|
649
|
+
"r11-opening-origin",
|
|
650
|
+
"previous head archive differs",
|
|
651
|
+
)
|
|
652
|
+
else:
|
|
653
|
+
exclusive(archived, previous_raw)
|
|
654
|
+
_sync_directory(archive)
|
|
655
|
+
exclusive(temporary, canonical_bytes(head))
|
|
656
|
+
_sync_directory(path.parent)
|
|
657
|
+
replace_authority_bytes(path, canonical_bytes(head), root=primary)
|
|
658
|
+
temporary.unlink()
|
|
659
|
+
_sync_directory(path.parent)
|
|
660
|
+
result = _read_coordinator_cost_head(project_root, owned_claim=ownership)
|
|
661
|
+
except BaseException:
|
|
662
|
+
# Close normally so an unrelated publication error keeps its type.
|
|
663
|
+
guards.close()
|
|
664
|
+
raise
|
|
625
665
|
pending.unlink()
|
|
626
666
|
_sync_directory(path.parent)
|
|
627
|
-
return
|
|
667
|
+
return result
|
|
628
668
|
|
|
629
669
|
|
|
630
670
|
def _sync_directory(path: Path) -> None:
|
|
@@ -374,6 +374,35 @@ def open_authority_read(path: Path, *, root: Path | None = None) -> Iterator[Bin
|
|
|
374
374
|
raise LifecycleError("authority-input-unavailable", "authority input cannot be safely read") from None
|
|
375
375
|
|
|
376
376
|
|
|
377
|
+
@contextmanager
|
|
378
|
+
def hold_authority_read_fd(path: Path, *, root: Path | None = None) -> Iterator[int]:
|
|
379
|
+
"""Borrow a read-only FD; validate file and parents at both boundaries."""
|
|
380
|
+
root, name = authority_location(path, root=root)
|
|
381
|
+
target = root / name
|
|
382
|
+
descriptor = None
|
|
383
|
+
try:
|
|
384
|
+
with open_authority_read(target, root=root) as handle:
|
|
385
|
+
before = os.fstat(handle.fileno())
|
|
386
|
+
parents = [(parent, parent.lstat()) for parent in target.parents]
|
|
387
|
+
descriptor = os.dup(handle.fileno())
|
|
388
|
+
os.set_inheritable(descriptor, False)
|
|
389
|
+
yield descriptor
|
|
390
|
+
with open_authority_read(target, root=root) as handle:
|
|
391
|
+
_same_identity(before, os.fstat(descriptor), content=True)
|
|
392
|
+
_same_identity(before, os.fstat(handle.fileno()), content=True)
|
|
393
|
+
for parent, identity in parents:
|
|
394
|
+
_same_identity(identity, parent.lstat())
|
|
395
|
+
except FileNotFoundError:
|
|
396
|
+
if descriptor is None:
|
|
397
|
+
raise
|
|
398
|
+
raise LifecycleError("authority-input-changed", "authority input changed during I/O") from None
|
|
399
|
+
except OSError:
|
|
400
|
+
raise LifecycleError("authority-input-unavailable", "authority input cannot be safely read") from None
|
|
401
|
+
finally:
|
|
402
|
+
if descriptor is not None:
|
|
403
|
+
os.close(descriptor)
|
|
404
|
+
|
|
405
|
+
|
|
377
406
|
def read_authority_bytes(path: Path, *, max_bytes: int, root: Path | None = None) -> bytes:
|
|
378
407
|
"""Read bounded stable bytes from the actual descriptor consumed by the caller."""
|
|
379
408
|
|
{agent_lifecycle_kit-2.38.0 → agent_lifecycle_kit-2.40.0}/src/agent_lifecycle/workflow/query.py
RENAMED
|
@@ -18,13 +18,26 @@ from agent_lifecycle.workflow.transition_contract import build_action
|
|
|
18
18
|
|
|
19
19
|
def status(state_path: Path, *, full: bool = False) -> dict[str, Any]:
|
|
20
20
|
state = load_state(state_path)
|
|
21
|
+
budgets = state.get("budgets")
|
|
22
|
+
validation_accounting = {
|
|
23
|
+
"mode": "DECLARED_ONLY",
|
|
24
|
+
"declaredMaxPerTask": budgets.get("maxValidationRunsPerTask") if isinstance(budgets, dict) else None,
|
|
25
|
+
"observedRuns": None,
|
|
26
|
+
"enforcement": "NOT_ENFORCED_FOR_EXTERNAL_COMMANDS",
|
|
27
|
+
"stateCounterSemantics": "UNVERIFIED_LEGACY_COUNTER",
|
|
28
|
+
}
|
|
21
29
|
if full:
|
|
22
30
|
return {
|
|
23
31
|
"schemaVersion": "agent-workflow-status-full.v1",
|
|
24
32
|
"state": state,
|
|
25
33
|
"nextAction": next_action(state),
|
|
34
|
+
"validationAccounting": validation_accounting,
|
|
26
35
|
}
|
|
27
|
-
return {
|
|
36
|
+
return {
|
|
37
|
+
**summarize_state(state_path, state),
|
|
38
|
+
"nextAction": next_action(state),
|
|
39
|
+
"validationAccounting": validation_accounting,
|
|
40
|
+
}
|
|
28
41
|
|
|
29
42
|
|
|
30
43
|
def next_action(state: dict[str, Any]) -> dict[str, Any]:
|