h-status — Read-only project memory and coverage
If there is no current status, resumption, coverage, or recorded-state
question, return without calling status. Never call h-status after completed
reasoning or edits only to backfill process compliance.
Start with the smallest read-only surface that answers the question:
mcp__haft__haft_query(action="status", full=false)
If the status response says the canonical project profile has several scopes,
treat that as a read-only retry requirement. Use one exact scope_id from the
reported available values and retry the same status call:
mcp__haft__haft_query(
action="status",
full=false,
scope_id="<exact emitted ScopeID>"
)
Choose the scope from the operator's current object or question. Never select the first value, sort the values into a winner, or collapse mixed scopes. If the current use does not identify one scope, report the available ScopeIDs and narrow only that question; unrelated already-authorized Work continues.
Compact output is a cockpit, not proof of absence. Drill down explicitly:
status, full=truefor detailed artifact state;coveragefor module decision coverage plus a bounded exactaffected_fileslink-gap projection when the derived code index is current;related, file="<path>"for decisions and notes touching a file;related, artifact_ref="<ref>"for the exact artifact neighborhood;drift_events,decision_reconcile, orgoverning_setfor the named governance question;contract_generationfor generated carrier-sync hints.
Generated text and read-only projections are discovery surfaces. They are not
evidence truth, gate passage, approval, authority, or work.
Coverage is a read-only projection over stored module data and the current
derived code index. If the code index is uninitialized, stale, or degraded,
report the limitation as unavailable rather than an empty-clean result; do not
rescan it from h-status.
EntityOfConcern memory
Contract truth: typed neighborhood and recall are V9 CONTRACT capabilities. Source, schema, skill, and local-test presence is not installed-runtime proof. A current readiness claim requires EXACT-CANDIDATE EVIDENCE from P14 tied to one exact candidate; RC or release status additionally requires release authority. Do not infer CURRENT PRODUCT status from contract inclusion or evidence alone.
When the operator names an exact current EntityOfConcern and bounded context,
read its typed neighborhood under agent_orientation.v2 rather than searching
the whole artifact corpus:
mcp__haft__haft_query(
action="memory",
memory_request={
"mode":"neighborhood",
"contract_version":"haft.memory.v1",
"basis":{"kind":"project_current"},
"entity_ref":{
"ref_kind_id":"U.EntityRef",
"reference_id":"<exact EntityOfConcern>"
},
"bounded_context_ref":"<exact bounded context>",
"view":{
"projection_profile_ref":"agent_orientation.v2",
"requested_facets":[
"epistemes",
"problems",
"alternatives",
"decisions",
"specifications",
"evidence",
"work",
"implementation",
"unresolved"
],
"detail":"overview",
"include_history":false
},
"read_budget":{
"max_facets":9,
"max_items_per_facet":6,
"max_relation_paths_per_item":3,
"max_carrier_excerpt_characters":800,
"max_provenance_depth":2
}
}
)
Report the exact snapshot/profile basis and distinguish facet coverage:
complete, partial, not_applicable, unavailable, and stale. Known
empty is valid only for complete at that exact basis. Keep item semantic and
lifecycle posture separate from evidence_currentness and
projection_freshness. Honor hydrate_before_reliance; a read affordance may
recover more basis but never becomes a recommendation, skill choice,
NextAction, or authority.
If only a name or alias is known, use memory.resolve first. Use
memory.recall only after exact entity/context resolution and describe its
ranked result as discovery candidates inside that scope. On retry_required,
do not merge stale and current snapshots. On abstained, report missing basis
rather than an empty project memory.
Attention is not interruption
Status reports where judgment may eventually be needed; it does not suspend the project. Drift, refresh debt, missing bindings, stale descriptions, and reconciliation cues do not block unrelated already-authorized Work.
Before suggesting a human interruption, inspect the exact affected artifact and current use. Interrupt only an operation that would mutate the affected binding or authority, cross an explicit human lifecycle gate, or rely on an unresolved contradiction in binding content. Otherwise report the cue and continue. Never request bare approval merely to acknowledge status, evidence, historicity, or technical cleanup.
When status exposes a real gate, do not merely repeat its label. First inspect
the referenced review, section, artifact, or other read-only basis. Then give a
self-contained Human Gate Brief: gate kind and readable subject; the exact
affected operation and why only it is blocked; every real option available now;
for each option what changes, what stays unchanged, the immediate consequence
or return condition, and the weakest link; any existing comparison/parity basis,
selection policy, and non-dominated or Pareto set, or an explicit statement
that none exists or applies; the advisory recommendation; evidence freshness or
expiry; and a question asking for the human engineer's assessment of the
options, trade-offs, and recommendation in natural language. Pair every ID or
hash with readable meaning. Accept ordinary language as the substantive answer.
When one current brief makes effect, subject, option, and scope unambiguous,
the host may route it 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. h-commission remains a
separately manual authority act. The brief itself is explanation rather than
authority. If the read-only basis cannot supply those details,
report that the gate is not yet askable and name the drill-down needed to
recover them.
Coverage inspection
- Call
mcp__haft__haft_query(action="coverage"). - Read file gaps only as files in a decision-bearing module without an exact
active
affected_fileslink. This does not prove that a file is undocumented, unconstrained, or incorrect. - If the operator names a file or module, call
relatedfor that exact path. - If coverage reports an absent or stale derived index, limit only the current coverage claim and surface that a separately authorized refresh is required before relying on it. Continue unrelated Work.
- Distinguish:
- no relevant decision found;
- a decision exists but the file is outside its recorded footprint;
- the file is covered but the governing decision is stale or drifted;
- compact output omitted detail and a full query is still needed.
- Report blind spots as orientation cues. Coverage is not a quality score and does not prove conformance, implementation correctness, or spec completeness.
Spec lifecycle strip
When the operator asks about spec readiness or status mentions missing SpecSections, call:
mcp__haft__haft_spec_section(action="lifecycle")
Report state, current action, carrier, section identity, and any human gate. The lifecycle action is local to the spec state machine; it is not the next step of the whole project. Do not edit, approve, rebaseline, or reopen from this skill.
Presentation
Surface:
- current items relevant to the operator's question;
- stale, drifted, uncovered, or unassessed state with its exact meaning;
- whether a cue affects the current operation or is only background attention;
- which details were not shown and the read-only call that can recover them;
- available capabilities, only when their condition is current.
Do not call refresh mutations, close problems, attach evidence, edit specs, or create artifacts. Pair every artifact ID with its title or one-line claim.