iop/apps/agent/internal/taskloop/testdata/parity.yaml

332 lines
15 KiB
YAML

# Go parity disposition and Python disposal manifest for SDD scenario S13.
#
# Every stabilized Python dispatcher/selector/observation behavior and the Node
# reference behavior is classified exactly once as absorb | replace |
# not-applicable, bound to concrete Go owner source and tests, and asserted to
# have zero remaining Python production callers. The disposal block records the
# checksum-bound retained source/test fixtures and the Milestone-completion
# deletion gate.
#
# This manifest is validated by apps/agent/internal/taskloop/parity.go and its
# tests. Reference and Go source paths are repository-relative and must exist;
# disposal checksums must match the actual reference files on disk.
schema_version: 1
reference_root: agent-ops/skills/project/orchestrate-agent-task-loop
deletion_gate: milestone-completion-transition
behaviors:
- id: task-scan-dependency-ready
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
- agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py
disposition: absorb
go_owner: >-
Registered-project workflow discovery and explicit-predecessor admission
are owned by the standalone workflow projection over the shared manager;
numeric order never implies dependency.
go_source:
- apps/agent/internal/taskloop/workflow.go
- apps/agent/internal/taskloop/module.go
- packages/go/agenttask/manager.go
go_test:
- TestManualStartDuplicateManagerLeasePreventsConcurrentInvocation
- TestRuntimeFakeProviderPersistedLifecycleRollbackAndRestart
invariants: >-
Only explicit predecessors gate readiness; unknown, disabled, unselected,
malformed, or escaping inputs fail closed.
production_caller: go-only
- id: parallel-dispatch-scheduling
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
disposition: absorb
go_owner: >-
Bounded isolated dispatch of dependency-ready siblings is owned by the
shared AgentTaskManager scheduler with per-task writable roots.
go_source:
- packages/go/agenttask/dispatch.go
- packages/go/agenttask/manager.go
go_test:
- TestIsolatedDispatchUsesDistinctTaskRoots
- TestManagerOwnsConfinementStartBeforeBindingProviderInvocation
invariants: >-
Sibling dispatch never derives an implicit dependency from numeric order
or write-set overlap and stays within provider concurrency limits.
production_caller: go-only
- id: canonical-workspace-parallel-write
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
disposition: replace
go_owner: >-
Direct parallel writes to the canonical workspace are replaced by pinned
base snapshots and per-task copy-on-write overlays; only the integration
owner mutates the canonical base.
go_source:
- packages/go/agentworkspace/overlay.go
- packages/go/agentworkspace/snapshot.go
- apps/agent/internal/taskloop/integration.go
go_test:
- TestIntegrationDelegatesCleanConflictRetentionAndQueueContinuation
invariants: >-
Parallel task processes cannot write canonical files, shared Git
index/ref, or another task layer; review PASS change sets integrate in
dispatch-ordinal order.
production_caller: go-only
- id: shared-checkout-write-claim
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatcher_observation.py
disposition: replace
go_owner: >-
The shared-checkout PLAN write-claim compatibility path is replaced by the
normalized PlanWriteSet parsed from the single Modified Files Summary and
by workspace isolation; claims are not converted into logical dependencies.
go_source:
- apps/agent/internal/taskloop/workflow.go
- packages/go/agentworkspace/snapshot.go
go_test:
- TestRuntimeFakeProviderPersistedLifecycleRollbackAndRestart
invariants: >-
Write-set rows are literal, bounded, and containment-checked; glob,
directory, out-of-workspace, missing, or duplicate targets fail closed.
production_caller: go-only
- id: restart-reconciliation-recovery
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
disposition: absorb
go_owner: >-
Checkpoint-first restart reconciliation and opaque process/session
recovery are owned by the shared manager and the host RecoveryInspector.
go_source:
- packages/go/agenttask/reconcile.go
- apps/agent/internal/taskloop/recovery.go
go_test:
- TestRecoverStoppedDispatchStartsFreshAttempt
- TestCommandAdapterFakeProviderPersistedLifecycleRollbackAndRestart
invariants: >-
Malformed checkpoint/route/locator states become typed blockers, never a
silent reset or duplicated live work.
production_caller: go-only
- id: review-convergence
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
disposition: absorb
go_owner: >-
Worker, self-check, and official-review sequencing plus WARN/FAIL/
USER_REVIEW follow-up are owned by the shared review ports and the host
review adapter.
go_source:
- packages/go/agenttask/review.go
- apps/agent/internal/taskloop/review.go
go_test:
- TestReviewWarnCreatesFollowupAttempt
- TestReviewUserReviewDefersOnlyOneTask
invariants: >-
A worker exit code or completion phrase alone never marks a task
review-ready or completed; review runs only after submission gates pass.
production_caller: go-only
- id: work-log-archive
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
disposition: absorb
go_owner: >-
Per-task loop/attempt/locator project logs and exactly-once terminal
archive reconciliation are owned by the host project-log sink and store.
go_source:
- apps/agent/internal/projectlog/sink.go
- apps/agent/internal/projectlog/store.go
go_test:
- TestSinkMapsEveryEventType
- TestS12LoopParallelArchiveMatrix
invariants: >-
Archive and cleanup run only after verified terminal closure; WORK_LOG or
heartbeat change alone is never counted as review progress.
production_caller: go-only
- id: failure-classification-budget
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
disposition: absorb
go_owner: >-
Typed failure classification, per-stage failure budgets, and the
non-retryable exhaustion blocker are owned by the shared failure policy
and manager.
go_source:
- packages/go/agentpolicy/failure_policy.go
- packages/go/agenttask/manager.go
go_test:
- TestFailureBudgetPersistsAndStopsReviewRework
- TestDecideContinuationRetryFailoverAndBlockers
invariants: >-
A generic failure is never escalated as a quota failure; budgets do not
reset after cooldown.
production_caller: go-only
- id: observation-banner-output
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatcher_observation.py
- agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatcher_observation.py
disposition: replace
go_owner: >-
Observation banners and event formatting are replaced by the host
project-log record projection and the command presentation adapter.
go_source:
- apps/agent/internal/projectlog/record.go
- apps/agent/internal/command/service.go
go_test:
- TestRecordValidationMatrix
invariants: >-
Presentation output carries no credentials, raw private paths, or
unbounded child output.
production_caller: go-only
- id: ordered-target-selection
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/select_execution_target.py
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/execution_target_policy.py
- agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_select_execution_target.py
- agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_select_execution_target.py.orig
disposition: absorb
go_owner: >-
First-match ordered target selection and persisted route history are owned
by the host config selector over the shared policy evaluator.
go_source:
- apps/agent/internal/taskloop/module.go
- packages/go/agentpolicy/failure_policy.go
go_test:
- TestConfigSelectorPersistsOrderedPolicyAndSuppliesQuotaBackedFailover
- TestEvaluatorFirstMatchWins
invariants: >-
Exactly one provider/model is exposed while ordered candidates and
reasons are retained; a corrupt route errors instead of silently
reselecting.
production_caller: go-only
- id: static-provider-model-capacity-tables
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/execution_target_policy.py
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/select_execution_target.py
- agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_execution_target_policy.py
disposition: replace
go_owner: >-
Hard-coded provider/model identities and per-provider capacity numbers are
replaced by the versioned provider catalog and the ordered SelectionPolicy
in runtime configuration; production surfaces carry no static route table.
go_source:
- packages/go/agentconfig/runtime_config.go
- apps/agent/internal/taskloop/module.go
go_test:
- TestConfigSelectorContinuationUsesExactFailureRuleContext
invariants: >-
Route, model, and capacity facts come only from catalog/policy revisions;
no production skill or rule owns a static provider/model/capacity table.
production_caller: go-only
- id: quota-probe-failover-promotion
reference_sources:
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/execution_target_policy.py
- agent-ops/skills/project/orchestrate-agent-task-loop/scripts/select_execution_target.py
disposition: absorb
go_owner: >-
Quota probing, runtime quota observation, and bounded failover/promotion
are owned by the shared quota policy and continuation decision.
go_source:
- packages/go/agentpolicy/quota.go
- apps/agent/internal/taskloop/provider.go
go_test:
- TestProviderFailureObservationFeedsCommonContinuationIdentity
- TestNormalizeQuotaObservationMarksUnsupportedSchemaAndMalformedIdentityCorrupt
invariants: >-
Only a typed exhausted target enters failover; available/unknown quota
stays a completion-evidence recovery on the same target.
production_caller: go-only
- id: node-runtime-consumer
reference_sources: []
disposition: absorb
go_owner: >-
Node consumes the shared runtime through the protobuf runtime bridge and
keeps no second provider or AgentTaskManager implementation.
go_source:
- apps/node/internal/node/runtime_bridge.go
go_test:
- TestRunRequestFromProtoPreservesWireFields
- TestRunEventToProtoPreservesLegacyValues
invariants: >-
Node preserves the existing Edge-Node wire and provider semantics with no
duplicate runtime implementation.
production_caller: go-only
disposal:
state: retained
procedure: >-
Keep every reference file below as an unchanged, zero-caller fixture while
state is retained. At the Milestone-completion transition, verify retained
hashes and the repository cutover search, delete exactly this inventory,
change state to disposed, then re-run parity and cutover verification. The
disposed state requires every recorded file to be absent and discovery to
find no retained Python fixture; partial or mixed states fail.
reference_files:
- path: agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py
sha256: 66a03838b44df6b03c2c051e99ae6cf2ba311a99a0b7c4c98dbe041ab3def47a
disposition: replace
covered_by:
- task-scan-dependency-ready
- parallel-dispatch-scheduling
- canonical-workspace-parallel-write
- shared-checkout-write-claim
- restart-reconciliation-recovery
- review-convergence
- work-log-archive
- failure-classification-budget
- path: agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatcher_observation.py
sha256: 654d5f27fbd750fe14215b30a2dcfc0ba2911ca3cc65c9636434a9a1182b5e1d
disposition: replace
covered_by:
- shared-checkout-write-claim
- observation-banner-output
- path: agent-ops/skills/project/orchestrate-agent-task-loop/scripts/execution_target_policy.py
sha256: 98435d4602e8aaef13a28c2872bf37cc918eef5385584c4964d15182bae3b03d
disposition: replace
covered_by:
- ordered-target-selection
- static-provider-model-capacity-tables
- quota-probe-failover-promotion
- path: agent-ops/skills/project/orchestrate-agent-task-loop/scripts/select_execution_target.py
sha256: 8d425a5f355bbf4a9a769036ef17892c53de135df5a4cc3765534336c656cf4d
disposition: replace
covered_by:
- ordered-target-selection
- static-provider-model-capacity-tables
- quota-probe-failover-promotion
- path: agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py
sha256: 8b59f955e29076607174986aa2df07a0738fafd49ad6c09e894f79ba6a35bb36
disposition: not-applicable
covered_by:
- task-scan-dependency-ready
- path: agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatcher_observation.py
sha256: e6567a4574f6d19bb8cc9d1cd312f088774a4cebe16f4b1ec33fa6c860e3b215
disposition: not-applicable
covered_by:
- observation-banner-output
- path: agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_execution_target_policy.py
sha256: c82706de70257a169587a350a7b5123f4f60fab6e0fb97263f1b7505f38a7c54
disposition: not-applicable
covered_by:
- static-provider-model-capacity-tables
- path: agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_select_execution_target.py
sha256: 9943aede0d93824781e5e2f19b57cadffadb566d45387cc984eddc7460a1a3a7
disposition: not-applicable
covered_by:
- ordered-target-selection
- path: agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_select_execution_target.py.orig
sha256: 1f87fd69525a073a24695451935b5892d756d9219863f3d875885ee0138e2010
disposition: not-applicable
covered_by:
- ordered-target-selection