.agents/skills/project-prometheus-profiles/ownership-proof.md
Create OPERATOR-MODEL.md in the deliverable directory before authoring profile YAML.
This artifact is not a dashboard template and does not prescribe one universal navigation tree. It preserves the semantic reasoning that flat metric exposition cannot express:
Without this proof, an author can describe a good application model and then accidentally emit a profile organized by metric type, signal role, or unit. A completed checklist does not expose that contradiction. The strict source/design contracts and executable replay reconciliation do.
Research and state the operator model independently of the metric inventory:
Metric names can suggest research questions, but they MUST NOT define this model by themselves. A prefix, suffix, unit, or Prometheus type is evidence about a signal, not proof of its causal owner.
Draw the capability and processing-flow map before assigning source families. Include optional modules and hand-offs in the declared support scope even when the available deployment does not enable them.
For each operator owner, record whether workload, outcomes, errors, latency, saturation, capacity, and resource evidence is:
This diagnostic completeness matrix does not require every role to exist. It prevents one quiet deployment from making an entire capability or failure mode disappear from the operator model without explanation.
For every in-scope source family the writer could retain before profile policy removes it, make the objective facts explicit
in SOURCE-SEMANTICS.yaml and its operator destination explicit in PROFILE-DESIGN.yaml. Include source-defined optional
families absent from the observed deployment. OPERATOR-MODEL.md states reusable domain rules and MUST NOT copy the machine
contracts.
Do not collapse multiple source families into one ledger row when their owners, populations, identities, or unit algebra differ. Shared units do not prove shared ownership. Shared ownership does not prove that values belong on one axis.
Use stable population identifiers when several families share the same noun. For example, frontend requests, internal work items, emitted choices, retries, and parser events can all be called “requests” while remaining non-comparable populations.
Use causal and operator evidence, not a fixed naming rule:
/s suffix does not turn unrelated operations or objects into one chart.When two designs remain defensible, record the alternatives and why the chosen one better supports navigation, filtering, and holistic diagnosis. This is model judgment, not a reason to omit the decision.
After authoring, run the stock-proof verifier. It compiles the complete support closure and derives route, chart-plan,
observation, and public-wire facts from the production implementation. The replay MUST reconcile every declared source
signal with exactly one rendered destination or binding exclusion and MUST exercise source-defined optional surfaces through
realizable cases. Use proof-authoring.md for the artifact schemas, ownership boundaries, and commands.
Compare every compiled mapping with SOURCE-SEMANTICS.yaml, PROFILE-DESIGN.yaml, and the reusable rules in
OPERATOR-MODEL.md:
instance_by_labels describes the recorded entity type and retains required parent identity.A contradiction requires one of two honest outcomes:
Do not rationalize a metric-form taxonomy after authoring. Do not declare completion from checked boxes, a hand-written chart
summary, or standalone validator PASS alone. Completion requires executable agreement across the source contract, operator
design, production profile, replay observations, and public wire result.