lulu-approach · git:20260930.2ecacf7 · 2026-09-30 · sha256 184a7fbd9507f6b9
lulu-approach git:20260930.2ecacf7B
Immutable. This exact content never changes and is served at /api/v1/blob/184a7fbd9507f6b9.
--- name: lulu-approach --- # lulu-approach Domain holder for technical diagnostic decisions. It orchestrates one `decision` session under approach constraints; scripts own transitions, validation, and persistence. ## Prerequisites <HARD-GATE> Do NOT proceed until you have read `../_runtime.md` and `../decision/SKILL.md` in full, and loaded: - `$SKILL_ROOT`, `$WORKFLOW_DIR`, `$PLATFORM`, `$CACHE_DIR` from `## Platform Context` - `$SKILL_DIR` = `$SKILL_ROOT/lulu-approach` (before Session Foundation) - `$DECISION_SKILL_DIR` = `$SKILL_ROOT/decision` - `$APPROACH_ROOT` = `$CACHE_DIR/<cycle_id>/lulu-approach` (the decision session) - Feature identification logic from `## Session Foundation` </HARD-GATE> ## Script Macros ### Local approach macros | Macro | Command | |-------|---------| | `$RESOLVE_CONTEXT` | `python3 "$SKILL_DIR/scripts/resolve_context.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "$SKILL_DIR/constraints-$CYCLE_TYPE.json" [--session-dir "<approach_root>"]` | | `$RESOLVE_CONTEXT_DOCS` | `python3 "$SKILL_DIR/scripts/resolve_context_docs.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "$SKILL_DIR/constraints-$CYCLE_TYPE.json"` | | `$RESOLVE_CONSTRAINT_DOCS` | `python3 "$SKILL_DIR/scripts/resolve_constraint_docs.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "$SKILL_DIR/constraints-$CYCLE_TYPE.json"` | | `$APPROACH_SHELL` | `python3 "$SKILL_DIR/scripts/approach_shell_control.py" --approach-root "$APPROACH_ROOT"` | | `$APPROACH_SESSION` | `python3 "$SKILL_DIR/scripts/approach_shell_control.py" --approach-root "$APPROACH_ROOT" <subcommand> --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "$SKILL_DIR/constraints-$CYCLE_TYPE.json"` | | `$APPROACH_DELIVER` | `python3 "$SKILL_DIR/scripts/approach_shell_control.py" --approach-root "$APPROACH_ROOT" deliver --cycle-id "<cycle_id>" --project-root "$(pwd)" --confirm` | ### Imported decision macros | Macro | Command | |-------|---------| | `$DEC_START` | `python3 "$DECISION_SKILL_DIR/scripts/dec_start.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "<constraints_path>" [--domain-constraints-file "<path>"] [--session-dir "<session_dir>"]` | | `$DEC_REOPEN` | `python3 "$DECISION_SKILL_DIR/scripts/dec_reopen.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "<constraints_path>" [--permit "<permit_path>"]` | | `$GATE_CONTROL` | `python3 "$DECISION_SKILL_DIR/scripts/dec_gate_control.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "<constraints_path>"` | | `$GET_PAYLOAD` | `$GATE_CONTROL get-payload` | | `$BATCH_RECLOSE` | `python3 "$DECISION_SKILL_DIR/scripts/dec_gate_control.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "<constraints_path>" batch-reclose --payloads '<json object>'` | | `$REGISTER_COMMIT` | `python3 "$DECISION_SKILL_DIR/scripts/dec_register_control.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "<constraints_path>" register-commit --operations '<json array>'` | | `$RS_COMMIT` | `python3 "$DECISION_SKILL_DIR/scripts/dec_gate_control.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "<constraints_path>" rs-commit --gate "<G>" --operations '<json array>'` | | `$SESSION_INTEGRITY` | `python3 "$DECISION_SKILL_DIR/scripts/dec_session_integrity.py" --project-root "$(pwd)" --cycle-id "<cycle_id>" --constraints "<constraints_path>"` | `<constraints_path>` is `$SKILL_DIR/constraints-$CYCLE_TYPE.json`. - Subcommand and stdout contracts remain in script module docstrings or `--help`. - Any command that exits non-zero stops the flow: report stderr. ## Shared procedures Steps that Start, Resume, and Reopen invoke by name. ### Pre-entry loading Run before `$DEC_START`, `$APPROACH_SESSION enter`, or `$APPROACH_SESSION reopen`. For each kind, in this order: | Kind | Docs macro | Rules | |------|------------|-------| | Context | `$RESOLVE_CONTEXT_DOCS` | `$SKILL_DIR/references/context-rules.md` | | Constraint | `$RESOLVE_CONSTRAINT_DOCS` | `$SKILL_DIR/references/constraint-rules.md` | 1. Run the docs macro. Parse stdout for `files`. 2. Read each path in `files` once. If `files` is empty, skip reading. 3. Load the rules file and apply its sections in order (Principle → materials → Obligation → Body entry → Self-check). Do not classify documents into kinds yourself. ### Context activation Run after `$DEC_START`, `$APPROACH_SESSION enter`, or `$APPROACH_SESSION reopen` returns `context_docs`: 1. Run `$GATE_CONTROL resolve-context` and pin `$CTX`. 2. Read each returned `context_docs` path once. 3. Declare the active session to the user. Use only the newly pinned `$CTX`. Do not re-run Pre-entry loading; it runs only before session entry. ## Routes Resume and Reopen require the approach shell in Session state. From PackageReady or Delivered, report an unsupported state and stop. ### Start Once Session Foundation is complete: 1. Complete [Pre-entry loading](#pre-entry-loading). 2. Run `$RESOLVE_CONTEXT` with `--session-dir "$APPROACH_ROOT"`; capture stdout path as `$RESOLVED_CONTEXT_PATH`. 3. Run `$APPROACH_SHELL init-shell`. 4. Run `$DEC_START` with: ```bash --constraints "$SKILL_DIR/constraints-$CYCLE_TYPE.json" \ --domain-constraints-file "$RESOLVED_CONTEXT_PATH" \ --session-dir "$APPROACH_ROOT" ``` If it reports a blocked prior stage, report that stage and do not retry. 5. Complete [Context activation](#context-activation). 6. Run the delegated DDF on Active. DC close includes `$GATE_CONTROL complete`. When the session is Completed, continue with [Deliver](#deliver). ### Resume When Active remains this session: 1. Complete [Pre-entry loading](#pre-entry-loading). 2. Run `$APPROACH_SESSION enter`. 3. Complete [Context activation](#context-activation). Then resume the delegated DDF on Active. ### Reopen Requires the approach shell in Session state. If the state is unknown, stop and report rather than infer it from files. 1. Complete [Pre-entry loading](#pre-entry-loading). 2. Run `$APPROACH_SESSION reopen`. Capture stdout `permit_path` as `$PERMIT_PATH` and `transaction_id` as `$TRANSACTION_ID`. 3. Complete [Context activation](#context-activation). 4. Run `$DEC_REOPEN --permit "$PERMIT_PATH"`, perform RS dialogue, then run `$RS_COMMIT --gate "<G>" --operations '<json array>'`. 5. Run `$APPROACH_SESSION complete-reopen --transaction-id "$TRANSACTION_ID"`. Once the session is repaired, resume the delegated DDF on Active. Do not enter Deliver before then. ### Deliver Once the session is Completed (`$GATE_CONTROL complete`), enter PackageReady before delivering; Completed is not stage Delivered (`$APPROACH_DELIVER`): 1. Run `$APPROACH_SHELL enter-package-ready`. 2. Run `$APPROACH_DELIVER`. Session Completed authorizes this deliver. On success, announce stage complete from stdout `next_steps` (join when non-empty). ## Interrupted binding When any route reports an unresolved binding: 1. Stop and report the binding ID and state from stderr. 2. Wait for an explicit human recovery decision; do not auto-select `compensate-active` or `cancel`. 3. After external recovery, restart the applicable route and obtain fresh command output; do not infer the restored target.