---
name: m0n0x41d/h-reason
source: https://app.decimal.ai/s/m0n0x41d-h-reason@3/SKILL.md
source_sha256: 2e6f38eeddcb
---

<!-- haft-contract-source: kernel_interface_catalog source_digest=sha256:26e174fdd87993d53721c925be9727239d77e8a425b7c52d28fd9f833b6d1153 -->

# h-reason — Source-first FPF entry

Contract truth: source-native FPF Query and typed-memory resolve, neighborhood,
and recall are **V9 CONTRACT** capabilities. Source, schema, skill, or
local-test presence is not installed-runtime proof and does not establish Pi
host parity. A readiness claim requires current
**EXACT-CANDIDATE EVIDENCE** from P14 tied to one exact candidate; RC or release
status additionally requires release authority. Pi support is an experimental
compatibility carrier; stable host parity is not proven. Do not infer
**CURRENT PRODUCT** status from contract inclusion or evidence alone.

For purely mechanical, status-only, or exact project-lookup work where no FPF
pattern choice is material, caller abstention is the result: skip FPF Query and
do the bounded work directly. Do not fabricate
`QueryResult(kind="abstained")`; no query ran. Query when pattern applicability
is material or uncertain.

Name the current object, question, relations, constraints, evidence, and
smallest useful result. Query `haft_query(action="fpf", mode="concern",
query="<object + question + terms>")`; compare README practical-use cards, use
the source ToC as the identifier/keyword index, recover exact source units with
`mode="lookup"` or non-broadening `mode="inspect"`, and inspect the selected
pattern's full body. Retrieval returns source candidates. Returned source
material is not applicability, selection, recommendation, evidence,
precedence, or authority.

For a non-English concern, keep the operator's wording in `query` and add
precise English or FPF terms in `known_context`. Those terms are required: the
bundled source is English, a measured 6 of 6 Russian concerns returned zero
candidates without them, and the same concerns with English `known_context`
resolved to the exact card at rank 1. Do not translate `query` itself.

In ordinary working use, identify the selected direct pattern by `PatternID`,
title, and stable source reference. Do not routinely reproduce source spans,
repository-local paths, line ranges, hashes, revisions, or other provenance.
Request trace or audit provenance only when the current use requires it.

Keep exact identifier namespaces separate:

- FPF `PatternID`, `SourceID`, or `UnitID` ->
  `haft_query(action="fpf", mode="lookup|inspect", identifier="<id>")`;
- canonical Haft artifact ID ->
  `haft_query(action="related", artifact_ref="<id>")`;
- code symbol or `SymbolAnchor` ->
  `haft_query(action="node", symbol="<name>")` or `anchor_id="<anchor>"`;
- typed-memory `EntityID` or `EntityAlias` ->
  `haft_query(action="memory", memory_request={"mode":"resolve","query":"<id-or-alias>",...})`;
  never coerce it into another namespace.

After exact resolution, use the closed `memory_request` branch whose nested
`mode` is `neighborhood` to hydrate the EntityOfConcern graph, or `recall` for
bounded lexical recall inside that exact scope. Mode-specific required fields
come from the tool schema. When the project is not ready for these reads, use
`haft_onboard(action="status")` and follow its readable next action; do not
invent or expose an internal schema-selection step. Resolution, projection
inclusion, and recall rank are not truth, applicability, authority, or Work
order.

`known_absent` alone authorizes nothing. A concrete durability-requiring
receiving use may be operator-named or agent-inferred from current Work. Infer
it when cross-session continuation, handoff, audit, automation, delayed or
expensive feedback, or costly reversal already depends on stable identity; the
operator does not need to pre-name it. When identity, context, and aliases are
recoverable, establish the minimum EntityOfConcern without asking for separate permission.
Do not infer this use from an empty graph or generic future usefulness. Call
`haft_entity(action="establish", entity_id=..., label=...,
bounded_context_ref=..., aliases=[...],
persistence_reason="named_receiving_use",
request_provenance_ref=..., idempotency_key=...)`.

The task-level tool owns alias conflict checks, validation, internal project
basis, admission, and post-commit resolution. Use an `established` result's
exact `next_read` unchanged. Preserve `identity_conflict`, `alias_conflict`,
`idempotency_conflict`, `onboarding_required`,
`restart_required`, `rejected`, or `commit_outcome_unknown`; never invent
success. Retry `restart_required` with the unchanged idempotency key.

For an exact current concern, use the closed outer
`action="memory", memory_request={...}` envelope. Put the exact nested mode,
`contract_version="haft.memory.v1"`, `basis={kind:"project_current"}`,
projection profile
`agent_orientation.v2`, explicit requested facets, and a dimensioned read
budget. Inspect `result_kind`, `snapshot_basis`, `projection_basis`,
`interpretation_contract`, facet coverage, item semantic/lifecycle/evidence/
projection postures, and `applied_budget`. Only `complete` supports known
emptiness for that exact facet/profile/snapshot/context. Partial, unavailable,
stale, abstained, or retry-required results must keep their limitation. Honor
`hydrate_before_reliance`. Read affordances obtain more basis; they never
select a capability or next action.

Use `memory.resolve` only when identity is missing, and scoped `memory.recall`
only after exact entity/context resolution. Recall candidates and scores are
discovery, not truth, applicability, recommendation, freshness, authority, or
work priority. Enter FPF Query when pattern applicability, an unfamiliar kind,
or missing method basis is current.

On `wrong_identifier_namespace` with `same_call_retryable=false`, do not retry
the same action or ask for acknowledgement. Execute the exact `recovery_call`
when it names an available read-only surface; otherwise report that the
required surface is unavailable.

For code-area or flow orientation without an exact symbol, use
`haft_query(action="explore", query="<current code concern>")`. Its default
working view returns bounded advisory candidates and never auto-selects
identity. Use trace only for a named replay use and diagnostic only when
retrieval/traversal is itself under diagnosis. Before a non-mechanical edit to
governed code, use `code_context` or `impact` on the actual target. Purely
mechanical work may explicitly abstain and record `not_applicable`. Code-graph
and typed-memory orientation are separate; neither substitutes for the other.

Preserve the operator's original non-English query. Add `entity_of_concern`,
`known_context`, and `intended_use` with precise source-language or FPF terms
when known. Never translate into a hidden bilingual route catalog; unsupported
raw language may abstain.

README practical-use lists are ordinary walkthroughs, not literal mantra
objects or `DemonstrativeUnfoldingSlice` instances unless the source says so.
Query returns candidates; select by current condition and apply the direct
Solution. v9 Query uses authored phrases, headings/keywords, and role-local FTS;
dense retrieval is **DEFERRED RESEARCH**.

FPF navigation is relation-first. Text, graph, card, skill, or walkthrough
order does not prescribe causal, temporal, method, or performed-work order.
Explicit causal claims, MethodDescriptions, WorkPlans, and Work relations may
still state order. Do not call FPF an acausal ontology.

Choose only the capability currently needed. Public skills are independent,
not phases. Keep ordinary reasoning conversational; persist on explicit save
intent or for a concrete receiving use, operator-named or agent-inferred from
current Work. `haft_method` remains internal task-local
code guidance, not a public skill. Decisions and commissions are manual.

Cockpit drift, refresh debt, stale prose, missing bindings, and reconciliation
cues are attention, not project-wide human gates. Continue reversible
already-authorized work and evidence or descriptive maintenance without asking
again. Ask only when the current operation would bind or supersede a choice,
create or broaden authority, cross a human spec-lifecycle gate, make another
material human-reserved choice, or rely on unresolved contradictory binding
content. Stop only the affected operation and name the exact choice. Never ask
for bare `OK`, `yes`, or `да` merely to acknowledge evidence, historicity,
cleanup, or already-authorized continuation.

Before making a human-gate request, publish a self-contained
**Human Gate Brief**. State the gate kind, readable subject, affected operation and blocker;
every real current option; and for each option what changes, what stays
unchanged, its consequence or return condition, and weakest link. Summarize any
existing comparison/parity basis, selection policy, and non-dominated or Pareto
set, or explicitly state that none exists or applies. Mark the recommendation
as advisory, state freshness or expiry, and ask for the human engineer's
assessment of the options, trade-offs, and recommendation in natural language.
Accept ordinary language as the substantive answer. When one current brief
makes the exact effect, subject, option, and scope unambiguous, the host may
route that answer for DecisionRecord binding, manual profile application, or
a later non-default project-memory model change as
`host_routed_operator_request`, without a skill
name or second confirmation. It is not reusable authority; a bare `yes` or `да`
works only for that one current brief. A command or skill invocation adds no
authority. `h-commission` remains a separately manual authority act. Never end
a blocking message with “for resumption it is enough to…”, “reply exactly…”,
or an equivalent command-only instruction. IDs and hashes never replace
readable meaning, and the brief itself is explanation rather than authority.
A bare `h-decide needed`, `approval required`, or `spec gate open` request is
invalid.

There is no public `h-plan`. When composing a plan is current, inspect the
exact WorkPlan source and return an ordinary `U.WorkPlan`-shaped result here.
Do not confuse it with performed Work or manual execution authority.

`E.11.PUA` and `E.11.PUR` are authoritative FPF patterns. Inspect them through
FPF Query when current; Haft defines no namesake routing API.