WIP: MCP: CRUD endpoints for agent goals + expose entity schemas/types #286
Closed
toasterson
wants to merge 2 commits from
claude/wi-019e480e-mcp-crud-endpoints-for-agent-goals-expos into main
pull from: claude/wi-019e480e-mcp-crud-endpoints-for-agent-goals-expos
merge into: toasterson:main
toasterson:main
toasterson:fix/ci-sccache-20261018
toasterson:fix/house-schema-upgrade-round12a
toasterson:fix/ptah-bounded-rule-joins
toasterson:codex/mausbot-legacy-provenance-round9a
toasterson:feat/mausbot-native-computer-dispatch
toasterson:fix/akhomed-single-instance-discovery
toasterson:feat/mausbot-native-admission
toasterson:feat/mausbot-acp-owner
toasterson:codex/runtime-auth-writeback-prep-20261017
toasterson:feat/disposable-image-conformance
toasterson:fix/house-merge-symbol-normalization
toasterson:fix/house-metrics-checkpoint
toasterson:fix/house-backup-close
toasterson:fix/odin-inference-lost-ack-20261015
toasterson:fix/apollo-codex-0160
toasterson:docs/tencentdb-agent-memory-harvest
toasterson:fix/claude-inference-proposals
toasterson:fix/native-receipt-directory-mode
toasterson:anima/01a130d9-cd0c-7bb1-ab8b-b9de509b5b3e
toasterson:feat/native-cognitive-backing
toasterson:fix/roman-dojo-teacher-goldens
toasterson:sokar/52f
toasterson:anima/01a0297c-b49b-75f3-a7bf-d7015fdae67d
toasterson:arc/close
toasterson:sokar/52g
toasterson:sokar/52e
toasterson:sokar/52d
toasterson:sokar/52c
toasterson:arc/t3
toasterson:sokar/52b
toasterson:arc/t-plan
toasterson:codex/transcripts-arm-headroom-20261011
toasterson:arc/paper-trim2
toasterson:arc/paper-trim
toasterson:arc/paper-lb
toasterson:arc/paper-cover
toasterson:arc/paper-writeup
toasterson:arc/paper-v04
toasterson:arc/build-record
toasterson:arc/2026-plan
toasterson:arc/s4c
toasterson:arc/s5
toasterson:arc/s4b
toasterson:arc/s4
toasterson:arc/s3
toasterson:arc/s2
toasterson:arc/s1
toasterson:clm/r3-replay
toasterson:docs/clm-m1c
toasterson:clm/cuda-backend
toasterson:testing/gemma4-31b-clm
toasterson:clm/r2-arena-kvops
toasterson:codex/native-chat-receipts-20261006
toasterson:fix/electra-gemma4-decode-window
toasterson:codex/plan14-receipt-mode-20261007
toasterson:fix/electra-prefill-layer-fence
toasterson:fix/electra-bounded-prefill
toasterson:feat/lilith-export-exclude-sources
toasterson:feat/lilith-export-stage-passes
toasterson:codex/plan14-runtime-details-20261007
toasterson:feat/lilith-trainer-collapse-guard
toasterson:codex/plan14-native-conformance-20261007
toasterson:claude/wi-019e2501-define-fluent-infrastructure-home-state
toasterson:feat/lilith-loop-probe
toasterson:feat/lilith-trainer-probe-protocol
toasterson:feat/lilith-answer-turn-pairs
toasterson:feat/lilith-dojo-cli-teacher
toasterson:docs/lilith-program-r5-plan
toasterson:codex/plan14-native-opus-cli-20261006
toasterson:claude/wi-01a03edf-wave-r1a-typed-fail-closed-config-spine
toasterson:fix/strict-clippy-20261006
toasterson:codex/roman-health-pivot-20261006
toasterson:anima/01a0c94f-65b8-7ab2-9234-a7a40c8e935f
toasterson:codex/wi845-native-recovery-20261006
toasterson:fix/lilith-exam-enable-thinking
toasterson:codex/electra-harness
toasterson:feat/lilith-dojo-enable-thinking
toasterson:fix/electra-gemma-handoff
toasterson:vox/native-chat-principal
toasterson:docs/context-language-model
toasterson:clm/2-loop-integration
toasterson:clm/r1-gemma4-kv
toasterson:clm/r1-parity-cap
toasterson:feat/lilith-panel-grounding-rule
toasterson:feat/lilith-r4-run-config
toasterson:feat/lilith-sibling-result-budget
toasterson:feat/lilith-first-divergence-pairs
toasterson:docs/lilith-program-r3-result
toasterson:feat/lilith-shadow-report
toasterson:clm/1-live-context
toasterson:feat/lilith-r3-stage-plan
toasterson:clm/math
toasterson:feat/lilith-runtime-hygiene
toasterson:feat/lilith-gap-loop
toasterson:feat/lilith-gap-records
toasterson:feat/lilith-shadow-families
toasterson:feat/lilith-care-family
toasterson:docs/lilith-r3-shadow-plan
toasterson:docs/lilith-memory-run-20261005
toasterson:feat/hephaistos-lora-adapter
toasterson:backup/2026-10-13/wi527-main-image-20261005
toasterson:docs/lilith-program-r2-result
toasterson:codex/wi-01a10748-runtime-quarantine-inventory
toasterson:feat/roman-audio-prompts-20261003
toasterson:fix/acp-audio-fail-closed-20261003
toasterson:claude/wi-01a08260-seshat-idle
toasterson:anima/01a08262-3ea3-7460-b2de-b2a08e28cd74
toasterson:claude/wi-01a08260-synthesis-validation
toasterson:agent/cef957cb46e7
toasterson:claude/wi-019f90cb-p26-2-retire-llama-cpp-2-migrate-the-nlu
toasterson:claude/wi-01a03edf-deployment-config-manual-recovery
toasterson:claude/wi-01a03edf-5416-7413-ab36-308c8bee1cd1-database-cutover
toasterson:claude/wi-019fa8eb-wi-5-second-language-provider-retire-com
toasterson:claude/wi-01a08262-thinking-persistence
toasterson:claude/wi-019fa8eb-repo-state-manual-recovery
toasterson:claude/wi-01a02982-42d-1-current-tree-rrf-core-and-lossless
toasterson:claude/wi-01a08260-heka-note-traversal-prerequisite-determi
toasterson:claude/wi-019f90cc-p26-5-wire-the-neural-bridge-into-the-in
toasterson:claude/wi-01a07aaa-grug-train-fail-closed-when-a-checkpoint
toasterson:claude/wi-01a0825f-seshat-curiosity-1-implement-structured
toasterson:claude/wi-01a05293-candle-backend-re-prefills-the-entire-co
toasterson:codex/lilith-history-prep-20261001
toasterson:claude/wi-019f8589-wi-3-session-registry-akh-session-list-i
toasterson:claude/wi-01a0297c-emit-runtime-metrics
toasterson:claude/wi-019fa8ea-wi-2-scip-precision-tier-the-resolution
toasterson:claude/wi-019f90cc-p27-2-tripleverbalizer-kg-triples-divers
toasterson:claude/wi-01a05291-agent-tool-description-audit-when-to-use
toasterson:claude/wi-019fffd3-librarian-g5-a-consolidation-gate-real-p
toasterson:claude/wi-01a08260-p3-rl-a2-map-deterministic-engine-replay
toasterson:claude/wi-019f85b9-adversarial-review-observability-stack-3
toasterson:claude/wi-019f90cc-p27-1-switch-the-trainingdatacollector-o
toasterson:anima/01a0878e-53b5-7820-be08-fadc5de1b74b
toasterson:claude/wi-019f85b9-adversarial-review-heka-long-term-memory
toasterson:fix/core-context-recovery
toasterson:fix/akh-shared-ci-test-isolation
toasterson:fix/ci-akhomed-smoke-contract-20261001
toasterson:fix/ci-native-secret-delivery-20261001
toasterson:fix/ci-native-builders-20261001
toasterson:fix/ci-quiet-command-heartbeats-20260930
toasterson:fix/ci-flux-verified-digest-bundle-20260930
toasterson:fix/ci-workspace-profiling-defaults-20260930
toasterson:fix/ci-verified-vesta-image-20260930
toasterson:fix/ci-image-build-log-throughput-20260930
toasterson:fix/ci-release-progress-20260930
toasterson:fix/ci-complete-platform-image-set-20260930
toasterson:migration/runpod-openbao-20260929
toasterson:migration/armini-fleet-secret-guidance
toasterson:migration/lilith-openbao
toasterson:feat/lilith-c2-serve
toasterson:feat/lilith-c2-roman-role
toasterson:feat/lilith-c2-announce-relay
toasterson:docs/lilith-c6b-7900xtx-results
toasterson:feat/lilith-c6a-wireguard-k0s
toasterson:feat/lilith-c4b-exam-harness
toasterson:fix/lilith-recorder-thread-capture
toasterson:feat/lilith-c4-cos-dojo
toasterson:fix/lilith-cuda-numerics-default
toasterson:feat/lilith-c5-trajectory-export
toasterson:fix/lilith-c6-round3
toasterson:feat/lilith-pod-watchdog
toasterson:fix/lilith-c6-smoke-round2
toasterson:docs/p6-5-outcomes
toasterson:fix/lilith-template-hash-convention
toasterson:feat/lilith-c1-cos-role
toasterson:feat/lilith-c6-cuda-harness
toasterson:feat/lilith-c3-recorder
toasterson:feat/lilith-c6a-wireguard
toasterson:docs/crew-names-lakota-english
toasterson:fix/relation-enrichment-odd-orphans
toasterson:feat/53g-pr7-delegation-bootstrap
toasterson:feat/roman-stable-signed-core
toasterson:fix/execd-allocation-leak
toasterson:feat/53g-pr7-cluster-delegation
toasterson:docs/vesta-publish-main
toasterson:fix/akh-runtime-execution-mode
toasterson:docs/lilith-names-kv
toasterson:docs/lilith-local-gpu-qualification
toasterson:docs/lilith-full-autonomy
toasterson:docs/lilith-c5a-findings
toasterson:docs/lilith-supervisor-wireguard
toasterson:docs/fix-adam-kaine-doc-gaps
toasterson:docs/lilith-chief-of-staff-rl
toasterson:feature/lilith-runtime-training-runpod
toasterson:feat/53g-pr8-vesta-sandbox
toasterson:feat/53g-pr5-monitor-source
toasterson:feat/53g-pr6-anima-source
toasterson:feat/53g-pr7-janus-delegation
toasterson:feat/paragraph-streaming
toasterson:fix/roman-core-secret-files
toasterson:fix/roman-core-credentials
toasterson:phase53/full-akh
toasterson:claude/wi-01a0c901-bound-the-process-output-a-model-receive
toasterson:fix/wi-358-candle-kv-suffix-prefill
toasterson:opus1/reviewer-command-output-budget
toasterson:anima/01a0297c-7321-7471-92a3-e4b4e2b38053
toasterson:recover/wi-324
toasterson:claude/wi-01a08260-adr-099-1-typed-communication-directive
toasterson:claude/wi-019fe826-awaken-ritual-a-failed-ritual-strands-a
toasterson:docs/adr-112-kaine-theory-first
toasterson:fix/roman-provider-blocks-20260921
toasterson:archive/2026-09-27-hephaistos-worktree-agent-a274bb44
toasterson:archive/2026-09-27-hephaistos-worktree-chat-e2e
toasterson:fix/roman-wi-pagination-20260918
toasterson:fix/provisioning-reconciliation-20260917
toasterson:claude/wi-01a09fed-isolate-runtime-recovery-and-quarantine
toasterson:fix/shell-cwd-ci-isolation-20260914
toasterson:wip/production-akh-implementors-20260816
toasterson:wip/production-akh-rollout-20260816
toasterson:claude/wi-01a00ed0-code-ingest-detect-repository-breaks-und
toasterson:claude/wi-019f85d6-wave-w1-ritual-genesis-pantheon-packs-di
toasterson:codex/akh-deep-wi234
toasterson:codex/wi180-deep-rebase
toasterson:research/akh-agent-loops-cursor-opencode
toasterson:research/akh-agent-loops-codex-claude
toasterson:claude/wi-019f85b9-adversarial-review-distributed-inference
toasterson:claude/wi-019f85d6-wave-r2-ownership-autostart-owner-host-c
toasterson:claude/wi-01a02966-adr-081-s0-harness-make-the-three-channe
toasterson:manual/tecton-wi329
toasterson:claude/wi-01a0144a-flaky-test-agent-ollama-tests-chat-strea
toasterson:codex/wi183-recovered-prerebase
toasterson:claude/wi-019dd122-phase-41i-unified-trace-envelope-joining
toasterson:claude/wi-019f85d6-wave-r4-akh-doctor-read-only-7-sections
toasterson:claude/wi-019f90cb-p26-3-polarquant-kv-cache-compression-in
toasterson:claude/wi-019fa8f0-adr-081-s0-pay-the-r2-empirical-bet-prob
toasterson:claude/wi-019dd0c5-phase-42b-longmemeval-locomo-harness-wit
toasterson:claude/wi-019f90cb-p26-4-neural-vsa-encoder-project-layer-n
toasterson:claude/wi-019fdd22-the-learn-on-new-triples-trigger-fires-4
toasterson:claude/wi-019fe636-sleep-relocate-leave-the-akh-advisory-lo
toasterson:claude/wi-019fe260-any-acp-call-against-a-non-resident-work
toasterson:archive/wi-019fa44f-rebased-onto-main
toasterson:claude/wi-019fbe82-the-akh-emits-tool-activity-as-prose-in
toasterson:claude/wi-019fbf62-phase-44n-context-rot-curve-bench-per-mo
toasterson:claude/wi-019fcce4-per-turn-dispatch-mode-akh-dispatch-mode
toasterson:agent/e138bd65c5aa
toasterson:claude/wi-019fcd3d-akhomed-on-arm64-should-run-pvc-less-in
toasterson:claude/wi-019fb44f-a-turn-goes-silent-after-its-work-is-don
toasterson:archive/wi-019fa44f-sessions-on-one-akh-still-serialise-on-t
toasterson:claude/wi-019f85d6-wave-r1-config-spine-config-crate-typed
toasterson:archive/2026-07-28-wave-r2-ownership-autostart-owner-host-c
toasterson:archive/2026-07-28-wave-w4-render-tier-psyche-render-pipeli
toasterson:archive/2026-07-28-wave-w2-the-wizard-akh-onboard-verbs-akh
toasterson:archive/2026-07-28-wave-w1-ritual-genesis-pantheon-packs-di
toasterson:archive/2026-08-03-38j-pre-reset
toasterson:claude/wi-019db1bd-anima-integration-workspace-daemon-that
toasterson:archive/2026-08-03-38k-pre-reset
toasterson:claude/wi-019dc599-phase-39-distributed-inference-fabric-ll
toasterson:claude/wi-019dc57a-replace-continuous-learning-wikipedia-wi
toasterson:claude/wi-019f9f56-sessions-report-the-wrong-work-item-teac
toasterson:claude/agent-sandbox-workspace-root
toasterson:claude/wi-019f9a1e-17-work-items-frozen-since-2026-07-23-ag
toasterson:claude/wi-019f85d7-wave-w3-birth-extras-procedural-avatar-f
toasterson:claude/wi-019f85d6-wave-r3-akhadvertisement-akh-daemon-akhs
toasterson:claude/wi-019f85ba-adversarial-review-mcp-tools-kg-operatio
toasterson:claude/cool-carson-b63ef4
toasterson:worktree-phase38f-pg-authoritative-workspaces
toasterson:feat/macmini
toasterson:claude/wi-019db054-phase-36-delegation-external-scheduling
toasterson:claude/wi-019db054-phase-32-llm-knowledge-extraction
toasterson:claude/wi-019db054-phase-30-procedural-skills
toasterson:claude/wi-019db054-phase-28-n-akh-semantic-router
toasterson:claude/wi-019db054-phase-24-sensory-grounding
toasterson:claude/wi-019db054-phase-23-affective-system
toasterson:claude/wi-019db054-phase-27-live-kg-llm-training
toasterson:claude/wi-019db054-phase-26-llm-vsa-deep-integration
toasterson:claude/wi-019db054-release-alpha-kubernetes-deployment
toasterson:claude/wi-019e3397-bug-infer-rules-creates-indiscriminate-p
toasterson:claude/wi-019dbc03-bootstrap-embedding-nlu-llm-models-via-o
toasterson:claude/wi-019db054-phase-20-active-inference
toasterson:claude/wi-019dd0c7-phase-42h-cross-tool-bridge-daemon-opena
toasterson:claude/wi-019dd0c6-phase-42g-akhipedia-auto-extraction-from
toasterson:claude/wi-019e5982-akhomed-migrate-from-redb-to-postgres-fo
toasterson:claude/wi-019e481e-mcp-provenance-filter-find-triples-by-de
toasterson:claude/wi-019e481d-bounded-snapshot-mcp-workspace-snapshot
toasterson:claude/wi-019dd122-phase-41h-ooda-thinkingloop-integration
toasterson:claude/wi-019dd121-2026-04-28-synthesis-prompt-plan-tool-ca
toasterson:claude/wi-019dd0c5-phase-41-the-thinking-engine-unified-thi
toasterson:claude/wi-019dc9c9-phase-39a-llmbackend-trait-candlelocal-i
toasterson:claude/wi-019dc9c9-phase-38a-workspace-entity-lifecycle-loa
toasterson:claude/wi-019dc614-custom-cnpg-image-bake-with-age-pgvector
toasterson:claude/wi-019dc599-phase-38-relocatable-session-based-akh-w
toasterson:claude/wi-019db054-phase-35-t5-training-infrastructure
toasterson:claude/wi-019db054-phase-34-communicative-intelligence
toasterson:claude/wi-019db054-phase-29-capability-exposure
toasterson:archive/2026-09-27-hephaistos-worktree-adr-054-vsa-jump
toasterson:claude/wi-019e26ba-bug-byte-index-panic-on-utf-8-boundary-i
toasterson:claude/wi-019e1598-high-fix-agent-memory-rs-456-byte-index
toasterson:claude/wi-019e3b34-fix-akhomed-llm-integration-for-teacher
toasterson:claude/wi-019dd0c6-phase-42d-hybrid-retrieval-pgvec-vsa-kg
toasterson:claude/wi-019dd0c6-phase-42e-heka-mcp-server-8-tools-rememb
toasterson:claude/wi-019dd0c6-phase-42f-akh-awakening-per-tool-init-cl
toasterson:claude/wi-019e4909-ennead-agents-lack-proper-identity-no-ri
toasterson:claude/wi-019e4909-vsa-symbols-never-grounded-ground-symbol
toasterson:claude/wi-019e3eb9-ground-vsa-symbols-in-tecton-workspace-a
No reviewers
No labels
follow-up
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
toasterson/akh-medu!286
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/wi-019e480e-mcp-crud-endpoints-for-agent-goals-expos"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Anima work item
019e480e-44e8-7213-b072-bdfacd98af68.Part 1 — Goal CRUD (MCP tools)
Currently akhomed exposes
agent_goals(read-only list) andlist_workspaces, but there is no way to create, update, suspend, cancel, or delete agent goals through MCP. The agent creates goals autonomously viainfer_rules/ OODA gap detection, and they accumulate indefinitely (16 active goals observed May 20, with 53 total and 44 canceled from prior sessions).New MCP tools:
create_goal:{workspace, goal_text, criteria_text, priority, parent_goal_id?}→ creates a new goal with explicit criteriaupdate_goal:{workspace, goal_id, goal_text?, criteria_text?, priority?, status?}→ modify existing goalcancel_goal:{workspace, goal_id}→ mark goal as cancelled/archived (soft-delete)prioritize_goals:{workspace, goal_ids: [...], priorities: [...]}→ batch re-prioritizeagent_goals: extend response to include goal status (active/dormant/cancelled/completed), created_at, cycles_spent, triples_created, parent_goal chainGoal lifecycle:
This enables:
Part 2 — Entity Schema Exposure
Currently entity type information is buried in triples — to find what an entity is you have to call
triples_ofand filter foris-arelations. There's no MCP-level concept of entity schemas/types.New MCP tools:
entity_schema:{entity, workspace}→ returns the entity's type hierarchy, outgoing and incoming relation types, confidence scores, and provenance summaryentity_types:{workspace}→ list all unique entity types (values ofis-arelations) with countsentity_type_filter:{workspace, type, page, page_size}→ list all entities of a given type with their core attributesExample response for
entity_schema entity=Tecton:This enables:
Relationship to bounded daemon WI (019e480d)
Goal CRUD is a prerequisite for bounded daemon runs — you need to be able to inject a specific goal before running N cycles, then read results after. The goal lifecycle + entity schema exposure together make the MCP interface a complete management surface for the daemon.
2026-05-21 01:10 UTCSummary
Implement MCP tooling to expose full CRUD lifecycle management for agent goals and querying capabilities for entity schemas. This will allow granular manipulation of daemon states, selective goal prioritization, and easier inspection of triple-based entity relationships.
Approach
First, update the gRPC schema in
anima-prototo define the new messages for Goal CRUD (create_goal,update_goal,cancel_goal,prioritize_goals) and Entity Schema exposure (entity_schema,entity_types,entity_type_filter). Next, inanima-core, introduce the expanded domain models for the goal lifecycle (enums for Proposed, Active, Dormant, Completed, Cancelled, Suspended) and structured entity representations. Inanima-db, create a SQL migration adding the newly required fields (criteria_text,status,priority,parent_goal_id) to the existing goals table, and write repository methods that can aggregate triple data to extract entity types and relationship provenance. Finally, implement the gRPC service methods inanima-serverand register the new MCP tool handlers in theanima-agentdaemon, passing commands down to the structured backend and ensuring the OODA loop logic halts or resumes based on the updated goal statuses.Files likely to change
proto/anima/v1/agent.protocrates/anima-core/src/domain/agent.rscrates/anima-db/migrations/005_agent_goals_and_entities.sql(incremented NNN prefix)crates/anima-db/src/repo/agent.rscrates/anima-server/src/services/agent.rscrates/anima-agent/src/mcp.rs(guess)crates/anima-agent/src/main.rsOpen questions
anima-agent, or just be ignored on the next tick?episodesmentioned in the provenance summary (e.g.,episodes_referencing) already tracked in the activeanima-dbschema, or does this require new tracking infrastructure?is-atypes) need aggressive caching, or is querying the raw triples table on every MCP tool invocation sufficiently performant?anima-agentdirectly handle the JSON-RPC and proxy toanima-servervia gRPC, or doesanima-serverhost the MCP endpoints directly?Complexity
M: The implementation touches the full stack from database migrations to gRPC definitions and daemon MCP bindings. While CRUD operations are straightforward, constructing the entity schemas from raw graph triples in PostgreSQL will require somewhat complex aggregation queries.
REQUEUE POINTERS (2026-07-23)
Requeued from
parked/human-parked(parked since May, 9 prior sessions, all failed, last 2026-05-21).1. ⚠ THE TRIAGE SECTION ABOVE POINTS AT THE WRONG REPOSITORY. The auto-generated "Approach" and "Files likely to change" list ANIMA paths —
proto/anima/v1/agent.proto,crates/anima-core/...,crates/anima-db/...,crates/anima-server/...,crates/anima-agent/.... This is an akh-medu work item; akh-medu is a separate repo (https://code.aopc.cloud/toasterson/akh-medu) with its OWN crates.anima-agentandanima-aiare retired in Anima anyway (ADR 0018). Ignore that file list entirely and locate the real akhomed MCP surface in akh-medu. This mis-generation affects several April/May akh-medu WIs and is a plausible contributor to the repeated failures.2. This is TWO independent deliverables — land Part 1 first. Part 1 = Goal CRUD MCP tools. Part 2 = entity schema exposure. They share nothing but the MCP registration surface. If the exit bar is tight, split Part 2 into a follow-up WI rather than holding Part 1 hostage.
3. Executor is now
tecton(2026-07-23) — the akh works on its own MCP surface and has direct knowledge ofagent_goals,list_workspaces,triples_ofand the OODA goal lifecycle. Verify the CURRENT live tool surface before trusting this description's inventory; it was written in May.4. The motivating numbers are stale — "16 active goals, 53 total, 44 cancelled" was observed 2026-05-20. Re-measure before designing cleanup semantics.
5. Implement the lifecycle as written (
proposed → active → dormant → completed | cancelled | suspended). It is deliberately richer than Anima's phase axis and unrelated to it — do not try to align the two.6. If you hit the same wall twice, STOP and report rather than burning turns. This WI was parked because it looped.
Pull request closed