Decision packet around the order, stable prefix and working memory (issues #3, #4) #27

Manually merged
vinny merged 0 commits from vinny/packet into master 2026-10-13 22:25:51 -04:00 AGit
Owner

Closes #3 and #4. The General's decision packet is built around the order, its rows are leaner, its stable part comes first, and it carries a working memory.

  • Around the order (#3): the units an order's scope and wording name lead the 40 observation rows. strategic_picture.order_area_cells counts own units and contacts in 1.5° cells of a 13.5° square centred on them, beside the global 15×20° cells. Nine cells a side, so the order's own units share the middle cell rather than meeting at a corner. The trimmer can shorten it like the other sections.
  • Leaner rows (#3): columns empty in every row are named once (columns_empty_in_every_row). The fuel table's column names are stated once (fuel_quantities_columns), and an empty table is the string not_collected.
  • Stable prefix (#4): the sections that do not change from turn to turn (protocol, response contract, limits, scenario, operation menu, authorized writes) lead the packet, so llama.cpp or vLLM can reuse them from the prefix cache.
  • Working memory (#4): job_progress.working_memory lists what the job already read, newest first, within 4,000 characters. A result over 1,500 characters keeps its size and an evidence.recall pointer. Resets clear it, and the public job view hides it.
  • Tests: tests/stage4/test_packet_focus.py; the fuel compaction test now compares the lean form. Summary in docs/llm/PROMPT_ANATOMY.md.
  • Stacked on #26.

🤖 Generated with Claude Code

Closes #3 and #4. The General's decision packet is built around the order, its rows are leaner, its stable part comes first, and it carries a working memory. - **Around the order (#3):** the units an order's scope and wording name lead the 40 observation rows. `strategic_picture.order_area_cells` counts own units and contacts in 1.5° cells of a 13.5° square centred on them, beside the global 15×20° cells. Nine cells a side, so the order's own units share the middle cell rather than meeting at a corner. The trimmer can shorten it like the other sections. - **Leaner rows (#3):** columns empty in every row are named once (`columns_empty_in_every_row`). The fuel table's column names are stated once (`fuel_quantities_columns`), and an empty table is the string `not_collected`. - **Stable prefix (#4):** the sections that do not change from turn to turn (protocol, response contract, limits, scenario, operation menu, authorized writes) lead the packet, so llama.cpp or vLLM can reuse them from the prefix cache. - **Working memory (#4):** `job_progress.working_memory` lists what the job already read, newest first, within 4,000 characters. A result over 1,500 characters keeps its size and an `evidence.recall` pointer. Resets clear it, and the public job view hides it. - Tests: `tests/stage4/test_packet_focus.py`; the fuel compaction test now compares the lean form. Summary in `docs/llm/PROMPT_ANATOMY.md`. - Stacked on #26. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
missions.create_flight_plans makes a strike mission's flight plans, and
missions.edit_flight_plan inserts, moves, retypes (Initial Point, Refuel,
Target, Hold, and so on) and deletes one flight's waypoints, with CMO's
altitude and throttle presets. tester.check_flight_plan reads each one
back. They are synced from the tester at 8cf8406 (library revision
changes).

Both refuse an active mission (operator 2026-10-13: inactive missions
only): an active strike whose aircraft can't form a flight makes CMO pop
a modal "cannot launch" dialog in the player's game. The live probe
measured the API: insert and delete count from 1, waypoint wrappers take
position, type and presets, and exact per-leg altitude and speed don't
exist on flight-plan waypoints. Takeoff time and TOT stay with
missions.set_schedule.

tools/qualify_library.py gains a flightplans phase. It makes the strike
inactive before assigning two aircraft of one base and loadout, sets one
aircraft per flight, then generates, edits and removes. The live run
follows. A tools.search test now expects the exact name first. G2 goldens
are regenerated, and the tester copy is in its 9a38504.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Version 0.7.11 (flight-plans)
Some checks failed
check / check (ubuntu-latest) (pull_request) Has been cancelled
check / check (windows-latest) (pull_request) Has been cancelled
3961e6f96a
--controller runs the order cases on a controller already running as its
operator set it up: the imported flow, its real model and stored key,
which the tool never sees. Nothing in its settings changes. Its AI Stop
must be released by the operator on a disposable save, and the judge
reads that controller's store read-only (--controller-data, checked
against its data_directory_id). The case loop and the clean-up are shared
with the scratch-controller mode, and a refused controller leaves no
report.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An imported flow calls the tester's library writes: they pass bare GUIDs (the store
keys units as u:GUID), create reference points in one areas.create_reference_points
call, launch through an active mission rather than hosting.launch, and draw or
remove the side's own no-navigation zones while routing. The write set is now
CMOnet's own WRITE_OPERATIONS. Run of 2026-10-13: move_destroyer was judged failed
although DDG 91's route and speed were read back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The run of 2026-10-13 with flow expert-commander revision 72 and the operator's
model: move_destroyer and launch_pair met their orders; readiness_report and
patrol_setup failed in the flow itself (a schema-invalid campaign reply followed by
reviews writing under a change-nothing order; a brief claiming a patrol its compile
step found infeasible). The harness now also cancels the last case's order, which
otherwise stayed active for the flow to act on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Qualification flows-live-model (partial) on runtime tuple rt-1900.20-6ea83b7ddca3,
with its report docs/verification/llm/order-tests-2026-10-13-flow.json; the
generated status documents are rendered again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Version 0.7.12 (flow-order-tests)
Some checks failed
check / check (ubuntu-latest) (pull_request) Has been cancelled
check / check (windows-latest) (pull_request) Has been cancelled
ee458a12e0
- The units an order's scope and wording name lead the observation rows, and
  strategic_picture.order_area_cells counts own units and contacts in 1.5-degree
  cells of a 13.5-degree square centred on them.
- Columns empty in every row are named once; the fuel table's columns are stated
  once beside the rows and an empty table is "not_collected".
- The sections that repeat unchanged from turn to turn lead the packet, so a
  local server's prefix cache reuses them.
- job_progress.working_memory carries what the job already read, newest first,
  within 4,000 characters; a large result keeps its size and an evidence.recall
  pointer. Resets clear it and the public job view hides it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Version 0.7.13 (packet)
Some checks failed
check / check (ubuntu-latest) (push) Has been cancelled
check / check (windows-latest) (push) Has been cancelled
check / check (ubuntu-latest) (pull_request) Has been cancelled
check / check (windows-latest) (pull_request) Has been cancelled
6cf8372dc8
vinny manually merged commit 6cf8372dc8 into master 2026-10-13 22:25:51 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
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
vinny/CMOnet!27
No description provided.