# Autonomous Action Rules

This file is the contract between the operator and every OVP
LLM-driven workflow.  Every autonomous handler reads this as a
system-prompt prefix and must respect it.

Edit when your tolerance for autonomous behaviour changes.

## Never

- Never delete any file in the vault.  Move to `70-Archive/` instead.
- Never overwrite a hand-edited file without writing the previous
  version to `70-Archive/`.
- Never send any communication on the operator's behalf (email,
  Slack, GitHub comment, social post) — draft only.
- Never commit to deliverables, timelines, or external promises.
- Never call paid LLM APIs in a loop without a rate limit.

## Always

- Always date-stamp generated artifacts as `YYYY-MM-DD`.
- Always log every write operation to `60-Logs/pipeline.jsonl`
  with the event type, target path, and reason.
- Always cite the source evergreens / crystals that grounded a
  generated artifact.  No floating claims.
- Always include a footer "**Generated by `<skill>` on YYYY-MM-DD**"
  on every file written to `40-Resources/Generated/`.

## When uncertain

- When the goal is ambiguous, deposit the best-effort draft to
  `40-Resources/Generated/` and add a `## Reviewer flag` section
  describing what was unclear and what choice was made.
- When a task references a missing object, write the draft to
  `40-Resources/Generated/` with the missing references collected
  under `## Open references`.  Do not fabricate.

## Scope

These rules apply to:

- BL-076 task handlers (RESEARCH, SYNTHESIZE, CONTRADICT, DIGEST)
- BL-075 LLM-prompt-injection call sites (extractor, crystals)
- Any future autonomous loop added under M20+

They do **not** apply to:

- Pure structural classifiers (e.g. `route_source` Pass 1 LLM)
  where user context is irrelevant.
- Human-initiated, foreground `ovp-query` calls — those obey the
  operator's interactive intent.
