This is the authoritative contract document for CLI stdout, output layout, schemas, statuses, stable interfaces, and the delivery-package handoff contract.
- Stable CLI:
doctor,verify-genus,verify-release-genus,status,next-step,package-results, selection review, external registration, and provider planning command surfaces. - Review-only surfaces: provider proposals, expanded discovery rows, taxonomy enrichment rows, manual supplement hints, representative-only selections, local query genomes, and failed-handoff packages.
- Internal surfaces: module layout and helper functions unless explicitly listed in this document.
- Out of scope: provider login, scraping, purchase, terms acceptance, automatic provider download, unguarded NCBI download, and strict type-strain claims without equivalence-set evidence.
Primary commands write compact JSON to stdout by default. This does not require
--json, --human, or --pretty. Durable details belong in run files.
doctor: one compact JSON object to stdout with version, Python, environment, workspace/output, optional tool readiness, status, and next action. It performs documentation/local checks only.verify-genusandverify-release-genus: compact JSON summary with command, genus, outdir, status, selected counts, report paths, and next action. Relevant stage outcomes are exposed throughblockingandwarnings; this envelope does not add a top-levelstagesfield. Whenverify-genushas written a download plan, stdout includes the same read-onlydownload_plan_readiness_summaryused bystatus. Whenverify-genusstops at the default selection/manual-review checkpoint, stdout also includescheckpoint.id=selection_review_required. That object lists the review artifacts (selection/user_selection.tsv,manifest.tsv,report/summary.md, and the readiness summary when present), safe inspection commands (selection-review strategy,status,next-step, and boundeddownload-smoke prepare --write --outdir <default-bounded-download-smoke-dir>), and actions that remain forbidden without separate explicit approval. The checkpoint is a controlled continuation point, not a download failure, download authorization, final genome acceptance, or strict type-strain promotion. The top-levelrecommended_request_target,recommended_request, andrecommended_next_commandfields point toselection-review strategy --outdir ... --bounded-smoke-outdir ... --jsonfor controllers that consume a single machine-renderable next command. The bounded-smoke directory is a deterministic siblinghandoffs/suggestion and the strategy command still writes nothing. Top-levelnext_actionsalso includes aselection_review_strategyentry with the samerecommended_request_target,recommended_request, andrecommended_next_commandfields so AI controllers that inspect only the primary action list can route to the checkpoint strategy command before anydatasetsexecution. A reviewed continuation usesverify-genus <Genus> --outdir <same> --resume --selection-tsv <absolute-same-outdir>/selection/user_selection.tsv --enable-downloads. This path consumes the explicitly submitted bytes without regenerating selection and does not require--auto-accept-selection. Omitting--enable-downloadsvalidates the file and projects its currently selected rows into the local manifest, name map, download plan, readiness summary, run state, report, and JSON stdout without creating approval, download-result, provider, network, or external-tool effects. Unselected rows remain audit evidence and do not enter the current manifest or plan. The projection forcibly disables discovery, Entrez, taxonomy lookup, expanded discovery, downloads, barrnap, ANI, phylogeny, and provider/tool execution even if their enable flags are also supplied. On either theverify-genus <Genus>surface or the legacy/public--genus <Genus> --selection-policy review-onlysurface, a non-dry-run invocation that names the canonical selection in a trusted same-genus task/outdir but omits--resumefails before durable writes with exit 2,code=reason=reviewed_selection_resume_required, false selection consumption/projection/approval and download authorization/execution fields, and a same-surface, same-genus, absolute-outdir, canonical-selection retry action that adds--resumebut not--enable-downloads. External selection paths, new outdirs, missing task identity, and selection validation without a genus remain standalone-compatible. A successful projection refreshes completion audit/gap outputs when the checkpoint checklist exists. Existing terminal approval history is preserved but is not projected as current authorization; malformed or non-terminal history fails before any write. Projection snapshots include manifest/name map, download plan and readiness, reconciler, completion and gaps, taxonomy plan/cache, local GTDB audit, reports, and run state. Rollback attempts every tracked path using atomic replacement for prior bytes; a partial rollback is explicitly reported asprojection_rollback_failedwith both the original and rollback errors. The run-stateselection_projectionmarker is non-approval state and is trusted only with its exact schema, genus, resolved outdir, fixedselection/user_selection.tsvartifact, digest, projected status, and booleandownloads_authorized=falsebinding.statusandnext-stepenforce that marker independently of approval. A missing marker when stages claim projection, or any malformed marker without an approval file, fails safe. Zero selected rows remain valid because task genus is cross-checked from checklist and the complete selection artifact, not inferred only from manifest rows. Adding--extract-16s barrnapto the authorized continuation runs the existing guarded same-genome barrnap stage after genome registration and records its manifest, source-audit, run-state, and report outputs; approval and successful execution do not alter the selected rows' scientific evidence levels. An offline BioSample cache used during the checkpoint is retained as the run-local normalized BioSample cache. The reviewed continuation and reconciler therefore preserve those supporting signals without requiring the cache argument again. Reviewed continuation reads onlycache/ncbi/biosample_records.tsv; a resume-time external--biosample-cachedoes not replace it, and absence is reported as missing optional evidence. Multiple distinct BioSample accessions for one assembly accession are ambiguous: none is injected and the reconciler emitsambiguous_assembly_candidate_biosample_linkage. These signals still cannot override a species-identity conflict or create strict evidence by themselves. Normal report-inclusive packaging preserves available expanded-discovery results/history, rejected candidates, and manual supplement hints undercompletion/only when the current final run state explicitly recordsenable_expanded_discovery=true. File existence does not enable packaging; disabled files are neither copied nor listed as missing optional artifacts. These remain audit/review artifacts rather than download instructions, strict upgrades, or completion credit. An authorized reviewed selection writesselection/selection_approval.jsonand exposes the same object asselection_approvalin compact stdout and underrun_state.json.config.selection_approvalonly after full validation. The object bindsapproval_kind=reviewed_selection, genus, absolute outdir,selection_artifact=selection/user_selection.tsv, andselection_sha256. Itslifecycle_statusadvances fromauthorizedtorunning, then tosucceeded,failed, orinterrupted; unsuccessful terminal states retainexecution_erroras historical execution outcome, not a success claim. Each explicit reviewed submission creates a newattempt_id. When replacing a trusted terminal attempt,previous_attemptretains its identifier, terminal status, digest, and error; the new attempt never rewrites the old failure as success. A changed selection may therefore be explicitly resubmitted without deleting the old approval file. Malformed, incomplete, mismatched, or stale records fail closed through the normal error response and are not projected as valid approval.statusandnext-steprevalidate the approval against current selection bytes and block stale, malformed, or orphaned non-terminal (authorizedorrunning) records instead of replaying an old successful run state. After inspecting download results, manifest statuses, and runner evidence, an operator may use the same explicit reviewed--resumecommand to replace a structurally valid orphan. The new record marks the prior attempt asabandoned_before_runningorabandoned_running_for_explicit_resume; the latter records that partial side effects may exist and retry risk was explicitly accepted. Keyboard interruption and process-directedSystemExitretain their original exception behavior after writing aninterruptedapproval and non-success run-state/stdout projection. Auto-accept remains represented separately byconfig.auto_accept_selection=true. For a validated terminalinterruptedreviewed attempt,statusreports partial rRNA artifacts when present andnext-stepemits the explicit same genus/outdir/selection reviewed retry. The action warns that download, registration, or rRNA side effects may repeat. Completion audit, summary, or gap files from an older attempt do not prove current-attempt completion, and the approval remains execution authorization rather than scientific confirmation.statusandnext-step: compact JSON view of current run state and recovery guidance only; it does not authorize execution, and gated actions still require separate explicit authorization. When the current guidance is the default selection/manual-review checkpoint,status.next_actions[]andnext-step.recommended_actionalso includerecommended_request_target=selection-review strategy,recommended_request, andrecommended_next_commandso controllers can render the local strategy command without parsing human text. The human message for that checkpoint also starts with the localselection-review strategycommand before mentioning separately approved guarded downloads, so text-only controllers do not treat--enable-downloadsas the first recovery step. The offline installed-wheel release smoke treats the checkpoint,status, andnext-stepJSON plus packageartifact_scope.tsv,handoff_index.md, and completion gap tables as one AI-consumer contract. Package presence alone is not success: consumers must use the JSON execution status and blockers, gap evidence, recommended action, and artifact-scope rows. Rows markedstrict_scientific_deliverable=falseremain non-strict artifacts and do not authorize downloads or upgrade scientific evidence. Whenevidence/reconciler_audit.tsvis available, both commands also emitscientific_gap_summary. It uses the closed classificationscomplete,conflict,missing,insufficient_linkage,candidate,representative, andunknown, with counts and species lists plus the species still requiring manual review. Candidate is not an alias for insufficient linkage; the latter requires an explicit insufficient tier or name/strain-only linkage. The summary validates the required TSV columns, unique non-empty species, booleans, current reconciler schema version, row width, and UTF-8 before emitting. It also fails closed on obvious semantic contradictions such as a strict-usable row that is simultaneously conflict or missing. Malformed or contradictory input leaves this optional field absent rather than publishing plausible zero counts. It is read-only and setsscientific_gaps_are_execution_failures=false; it does not change run status, reconciler tiers, completion, selection, or download eligibility.next-stepalso directs the reader to the row-level reconciler audit and completion gaps when this summary contains non-complete or manual-review rows; audit-only unselected rows are not download instructions or strict-upgrade requests. When an existingcache/ncbi/download_plan.tsvis present,statusalso emitsdownload_plan_readiness_summary: an acquisition-facing, read-only count summary for planned NCBI downloads, existing genomes, missing accessions, and external registered genomes. The summary is derived only from the existing plan. It also exposes bounded smoke-test routing fields such asbounded_ncbi_download_smoke_candidate_count,bounded_ncbi_download_smoke_ready,bounded_ncbi_download_smoke_scope,bounded_ncbi_download_smoke_blockers, andwhole_plan_requires_review. These fields identify whether any planned NCBI rows exist for a separately authorized bounded download smoke; they do not authorize broad or unattended downloads. The summary keepssafe_for_unattended_download=false,downloads_triggered=0,providers_contacted=0,manifest_mutated=false, andstrict_scientific_deliverable=false. When an existingcache/ncbi/genome_registration_results.tsvis present,statusalso emitsgenome_registration_summarywith the relative TSV path, row count,genome_ready_count, and controlled status counts. When count-only FASTA quality notes exist for genome-ready rows, the summary also includesfasta_quality_summarywith fragmentation signal counts, min N50, max record count, ambiguous-base counts, and WGS/scaffold/contig keyword row counts. This is local ZIP extraction and reference-genome installation visibility only; it does not expose raw FASTA text or notes and does not change strict type-strain status, completion, or evidence policy. If non-ready registration statuses, fragmented FASTA signals, or WGS/scaffold/contig header keyword signals are present and no higher-priority manual handoff applies,next-steppoints at the same TSV before recommending downstream genome-dependent stages. When planned NCBI rows are ready, plan-onlystatusandnext-stepguidance can include an isolated smoke-input handoff usingdownload-smoke preparewith--quality-tier recommended,--write, and an operator-chosen--outdir; this remains planning-only and does not download genomes.selection-review strategy: compact JSON strategy for the defaultselection_review_requiredcheckpoint. It reads an existingverify-genusrun directory, summarizesselection/user_selection.tsv,manifest.tsv, andcache/ncbi/download_plan.tsv, recommends a bounded high-quality-first smoke handoff when Complete Genome or Chromosome planned rows exist, and lists actions that remain forbidden without separate approval. It never writes files, runsdatasets, opens the network, contacts providers, mutates the manifest, accepts downloaded genomes, or promotes strict type-strain status.package-results: compact JSON with delivery directory, included artifacts, missing optional files, success/failure handoff status, warnings, and next action. With--include reportsor--include all, existing workflow completion files are copied tosource_audit/completion_audit.tsv,source_audit/completion_summary.tsv,completion/gaps.tsv,completion/uncovered_species.tsv, andcompletion/16s_gaps.tsv. Missing members are disclosed without creating replacement tables. Their artifact scope iscompletion_evidencewithstrict_scientific_deliverable=false; packaging does not change completion metrics or strict evidence status.download-smoke prepare: compact JSON summary for an isolated bounded NCBI download smoke input package. It reads only the explicit--download-planTSV, selects up to--limitrows withstatus=planned, and never runsdatasets, opens the network, contacts providers, mutates the manifest, or creates strict scientific deliverables. When--writeis used,output_fileslists the bounded plan TSV, complete command handoff TSV, and summary JSON.download-smoke execute: compact JSON summary for a bounded command handoff manifest. By default it only validatesbounded_download_smoke_commands.tsvand writes optional isolated execution audit files. With explicit--executeplus--write --outdir, it runs only manifest-pinneddatasets download genome accession ... --include genome --filename ...commands, records return codes and ZIP readiness for later inspection, and still does not mutate manifests, install genomes, accept final genome usability, or create strict scientific deliverables. For blocked download-smoke outputs, summaryblockersare repeated in the top-levelblockingarray for AI routing.
AI-facing stdout must stay short. Long logs, reports, tables, diagnostics, and evidence belong in the run directory. Provider/authentication banners and third-party library prints are not part of the stdout contract. Primary AI-facing command stdout must remain one JSON object; banners and logs belong on stderr or in durable log files.
verify-genus accepts
--evidence-policy {strict,candidate,exploratory} and defaults to strict.
Unknown values fail during argument parsing. --smoke-profile limit4-real
also defaults to strict; an explicit candidate or exploratory value is
preserved.
The resolved value is metadata in AppConfig.evidence_policy,
run_state.json under config.evidence_policy, and the single compact
verify-genus stdout JSON object under config.evidence_policy. Reports and
the package handoff index repeat the policy.
The pure evaluator contract is usable (boolean), scope
(strict|candidate|exploratory|blocked|missing), reason (stable explanatory
text), caveats (zero or more required qualifications), and strict_usable
(boolean independent of the selected policy). It consumes existing manifest
record fields and performs no file, network, provider, or environment IO.
report/summary.md includes an Evidence Policy Summary with
policy, evaluated_record_count, genome_usable_count,
genome_strict_usable_count, rrna_16s_usable_count, and
rrna_16s_strict_usable_count. The same additive record counts are written to
source_audit/completion_summary.tsv as the metrics evidence_policy,
policy_evaluated_record_count, genome_policy_usable_count,
genome_policy_strict_usable_count, rrna_16s_policy_usable_count, and
rrna_16s_policy_strict_usable_count. Older completion summaries without
these additive metrics remain readable.
These fields do not filter manifest or selected rows, downloads,
rrna/all_16S.fasta, phylogeny input, or package members, and they do not
change workflow stage-status or existing completion-status metric semantics.
When evidence/reconciler_summary.json or related local reconciler audit
outputs exist, report/summary.md includes a compact Strict Reconciliation
Audit section. The section reads the JSON count fields record_count,
strict_count, candidate_count, conflict_count, gap_count,
manual_review_count, diagnostic_count, and audit_only, and may show a
short top-diagnostic summary from evidence/reconciler_diagnostics.tsv. This
section is audit-only. package-results --include reports and --include all
copy existing reconciler audit files to evidence/ for audit availability
only. Their counts, including strict_count and strict_usable=true row
values, do not change completion metrics and do not by themselves make package
artifacts strict scientific deliverables. Strict gating / package tiering is
future work. If the reconciler outputs are absent, the section and package
members are omitted; if the summary JSON is malformed or the triplet is
partial, report and package generation continue with compact warnings or
without reconciler counts.
typetreeflow.evidence.bacdive is an offline, fixture-testable enrichment
model. It is not wired into verify-genus, provider planning, downloads,
manifest writes, reports, packages, or completion metrics.
The normalized BacDiveEvidenceRecord fields are species_name,
strain_designation, culture_collection_numbers, is_type_strain,
bacdive_id, dsmz_accession, source_url,
source_release_or_accessed, evidence_tier, evidence_notes, and
source_platform. The parser accepts missing optional fields because source
records may omit empty BacDive fields.
Evidence tier mapping is intentionally conservative. BacDive/DSMZ
is_type_strain=true maps to authoritative_type_material_candidate.
Rows without that signal map to bacdive_insufficient_type_signal. The model
does not emit strict_lpsn_confirmed or curated_strict_confirmed.
The offline reconciliation status is one of bacdive_candidate_match,
bacdive_lpsn_token_overlap, bacdive_conflict, or
bacdive_insufficient_linkage. LPSN token overlap remains candidate evidence;
strict use requires a later proof chain tying the selected genome or BioSample
to the LPSN type-strain equivalence set.
typetreeflow.evidence.bacdive_adapter defines an offline adapter contract for
future optional live BacDive enrichment. The P3b-a contract includes
BacDiveLookupRequest, BacDiveLookupResult, BacDiveDiagnostic,
BacDiveClientProtocol, FakeBacDiveClient, and an injectable
BacDiveLiveClient. The live client is implemented behind an explicit
transport abstraction and is covered by simulated HTTP tests. The public
workflow constructs it only when --enable-bacdive-enrichment is explicit and
no caller-injected BacDive client is supplied. Requests are bounded to
culture_collection, strain_designation, or species_name, with
culture-collection tokens preferred by the request builder.
Adapter lookup statuses are success, no_result, api_unavailable,
timeout, rate_limited, schema_drift, conflict, and
terms_not_confirmed. These statuses are structured diagnostics for the
adapter layer; they are not workflow-stage failures, completion statuses, or
missing-genome findings. The fake client normalizes fixture dictionaries into
BacDiveEvidenceRecord rows and preserves diagnostics for multiple
accessions, missing LPSN token overlap, species conflicts, and schema drift.
verify-genus exposes BacDive enrichment configuration:
--enable-bacdive-enrichment,
--bacdive-query-mode {tokens,species,both},
--bacdive-timeout-seconds N, and --bacdive-max-queries N. Defaults are
disabled, tokens, 20, and 50. Timeout and max-query values must be
positive, and unknown query modes fail during argument parsing.
The resolved values are stored in AppConfig, run_state.json under
config.enable_bacdive_enrichment, config.bacdive_query_mode,
config.bacdive_timeout_seconds, and config.bacdive_max_queries, and the
single compact verify-genus stdout JSON object under the same config keys.
When explicitly enabled, the BacDive enrichment stage runs from LPSN checklist
rows and type-strain text. Caller-injected fake or fixture-backed clients keep
the existing offline behavior, including species and both query-mode tests.
When no client is injected, the public workflow constructs BacDiveLiveClient;
that BacDive live-client construction does not read environment files, API
keys, credentials, cookies, or login state. Public live workflow mode is
bounded to bacdive_query_mode=tokens;
species and both are blocked before any HTTP call with
bacdive_live_query_mode_not_allowed, client_kind=none, and
live_api_called=false.
In public live tokens mode, only culture-collection token requests are
executed. Other token kinds are skipped with
bacdive_live_query_kind_not_supported. The workflow passes
bacdive_timeout_seconds to the live client, maps bacdive_max_queries to the
total HTTP call cap including lookup and /v2/fetch/{bacdive_id} calls, and
uses an internal max_detail_ids=1 guard for detail fetches. No raw BacDive
payloads are written.
BacDiveLiveClient supports BacDive v2 path construction for
/v2/culturecollectionno/{culturecollectionno},
/v2/taxon/{genus}/{species_epithet}, and /v2/fetch/{bacdive_id}. It
requires explicit terms and citation confirmation at construction, uses no
environment variables, credentials, authentication headers, or cookies, and
accepts an injected get_json(url, timeout, max_response_bytes) transport for
tests. Its HTTP call cap covers both lookup and detail-fetch requests, its
detail-ID cap prevents oversized /v2/fetch/{bacdive_id} requests, and its
response-size guard blocks oversized response bodies before JSON parsing. The
normalizer accepts BacDive v2 detail records returned directly, under common
result wrappers, or as /v2/fetch/{bacdive_id} top-level dictionaries keyed by
BacDive ID, while still requiring enough nested section/subsection fields to
form a minimal candidate record. Simulated transport tests cover endpoint
construction, nested and ID-keyed fetch response parsing, no result, schema
drift, malformed JSON, oversized response blocking, timeout, HTTP 429 rate
limiting, HTTP 5xx unavailability, and candidate-only source audit metadata.
These tests do not call the live BacDive API, save raw BacDive payloads, or run
a live TypeTreeFlow workflow. Workflow live wiring tests use fake HTTP
transports or injected clients only.
The query planner is pure and IO-free. In tokens mode it plans only LPSN
type-strain token lookups (culture_collection for recognized collection
identifiers, otherwise strain_designation). In species mode it plans one
species_name lookup per checklist species. In both mode it plans token
lookups first and uses species fallback for no-token rows or token no_result
responses while respecting bacdive_max_queries. No-token species and max-cap
skips are diagnostics, not workflow failures.
The normalized outputs are review-only:
evidence/bacdive_enrichment.tsv,
evidence/bacdive_diagnostics.tsv, and
evidence/bacdive_source_audit.json. They are not placed under cache/, are
included in report/summary.md and package-results --include reports only
as candidate-only audit outputs when all three normalized files are present,
and do not alter provider planning, download plans, selected rows, manifest
rows, completion metrics, evidence-policy strict results, or stdout counts.
Packages copy only these normalized files to evidence/; raw BacDive cache
files and source snapshots are not package members. run_state.json may
include a bacdive_enrichment stage when these outputs exist. Its summary
records planned queries, completed queries, record count, diagnostic count, and
client kind.
report/summary.md, package README files, and handoff_index.md may render a
compact BacDive source-audit row from the normalized JSON fields:
client_kind, live_api_called, http_call_count, endpoint_count,
lookup_call_count, fetch_call_count, last_http_status, stopped_reason,
raw_payload_saved, and raw_payload_policy. That row is operational
provenance for first readers; it does not confirm strict type-strain genomes or
change selection, manifest rows, selected genome evidence, strict
evidence-policy results, completion metrics, TSV schemas, or package
membership. Older source audits missing additive fields render stable
not-recorded values rather than failing report or package generation.
The source audit records truthful client provenance. Fake-client runs write
client_kind=fake and live_api_called=false; pre-call skipped public live
runs write client_kind=none and live_api_called=false; public live runs
with an HTTP transport write client_kind=live and set live_api_called=true
only after at least one HTTP call is actually performed. Live audits include
bounded http_calls, actual endpoints and endpoint URLs from the adapter,
http_call_count, max_http_calls, max_detail_ids, max_response_bytes,
official documentation/field/terms/citation/license URLs,
raw_payload_policy=not_written, and raw_payload_saved=false.
Every enrichment row is candidate-only. It writes
selected_genome_linkage=not_evaluated, strict_confirmed=false, and
source_platform=bacdive; BacDive candidates never upgrade strict evidence.
Package README and handoff index repeat this candidate-only, audit-only
boundary.
typetreeflow.evidence.reconciler is a pure offline model for reconciling
LPSN, NCBI Assembly/BioSample, BacDive/DSMZ, archive, curated, and selected
genome linkage facts into an audit tier. The model performs no provider
planning, downloads, selection, manifest writes, reports, packages, or
completion metric updates.
The model contract is built from frozen dataclass records:
ReconcilerInput, SourceEvidence, SelectedGenomeEvidence,
ReconciliationConflict, and ReconciledEvidence. parse_reconciler_input
accepts JSON-like offline fixture dictionaries, and
reconcile_type_strain_evidence(input) returns a ReconciledEvidence record.
The implementation performs no file, network, provider, environment,
credential, cookie, API-key, or external-tool IO.
The reconciled tier is one of:
strict_lpsn_confirmed, curated_strict_confirmed,
authoritative_type_material_candidate, ncbi_type_material_candidate,
likely_type_material_candidate, representative_non_type,
conflict_blocked, insufficient_linkage, or missing_public_genome.
Each ReconciledEvidence.to_dict() exposes the stable fields
reconciled_evidence_tier, strict_usable, requires_manual_review,
strict_upgrade_basis, authority_sources, matched_lpsn_type_tokens,
matched_bacdive_accessions, matched_biosample_accessions,
selected_genome_linkage, conflict_status, and reconciliation_notes.
Tuple-valued fields serialize as JSON lists.
Strict usable tiers require an LPSN accepted or curated-accepted species, LPSN
or curated type-strain equivalence tokens, selected genome strain/culture
collection/BioSample linkage that overlaps the LPSN token set, and no explicit
conflict. strict_lpsn_confirmed records the minimum LPSN plus selected-genome
token chain. curated_strict_confirmed requires that same chain plus
corroborating BacDive/DSMZ, archive, or curated source evidence that does not
contradict the selected genome linkage.
BacDive/DSMZ type-strain rows alone return
authoritative_type_material_candidate, not strict. NCBI Assembly or BioSample
type_material signals alone return ncbi_type_material_candidate, not
strict. Existing likely type-material signals return
likely_type_material_candidate unless the full strict chain is present.
Representative or reference labels without type-material linkage return
representative_non_type. Species-name-only or strain-text-only selected
matches return insufficient_linkage and require manual review before any
strict use.
Explicit species conflicts, selected strain or culture-collection token
conflicts, BioSample conflicts, and negative type-material evidence return
conflict_blocked, set strict_usable=false, and set
requires_manual_review=true, even when one source claims type material.
Checklist rows with public_genome_available=false return
missing_public_genome.
typetreeflow.evidence.reconciler_audit is the offline mapper and writer layer
for normalized audit outputs. It accepts synthetic or already-normalized local
evidence rows and maps them to ReconcilerInput records before calling
reconcile_type_strain_evidence().
verify-genus runs an audit-only strict reconciliation hook after stable
selection dry-run/plan outputs are written. In guarded auto-accepted download
runs, it refreshes the same audit outputs after the final manifest write. The
hook reads only local workflow files: species_checklist.tsv,
selection/user_selection.tsv, manifest.tsv, optional
evidence/bacdive_enrichment.tsv, and optional BioSample cache TSV. Missing or
malformed optional BacDive/BioSample inputs become diagnostics and do not fail
the workflow. When a checklist species has no selected row but exactly one
unselected local selection candidate, the audit evaluates that candidate so
insufficient linkage or identity conflict is not collapsed into missing public
genome. The row remains unselected and cannot enter the manifest or download
plan through this audit-only fallback. Zero or multiple unselected candidates
without a selected row remain a gap rather than invoking an arbitrary choice.
strict_reconciliation is the run-state stage id for this audit-only surface.
The stage is ordered logically after selection and before gtdb_audit.
succeeded means the audit output triplet was written with no warning-level
diagnostics, conflicts, gaps, or manual-review rows. warning means the output
triplet was written with optional input issues, gaps, conflicts, or manual
review rows. failed means the written triplet is incomplete or unreadable.
These statuses do not change status/next-step stdout, completion metrics,
manifests, selection, downloads, providers, packages, or --evidence-policy.
Report surfacing is limited to the audit-only Strict Reconciliation Audit
summary. verify-genus writes or refreshes the local reconciler outputs before
same-run report generation, so a generated report/summary.md sees the
reconciler audit counts without a separate report-only refresh. Guarded
auto-accepted download runs refresh the audit outputs after the final manifest
write and before the final report is generated.
--report-only has priority over --resume. In particular,
verify-genus GENUS --resume --report-only reads the existing manifest and
available reconciler outputs to refresh the reports without entering resume
planning, rewriting the manifest, or regenerating derived workflow outputs.
Normal --resume behavior is unchanged when --report-only is absent.
--manual-review-import-dir <dir> is accepted with --report-only or
package-results. It is always an explicit read-only input and is never
automatically discovered under the workflow outdir.
When explicitly supplied, report generation reads only
manual_review_summary.json, manual_review_decisions.tsv, and
manual_review_diagnostics.tsv from that directory. It does not recurse,
discover workflow artifacts, or mutate the input. If all three are absent
(including a missing or empty directory), the section is omitted. Partial or
malformed input produces a compact warning in ## Manual Review Import Audit
and does not fail the report. Valid summary counts appear in stable order:
record_count, accepted_decision_count, diagnostic_count,
strict_upgrade_candidate_count, strict_upgrade_applied, and audit_only.
At most five diagnostic-code counts are displayed; diagnostic messages and raw
decision content are not displayed. Primary stdout retains the existing compact
JSON contract.
--acquisition-worklist-dir <dir> is accepted with --report-only or
package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report generation reads
only acquisition_worklist.tsv and acquisition_worklist_summary.json from
that directory. A missing or empty directory omits ## Acquisition Worklist Audit. Partial or malformed input keeps report generation successful and
shows a compact warning. Valid summary counts show record_count,
downloads_triggered, providers_contacted, manifest_mutated,
audit_only, and strict_scientific_deliverable, plus up to five nonzero
lane counts and review-signal counts. Row-level species, recommended action text, notes, or source
details are not displayed. Report inclusion does not contact providers,
trigger downloads, mutate manifests, create workflow outputs, or create strict
scientific deliverables.
For package-results --include reports or --include all, each validated
member is copied under acquisition_worklist/. Each copied member gets one row
in package artifact_scope.tsv (and reports/artifact_scope.tsv) with
scope=audit, evidence_policy=acquisition_worklist_audit,
strict_scientific_deliverable=false,
recommended_use=acquisition lane review,
not_for=provider contact or download execution, and
source_artifact=acquisition_worklist_builder. Missing input is omitted.
Partial or malformed input copies only valid members and adds a compact
warning to the README, handoff index, and compact JSON envelope.
Failed-handoff packages exclude these artifacts and rows.
--coverage-plan-dir <dir> is accepted with --report-only or
package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report generation reads
only coverage_plan.tsv and coverage_plan_summary.json from that directory.
A missing or empty directory omits ## Coverage Action Plan Audit. Partial or
malformed input keeps report generation successful and shows a compact
warning. Valid summary counts show record_count, downloads_triggered,
providers_contacted, manifest_mutated, audit_only, and
strict_scientific_deliverable, plus up to five nonzero coverage action
counts, provider-key counts, provider automation-level counts, and operator
route counts. Row-level species, action labels, required input, commands, or
source details are not displayed. Report inclusion does not contact providers,
trigger downloads, mutate manifests, create workflow outputs, or create strict
scientific deliverables.
For package-results --include reports or --include all, each validated
member is copied under coverage_plan/. Each copied member gets one row in
package artifact_scope.tsv (and reports/artifact_scope.tsv) with
scope=audit, evidence_policy=coverage_plan_audit,
strict_scientific_deliverable=false,
recommended_use=AI/operator coverage action planning,
not_for=provider contact or strict deliverable gating, and
source_artifact=coverage_plan_builder. Missing input is omitted. Partial or
malformed input copies only valid members and adds a compact warning to the
README, handoff index, and compact JSON envelope. When summary data is valid,
the package README and handoff index include compact provider automation-level
and operator-route counts for AI/operator triage. Failed-handoff packages
exclude these artifacts and rows.
--provider-handoff-dir <dir> is accepted with --report-only or
package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report generation reads
only provider_handoff.tsv and provider_handoff_summary.json from that
directory. A missing or empty directory omits ## Provider Handoff Audit.
Partial or malformed input keeps report generation successful and shows a
compact warning. Valid summary counts show record_count,
downloads_triggered, providers_contacted, network_access,
manifest_mutated, audit_only, and strict_scientific_deliverable, plus up
to five nonzero provider-key, provider-status, provider automation-level, and
source-action counts. Row-level species, provider names, required input,
command text, terms details, credential details, or source details are not
displayed. Report inclusion does not contact providers, authenticate, accept
terms, trigger downloads, mutate manifests, create workflow outputs, or create
strict scientific deliverables.
For package-results --include reports or --include all, each validated
member is copied under provider_handoff/. Each copied member gets one row in
package artifact_scope.tsv (and reports/artifact_scope.tsv) with
scope=audit, evidence_policy=provider_handoff_audit,
strict_scientific_deliverable=false,
recommended_use=AI/operator provider handoff planning,
not_for=provider contact or strict deliverable gating, and
source_artifact=provider_handoff_builder. Missing input is omitted. Partial
or malformed input copies only valid members and adds a compact warning to the
README, handoff index, and compact JSON envelope. Failed-handoff packages
exclude these artifacts and rows. When present, README and handoff-index text
include compact provider automation-level counts so AI/operator review can see
planning-handoff versus metadata-review pressure without opening the summary
JSON.
--provider-request-dir <dir> is accepted with --report-only or
package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report generation reads
only provider_request.tsv and provider_request_draft_summary.json from
that directory. A missing or empty directory omits
## Provider Request Draft Audit. Partial or malformed input keeps report
generation successful and shows a compact warning. Valid summary counts show
record_count, downloads_triggered, providers_contacted,
network_access, manifest_mutated, writes_workflow_outputs,
audit_only, and strict_scientific_deliverable, plus up to five nonzero
provider-key, provider-status, and provider automation-level counts. Row-level
species, provider names, notes, curator fields, provider record fields, local
FASTA paths, hashes, and license details are not displayed. Report inclusion
does not contact providers, authenticate, accept terms, trigger downloads,
mutate manifests, create workflow outputs, or create strict scientific
deliverables.
For package-results --include reports or --include all, each validated
member is copied under provider_request/. Each copied member gets one row in
package artifact_scope.tsv (and reports/artifact_scope.tsv) with
scope=audit, evidence_policy=provider_request_audit,
strict_scientific_deliverable=false,
recommended_use=curator provider request review,
not_for=provider contact, downloads, or strict deliverable gating, and
source_artifact=provider_request_draft. Missing input is omitted. Partial
or malformed input copies only valid members and adds a compact warning to the
README, handoff index, and compact JSON envelope. Failed-handoff packages
exclude these artifacts and rows. When present, README and handoff-index text
include compact provider automation-level counts from the draft summary.
--provider-request-validation-dir <dir> is accepted with --report-only or
package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report generation reads
only provider_request_validation_summary.json and
provider_request_validation_diagnostics.tsv from that directory. A missing
or empty directory omits ## Provider Request Validation Audit. Partial or
malformed input keeps report generation successful and shows a compact
warning. Valid summary counts show record_count, ready_count,
blocked_count, diagnostic_count, local_fasta_checked_count,
local_sha256_matched_count, downloads_triggered, providers_contacted,
network_access, manifest_mutated, writes_workflow_outputs,
audit_only, and strict_scientific_deliverable, plus up to five nonzero
readiness-status, blocker, and diagnostic-code counts. Row-level local FASTA
paths, hashes, notes, curator fields, provider record fields, and sequence
contents are not displayed. Report inclusion does not contact providers,
accept terms, trigger downloads, copy FASTA files, register external genomes,
mutate manifests, create workflow outputs, or create strict scientific
deliverables.
For package-results --include reports or --include all, each validated
member is copied under provider_request_validation/. Each copied member gets
one row in package artifact_scope.tsv (and reports/artifact_scope.tsv)
with scope=audit,
evidence_policy=provider_request_validation_audit,
strict_scientific_deliverable=false,
recommended_use=local provider request readiness review,
not_for=provider contact, downloads, registration, or strict deliverable gating, and source_artifact=provider_request_validator. Missing input is
omitted. Partial or malformed input copies only valid members and adds a
compact warning to the README, handoff index, and compact JSON envelope.
Failed-handoff packages exclude these artifacts and rows.
--provider-request-external-genomes-dir <dir> is accepted with
--report-only or package-results. It is an explicit read-only input and is
never automatically discovered under the workflow outdir. Report generation
reads only external_genomes.tsv and
provider_request_external_genomes_summary.json from that directory. A missing
or empty directory omits ## Provider Request External Genomes Draft Audit.
Partial or malformed input keeps report generation successful and shows a
compact warning. Valid summary counts show record_count, exported_count,
diagnostic_count, downloads_triggered, providers_contacted,
network_access, manifest_mutated, writes_workflow_outputs,
external_genomes_registration_applied, audit_only, and
strict_scientific_deliverable, plus up to five nonzero provider and
diagnostic-code counts. Row-level species, local FASTA paths, hashes, provider
record URLs, notes, curator values, and sequence contents are not displayed.
Report inclusion does not contact providers, trigger downloads, copy FASTA
files, register external genomes, mutate manifests, create workflow outputs,
or create strict scientific deliverables.
For package-results --include reports or --include all, each validated
member is copied under provider_request_external_genomes/. Each copied
member gets one row in package artifact_scope.tsv (and
reports/artifact_scope.tsv) with scope=audit,
evidence_policy=provider_request_external_genomes_audit,
strict_scientific_deliverable=false,
recommended_use=external genome handoff review,
not_for=provider contact, downloads, registration, or strict deliverable gating, and source_artifact=provider_request_external_genomes_draft.
Missing input is omitted. Partial or malformed input copies only valid members
and adds a compact warning to the README, handoff index, and compact JSON
envelope. Failed-handoff packages exclude these artifacts and rows.
For explicit --external-genomes-install-plan-dir <dir> inputs or
coverage-pipeline build outputs containing external_genomes_install_plan/,
package-results --include reports and --include all may copy
external_genome_registration_results.tsv, external_genome_install_plan.tsv,
and external_genome_install_plan_summary.json under
external_genomes_install_plan/. Each copied member receives one audit-only
artifact-scope row with scope=audit,
evidence_policy=external_genomes_install_plan_audit,
strict_scientific_deliverable=false, and
recommended_use=external genome install planning review. Package inclusion
does not create the target run directory, copy FASTA files, register external
genomes, mutate the manifest, contact providers, trigger downloads, or grant
completion credit.
--archive-candidates-dir <dir> is accepted with --report-only or
package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report generation reads
only archive_candidates.tsv, archive_candidates_summary.json, and
archive_candidates_diagnostics.tsv from that directory. A missing or empty
directory omits ## Archive Candidates Audit. Partial or malformed input keeps
report generation successful and shows a compact warning. Valid summary counts
show record_count, species_count, candidate_count, conflict_count,
manual_review_count, diagnostic_count, downloads_triggered,
providers_contacted, manifest_mutated, audit_only, and
strict_scientific_deliverable, plus up to five nonzero candidate-status and
diagnostic-code counts. Row-level accessions, source URLs, evidence notes, and
strain details are not displayed. Report inclusion does not query GenBank,
RefSeq, ENA, DDBJ, or provider archives, trigger downloads, create
external_genomes.tsv, mutate manifests, contact providers, or create strict
scientific deliverables.
For package-results --include reports or --include all, each validated
member is copied under archive_candidates/. Each copied member gets one row
in package artifact_scope.tsv (and reports/artifact_scope.tsv) with
scope=audit, evidence_policy=archive_candidates_audit,
strict_scientific_deliverable=false,
recommended_use=public archive linkage review,
not_for=archive querying, downloads, external genome registration, or strict deliverable gating, and source_artifact=archive_candidates. Missing input
is omitted. Partial or malformed input copies only valid members and adds a
compact warning to the README, handoff index, and compact JSON envelope.
Failed-handoff packages exclude these artifacts and rows.
--coverage-pipeline-dir <dir> is accepted with --report-only or
package-results. It is an explicit read-only handoff for the isolated output
of coverage-pipeline build and is never automatically discovered under the
workflow outdir. TypeTreeFlow derives only acquisition_worklist/,
coverage_plan/, coverage_next/, provider_handoff/, provider_request/,
provider_request_validation/, provider_request_external_genomes/,
external_genomes_install_plan/, archive_candidates/,
manual_review_import/, strict_gating/, and
download_smoke_quality_review/ under that directory when present, then
applies the same report, package, warning, and audit-only artifact-scope
contracts as the individual component directory options. Explicit
--acquisition-worklist-dir, --coverage-plan-dir,
--provider-handoff-dir, --provider-request-dir,
--provider-request-validation-dir,
--provider-request-external-genomes-dir, --archive-candidates-dir,
--manual-review-import-dir, --strict-gating-dir, and
--download-smoke-quality-review-dir values take precedence over derived
subdirectories.
Normal package-results --include reports and --include all also copy a
valid coverage_next/next_input_package.json member and add one
artifact_scope.tsv row with scope=audit,
evidence_policy=coverage_next_handoff_audit,
strict_scientific_deliverable=false,
recommended_use=AI/operator next coverage handoff, and
source_artifact=coverage_pipeline_next_input_handoff. Missing or invalid
coverage-next input is omitted. Package inclusion does not dispatch the next
command, contact providers, trigger downloads, mutate manifests, or promote
strict deliverables.
The option does not rerun coverage planning, contact providers, trigger
downloads, mutate manifests, create workflow outputs, or create strict
scientific deliverables.
--server-validation-result <json> is accepted with package-results. It is
an explicit read-only handoff for a single
coverage_handoff_server_validation_result.v1 JSON generated after an
authorized bounded server validation. Missing, malformed, or wrong-schema input
is omitted with a compact package warning. Valid input is copied under
server_validation/coverage_handoff_server_validation_result.json; package
artifact_scope.tsv and reports/artifact_scope.tsv get one row with
scope=audit, evidence_policy=server_validation_audit,
strict_scientific_deliverable=false,
recommended_use=bounded server validation evidence review, and
source_artifact=coverage_handoff_server_validation_result. Package inclusion
does not execute target commands, contact providers, trigger downloads,
register external genomes, mutate manifests, or promote strict deliverables.
When the JSON carries optional download_smoke_inspection_ observation fields,
README and handoff text summarize only controlled counts, high-quality
assembly-metadata FASTA blocker summaries, safe high-quality blocked preview
rows, quality-gate hits, and bounded smoke next-action labels/reasons. Preview
rows are limited to record IDs, accessions, assembly metadata, row status, and
controlled blocker codes; they do not copy raw FASTA headers, sequence text,
local command paths, ZIP paths, or ZIP contents.
Failed-handoff packages exclude this artifact.
--download-smoke-execution-dir <dir> is accepted with --report-only
or package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report and normal-package
generation recognize only bounded_download_smoke_execution.tsv and
bounded_download_smoke_execution_summary.json; it does not run datasets,
inspect ZIP/FASTA payloads, contact providers, mutate manifests, or create
strict deliverables. If the directory is missing, empty, or contains neither
member, ## Bounded Download Smoke Execution is omitted. A partial or malformed
pair produces a compact warning without failing report or package generation.
For package-results --include reports or --include all, each independently
validated member is copied under download_smoke/. Each copied member gets one
row in package artifact_scope.tsv and reports/artifact_scope.tsv with
scope=audit, evidence_policy=download_smoke_execution_audit,
strict_scientific_deliverable=false,
recommended_use=bounded download execution review,
not_for=final genome acceptance or strict deliverable gating, and
source_artifact=download_smoke_execute. Missing input is omitted. Partial or
malformed input copies only valid members and adds a compact warning to the
README, handoff index, and compact JSON envelope. Failed-handoff packages
exclude these artifacts. Inclusion means bounded execution audit availability
only: datasets_zip_ready_for_inspection means a ZIP is ready for
download-smoke inspect, not final genome acceptance, manifest mutation, or
strict deliverable promotion.
--download-smoke-quality-review-dir <dir> is accepted with --report-only
or package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report and normal-package
generation recognize only download_smoke_quality_review.tsv,
download_smoke_quality_review_summary.json, and
download_smoke_quality_review_diagnostics.tsv; it does not run
coverage-pipeline server-validation-result quality-review or inspect FASTA
payloads. If the directory is missing, empty, or contains none of those
members, ## Bounded Download Smoke Quality Review is omitted. A partial or
malformed triplet produces a compact warning without failing report or package
generation.
For package-results --include reports or --include all, each independently
validated member is copied under download_smoke/. Each copied member gets one
row in package artifact_scope.tsv and reports/artifact_scope.tsv with
scope=audit, evidence_policy=download_smoke_quality_review_audit,
strict_scientific_deliverable=false,
recommended_use=bounded download smoke quality review,
not_for=final genome acceptance, unattended download authorization, or strict deliverable gating, and source_artifact=download_smoke_quality_review.
Missing input is omitted. Partial or malformed input copies only valid members
and adds a compact warning to the README, handoff index, and compact JSON
envelope. Failed-handoff packages exclude these artifacts. Inclusion means
bounded-smoke quality-review availability only: bounded_smoke_quality_accepted
does not accept genomes for final use, install FASTA files, mutate manifests,
change completion metrics, authorize downloads, or promote strict deliverables.
--offline-readiness-dir <dir> is accepted with --report-only. It is an
explicit read-only input and is never automatically discovered under the
workflow outdir. The same option is accepted with package-results. Report
generation reads only offline_readiness_summary.json and
offline_readiness_diagnostics.tsv from that directory. A missing or empty
directory omits ## Offline Readiness Audit. Partial or malformed input keeps
report generation successful and shows a compact warning. Valid summary counts
show offline_readiness_status, valid, diagnostic_count,
denominator_families_preserved, audit_only, authorization_granted,
real_curator_data_evaluated, strict_deliverable_written, and
strict_upgrade_applied, plus component statuses and at most five diagnostic
code counts. Input paths, raw component JSON, diagnostic messages, reviewer
details, and private curator content are not displayed. Report inclusion does
not grant authorization, evaluate real curator data, write workflow outputs,
contact providers, trigger downloads, or create strict deliverables.
For package-results --include reports or --include all, each validated
member is copied under offline_readiness/. Each copied member gets one row
in package artifact_scope.tsv (and reports/artifact_scope.tsv) with
scope=audit, evidence_policy=offline_readiness_audit,
strict_scientific_deliverable=false,
recommended_use=offline readiness review,
not_for=authorization or strict deliverable gating, and
source_artifact=readiness_evaluator. Missing input is omitted. Partial or
malformed input copies only valid members and adds a compact warning to the
README, handoff index, and compact JSON envelope. Failed-handoff packages
exclude these artifacts and rows.
--strict-gating-dir <dir> is accepted with --report-only or
package-results. It is an explicit read-only input and is never
automatically discovered under the workflow outdir. Report and normal-package
generation recognize only
strict_gating_summary.json, strict_gating_audit.tsv, and
strict_gating_diagnostics.tsv; it does not recurse or invoke
strict-gating evaluate. If the directory is missing, empty, or contains none
of those members, ## Strict Gating Audit is omitted. A partial or malformed
triplet produces a compact bounded warning without failing the report.
For package-results --include reports or --include all, each independently
validated member is copied under strict_gating/. Each copied member gets one
row in package artifact_scope.tsv (and reports/artifact_scope.tsv) with
scope=audit, evidence_policy=strict_gating_audit,
strict_scientific_deliverable=false,
recommended_use=guarded strict-gating review,
not_for=strict deliverable materialization, and
source_artifact=strict_gating_evaluator. Missing input is omitted. Partial
or malformed input copies only valid members and adds a compact warning to the
README, handoff index, and compact JSON envelope. Failed-handoff packages
exclude these artifacts and rows.
A valid summary displays record_count, strict_gate_passed_count,
blocked_count, diagnostic_count, strict_deliverable_written,
strict_upgrade_applied, and audit_only, plus at most five
blocker/diagnostic code counts. strict_gate_passed=true means only that the
offline evaluator guards passed; it is not a strict deliverable upgrade.
strict_deliverable_written=false and strict_upgrade_applied=false remain
independent invariants. Report inclusion does not change manifest, selection,
reconciler outputs or tier, completion, evidence-policy
gating, provider/download behavior, or genome workflow outputs. Primary stdout
retains the existing compact JSON contract.
The primary audit output path is
evidence/reconciler_audit.tsv. Its row grain is one selected-genome row per
expected species, or the sole unselected local candidate when that is the only
available candidate for a species. The latter is audit-only candidate/conflict
evidence and does not select or download the accession. When no unambiguous
candidate exists, the mapper may write a synthetic gap row with blank genome
fields and source_input_status=no_selected_genome. The stable field order is:
schema_version, species_name, assembly_accession,
strain_designation, biosample_accession, selection_policy,
selection_evidence_level, manifest_evidence_level,
manifest_type_confirmation_status, reconciled_evidence_tier,
strict_usable, requires_manual_review, strict_upgrade_basis,
authority_sources, matched_lpsn_type_tokens,
matched_bacdive_accessions, matched_biosample_accessions,
selected_genome_linkage, conflict_status, reconciliation_notes,
source_input_status, bacdive_row_count, and diagnostic_codes.
List-valued TSV fields use a stable semicolon-space delimiter.
Sole-unselected fallback rows include
source_input_status=unselected_candidate_audit_only and the same diagnostic
code. Their manifest evidence fields remain blank; the accession is present
only for audit classification and is not selected, accepted, or downloaded.
The summary output path is
evidence/reconciler_summary.json. Its JSON contract includes
schema_version, audit_only=true, generated_at, record_count,
strict_count, candidate_count, conflict_count, gap_count,
manual_review_count, diagnostic_count, and tier_counts.
The diagnostics output path is
evidence/reconciler_diagnostics.tsv. Its field order is:
schema_version, species_name, assembly_accession, source, status,
severity, diagnostic_code, message, source_input_status, and notes.
Diagnostics cover missing optional BacDive input, missing optional BioSample
input, legacy manifest rows missing newer optional fields, malformed optional
BacDive or BioSample rows, no selected genome gap rows, conflicts detected by
the reconciler, and the audit-only status. Diagnostics are review evidence;
they do not create workflow failures or completion changes by themselves.
typetreeflow commands catalog, typetreeflow commands recognize,
typetreeflow commands render, typetreeflow commands plan, and
typetreeflow commands preflight expose side-effect-free CLI command metadata
for AI operators:
typetreeflow commands catalog [--json]
typetreeflow commands recognize --argv-json '["verify-genus","Fusobacterium","--report-only"]'
typetreeflow commands recognize -- doctor --json
typetreeflow commands render --request-json '{"command":"status","outdir":"run"}'
typetreeflow commands render --request-file <saved-summary-or-packet.json>
typetreeflow commands render --request-file <summary.json> --request-field install_plan_recommended_request
typetreeflow commands plan --request-json '{"command":"status","outdir":"run"}'
typetreeflow commands plan --request-file <saved-summary-or-packet.json>
typetreeflow commands plan --request-file <summary.json> --request-field result_validation_recommended_request
typetreeflow commands preflight --argv-json '["verify-genus","Fusobacterium","--outdir","run"]'
typetreeflow providers catalog [--json]
typetreeflow provider-handoff build --coverage-plan-tsv <coverage_plan.tsv> [--json]
All command metadata commands always emit exactly one compact JSON object to
stdout; --json is an accepted no-op. Metadata commands return exit code 0
for successful allow/pass output and exit code 2 for usage, request/argv
shape, or blocked preflight results. They do not write files, load workflow
configuration, read
environment files, contact providers, run downloads, or invoke external tools.
commands catalog returns catalog, a static list of command entries with
command, subcommand, mode, argv_pattern, json_stdout,
write_behavior, requires_outdir, boundary, parameters, and
output_contracts, output_contract_names, output_contract_count,
output_contract_summary_fields, and
output_contract_summary_field_count.
Each parameters item has name, kind, required, repeatable, and
purpose fields so AI operators can construct candidate argv lists before
passing them through commands preflight. Each output_contracts item names a
stable top-level JSON field, schema version, and purpose for command outputs
that include AI/operator handoff packets. Some contracts also list
summary_fields when a compact summary has stable AI-routing fields; for
example acquisition_worklist_packet.v1 lists record, lane, review-signal,
candidate provider-key counts, output paths, and recommended coverage-plan
request metadata, while coverage_plan_packet.v1 lists provider route count
fields such as operator_route_counts, provider_route_groups, and
priority_provider_route_items.
Provider-handoff, provider-request, and
external-genomes readiness contracts use the same pattern for route counts,
readiness counts, required inputs, and recommended next requests when those
fields are stable. providers catalog also exposes
coverage_priority_groups, a stable route summary for public archive metadata
review, BacDive/DSMZ type-material metadata review, culture-collection provider
handoff, and credential-gated provider handoff. This summary is coverage
planning metadata only; it does not contact providers, download genomes, mutate
manifests, or make provider rows strict. The server-validation result validator
contract lists local validation status, result status, checked-surface count,
boundary confirmation status, diagnostic count, and no-execution boundary flags
as stable routing fields. Other contracts describe AI/operator
handoff packets such as
provider_request_readiness_packet, external_genomes_readiness_packet, and
operator_chain_readiness_packets.
commands recognize, commands render, commands plan, and
commands preflight also echo the recognized target command's
output_contracts, output_contract_names, output_contract_count,
output_contract_summary_fields, and
output_contract_summary_field_count at the top level; unknown or invalid
target commands return an empty contract list, zero counts, and no summary
fields. The summary fields are metadata only and do not authorize writes,
workflow mutation, network access, downloads, or external tools.
The same JSON envelope also includes early_dispatch_order, the ordered list
of isolated top-level commands that typetreeflow.cli.main checks before
loading the full workflow parser. This is metadata only; it does not make the
catalog a dispatch authority.
providers catalog is a related isolated metadata command. It emits provider
keys, names, common aliases, capability statuses, allowed modes, and
fail-closed network/download fields as one compact JSON object. It also emits
top-level provider status counts, automation_level_counts,
operator_route_counts, provider_route_groups, allowed-mode counts, and
provider-key lists for planning-only, metadata-only, planning-handoff,
metadata-review, download-enabled, network-supported, credential-gated,
terms-review-gated, default-network-enabled, and adapter-present entries so AI
operators can route provider handoffs without scanning every row.
provider_route_groups aggregates provider keys and counts by
operator_route, including status, automation-level, next-input, and boundary
counts. Per-provider automation_level is AI planning metadata:
planning_handoff means user-assisted or curator-assisted handoff only,
metadata_review means public archive metadata review only, and
download_enabled is reserved for future gated adapters. It also emits
per-provider operator_route, next_input_class, and automation_boundary
fields aligned with coverage-pipeline queue metadata.
guidance_notes derived from the static registry adapter; those notes
are offline planning hints, not provider authorization or executable download
instructions. It does not contact providers, read credentials, write outputs,
or enable provider download behavior.
Provider-key extraction recognizes canonical keys, common abbreviations, and
controlled long aliases such as full culture-collection names when routing
free-text evidence into coverage/provider handoff. Alias recognition is only a
handoff signal; it does not create strict evidence, provider authorization, or
download permission.
commands recognize and commands preflight require --argv-json as a JSON
string array or target argv tokens after --. Their JSON envelopes include
target_argv and recognized. The recognized object comes from
typetreeflow.cli_recognizer.recognize_cli_command() and contains conservative
helper metadata: command, subcommand, mode, is_report_only,
is_manual_review, is_strict_gating, is_readiness,
is_acquisition_worklist, is_coverage_pipeline, is_count_crosswalk,
is_archive_candidates, is_coverage_plan, is_provider_handoff,
is_provider_request,
is_provider_registration_plan, is_external_genome_registration,
is_providers, is_curator_packet,
writes_outputs_declared, requires_outdir, unknown, and invalid.
commands render requires exactly one of --request-json or --request-file.
The request must be a JSON object. --request-file reads a local saved summary
or handoff packet and is intended for file-based AI controllers that should not
copy a recommended_request through shell quoting. It accepts a conservative,
command-specific request such as {"command":"status","outdir":"run"} and
returns normalized target_argv plus recognized metadata. Optional
--request-field <field> selects one top-level JSON object field from the input
before rendering, for saved summaries that expose additional requests such as
install_plan_recommended_request or
result_validation_recommended_request. Unsupported commands, missing required
fields, unknown request fields, unreadable request files, missing selected
request fields, non-object JSON, or wrong value types fail with exit code 2.
Rendering is a string-planning step only; the returned argv must still be
checked with commands preflight before any executor considers running it.
For AI/operator handoffs, commands render and commands plan also accept a
metadata packet whose top-level recommended_request is a structured command
request, including saved summary files and coverage_next_task_packet. The
original packet remains in request, the unwrapped command request appears in
effective_request, request_unwrapped_from is recommended_request, and
request_source records request_json or the supplied request-file path. When
--request-field is used, request_field and request_unwrapped_from both
record the selected top-level field name.
Packets without a structured recommended_request still fail closed as invalid
requests.
For coverage planning requests, structured fields
expanded_discovery_results_tsv and manual_supplement_hints_tsv render to
the explicit local TSV flags on acquisition-worklist build and
coverage-pipeline preview|build. validate_provider_request and
provider_request_validation_base_dir render only for
coverage-pipeline build and enable the optional local provider-request
validation stage without provider contact or downloads.
curated_provider_request_tsv renders to --curated-provider-request-tsv and
is treated as an explicit curator-completed local handoff, not as provider
output discovered by the pipeline. external_genomes_install_target_outdir
renders to --external-genomes-install-target-outdir for
coverage-pipeline build; commands plan treats this as an isolated-output
write when write=true, not as workflow-output mutation, network access,
provider contact, download execution, or external-tool execution.
For packaging requests, structured fields delivery_dir, failed_handoff,
manual_review_import_dir, acquisition_worklist_dir, coverage_plan_dir,
provider_handoff_dir, provider_request_dir,
provider_request_validation_dir, provider_request_external_genomes_dir,
external_genomes_install_plan_dir, coverage_pipeline_dir,
offline_readiness_dir, and strict_gating_dir render to their explicit
package-results flags. These fields only plan a packaging command over
explicit local audit inputs; they do not discover workflow outputs, contact
providers, trigger downloads, or authorize strict deliverable promotion.
The same audit directory fields, except delivery_dir and failed_handoff,
also render to explicit verify-genus --report-only flags so AI callers can
refresh reports from bounded local audit handoff directories without rerunning
workflow stages.
For local verify-genus planning, structured fields species_checklist,
lpsn_child_taxa, lpsn_cache, gtdb_metadata, gtdb_release,
evidence_policy, source_audit_policy, strains_per_species,
limit_selected, and allow_genus_change render to their explicit CLI flags.
These fields are local/configuration inputs only; rendering them does not enable
live LPSN, NCBI, Entrez, provider, download, or external-tool actions.
Additional local steering fields candidate_tsv, selection_tsv,
selection_policy, prepare_selection, write_manual_review_template,
review_required, auto_accept_selection, query_genomes, query_16s,
outgroup, skip_ani, and skip_tree render to their matching
verify-genus flags. query_genomes is an array and renders one
--query-genome flag per path.
Offline coverage-audit fields audit_culture_collections,
write_completion_audit, discover_assembly_candidates, discovery_cache,
enable_synonym_discovery, enrich_biosample, and biosample_cache also
render to verify-genus flags. They are intended for local/cache-backed audit
planning; live NCBI/Entrez access remains gated by separate explicit enable
flags and is not implied by these structured fields.
commands plan also requires exactly one of --request-json or
--request-file, renders the request to target_argv, and immediately applies
the same advisory preflight gate. Its JSON envelope includes decision,
recognized, preflight, target_risk, target_allowances,
target_*_declared booleans, blocking, and warnings. The plan command
itself is always dry-run and no-write; use the target_* fields to judge the
rendered command's output, workflow, network, real-action, and external-tool
risk. It returns exit code 0 when the rendered argv is allowed and exit code
2 when rendering fails or preflight blocks. A successful plan is still
metadata only; it is not execution authorization.
commands preflight adds an advisory decision of allow or block,
allowances, risk, blocking, and warnings. Declared output writes
require --allow-write; workflow-output mutation additionally requires
--allow-workflow-outputs. Non-dry-run --register-external-genomes is
classified as workflow-output mutation because it can write manifest/name-map
state; the same command with --dry-run still requires --allow-write for
its local result/plan files but does not require --allow-workflow-outputs.
Non-dry-run real-action flags require --allow-real-actions;
network/download/provider flags require --allow-network; external-tool flags
require --allow-external-tools.
Real-action flags under --dry-run produce a warning rather than a block. The
preflight decision is a conservative local planning aid and is not execution
authorization. The catalog, recognizer, and preflight gate are not dispatch
authority; argparse and the existing command dispatch order remain
authoritative.
typetreeflow.evidence.curator_packet provides a preflight for small,
pre-redacted curator-readiness packets. It checks a repo-external packet
directory for the required custody manifest, approval records, redaction
attestation, manual-review TSV, and frozen reconciler audit; it verifies
SHA-256/byte-length bindings, bounded row counts, exact schemas, and forbidden
payload markers. Forbidden path-part checks apply to packet-relative member
paths, not to the repo-external packet directory's parent names. Nested paths,
symlinks or reparse members, escapes, and unexpected members remain blocking.
The result is JSON-serializable and redaction-safe: it reports
member names, counts, digests, and issue codes, but does not echo curator rows,
reviewer IDs, notes, evidence summaries, or workflow outputs.
The isolated CLI adapter is:
typetreeflow curator-packet preflight --packet-dir <packet-dir> \
--repo-root <repo-root> [--expected-genus <genus>] \
[--min-rows <n>] [--max-rows <n>] [--json] \
[--write --outdir <isolated-directory> [--force]]
Stdout is always a single compact JSON object. Valid packet metadata returns
exit code 0; invalid usage, unavailable input, schema, custody, approval,
redaction, row-bound, forbidden-payload, or safety issues return 2;
unexpected internal or write failures return 1. Optional write mode
atomically publishes curator_packet_preflight_summary.json and
curator_packet_preflight_issues.tsv under the requested isolated directory.
It records real_curator_data_evaluated=false,
writes_workflow_outputs=false, downloads_triggered=0,
providers_contacted=0, and manifest_mutated=false.
typetreeflow.evidence.manual_review reads curator-supplied TSV decisions and
performs pure offline, dry-run validation. It is not connected to
verify-genus, the reconciler writer, selection, manifests, reports,
completion metrics, downloads, providers, packages, or evidence-policy gates.
It returns a JSON-serializable ManualReviewValidationResult; validation
issues can also be rendered as TSV text with
manual_review_validation_tsv(). The renderer returns text and does not choose
or write an output path.
The no-write-by-default CLI adapter is:
typetreeflow manual-review validate --input <review.tsv> [--json] [--out <issues.tsv>] [--force]
It always emits exactly one compact JSON object to stdout; --json is an
accepted no-op. Without --out, no file is written. With --out, validation
always writes an issues TSV: header-only for valid input and the full issue set
for invalid input. The parent must already exist, the suffix must be .tsv,
and the target cannot be the input, a symlink path, or a protected workflow
artifact name. Existing targets are refused by default. --force is accepted
only with --out and replaces only a regular, non-symlink file whose header
exactly matches the issues schema.
Exit code 0 reports valid input and any requested write success. Exit code
2 reports command usage, unreadable input, schema, or row-validation issues;
invalid content remains exit 2 after its issues TSV is successfully written.
Exit code 1 reports an output-path, overwrite, write, or unexpected internal
failure. The envelope includes status, command, input, record_count,
valid_count, issue_count, strict_candidate_count,
blocked_strict_count, a bounded issues_preview, dry_run=true,
writes_outputs, writes_workflow_outputs=false, issues_output_path,
issues_output_written, and strict_upgrade_applied=false.
writes_outputs=true means only that the explicitly requested issues TSV was
written; it never means workflow output mutation.
The issues TSV schema has the fixed order row_number, severity, code,
field, status, species, selected_accession, message, and
recommended_action. Current findings use severity=error and
status=validation_failed; recommended_action is a controlled mapping from
the issue code. The writer uses UTF-8, tab delimiters, CSV quoting, a trailing
newline, and an adjacent atomic replacement. It does not create missing parent
directories. Unknown raw status values, evidence text, reviewer identifiers,
notes, provider payloads, credentials, and exception details are not emitted.
The required TSV columns, in stable order, are species,
selected_accession, review_status, reviewer_id, review_date,
evidence_summary, evidence_source_ids, conflict_resolution,
second_reviewer_id, and decision_notes. The column must exist even when a
status permits a blank value. selected_accession may be blank only for
gap_no_public_strict_genome; second_reviewer_id may be blank except for
curated_strict_confirmed. review_date is an ISO 8601 calendar date.
The controlled statuses are curated_strict_confirmed,
candidate_needs_more_evidence, conflict_blocked,
gap_no_public_strict_genome, and exclude_non_type. A curated-strict
decision is valid only when its evidence summary explicitly contains the exact
selected accession and a direct type-strain linkage, all conflicts are marked
resolved or absent, and a different second reviewer is recorded. Optional
input claim columns strict_usable, strict_confirmed, and
strict_scientific_deliverable, when present, are guard inputs only:
truthy claims are rejected for every candidate, conflict, gap, or exclusion
status.
dry_run=true means only that the decision TSV passed or failed schema and
policy validation. A valid curated_strict_confirmed row remains a curator
decision awaiting a separately authorized implementation/import; this module
does not upgrade manifest, reconciler, report, or package strict status and
does not create a strict scientific deliverable.
typetreeflow.evidence.manual_review_import is a library-only, pure offline
mapper. It accepts manual-review TSV rows plus rows from the exact frozen
reconciler_audit.tsv used for review. It performs deterministic linkage on
the exact, trimmed species/species_name and
selected_accession/assembly_accession pair. Reconciler tier and conflict
status are linkage guards, never fuzzy-match inputs. No synonym inference,
accession version removal, case substitution, or provider lookup occurs.
import_manual_review_rows() and import_manual_review_tsv() return a
ManualReviewImportResult containing decision rows, diagnostics, and a
summary. The serializers return text and never select or write paths:
manual_review_decisions_tsv(), manual_review_summary_json(), and
manual_review_diagnostics_tsv(). The corresponding handoff names are
manual_review_decisions.tsv, manual_review_summary.json, and
manual_review_diagnostics.tsv; they are not workflow-owned or automatically
discovered outputs.
The offline CLI adapter is:
typetreeflow manual-review import --input <review.tsv> --reconciler-audit <reconciler_audit.tsv> [--json] [--write --outdir <isolated-directory> [--force]]
Stdout is always exactly one compact JSON object; --json is an accepted
no-op. Without --write, dry_run=true, writes_outputs=false, all
output_paths values are null, and no file or directory is created.
--write requires --outdir, while --outdir without --write and
--force without write mode are usage errors. A successful write publishes
the three handoff files directly under the output directory as one staged
directory transaction and reports dry_run=false, writes_outputs=true,
writes_workflow_outputs=false, and their paths. No evidence/ child is
created.
An existing destination is refused by default. With --force, it must be a
real, non-symlink directory containing exactly the three regular artifacts;
both TSV headers and the summary schema version must match. Input-containing,
symlinked, repository-root, and protected workflow-shaped destinations are
refused. Expected validation, linkage, duplicate, or conflict diagnostics
return exit code 2; an explicitly requested write still publishes the
complete diagnostic audit triplet. Usage, input, and safety failures also
return 2; unexpected serialization, staging, fsync, rename, or write
failures return 1; clean dry-run and write operations return 0.
The CLI envelope contains schema_version, status, command,
record_count, accepted_decision_count, diagnostic_count,
strict_upgrade_candidate_count, strict_upgrade_applied=false,
audit_only=true, dry_run, writes_outputs,
writes_workflow_outputs=false, output_paths, a bounded
diagnostics_preview, diagnostics_truncated, and a short summary.
strict_upgrade_candidate=true remains an audit-only flag and never means a
strict upgrade was applied.
The stable decision TSV field order is: species, selected_accession,
review_status, reviewer_id, review_date, evidence_summary,
evidence_source_ids, conflict_resolution, second_reviewer_id,
decision_notes, decision_status, reconciler_tier,
reconciler_conflict_status, linkage_status, import_status,
strict_upgrade_candidate, strict_upgrade_applied, and
diagnostic_codes. Original review fields are retained; decision_status is
the normalized validated status. Boolean TSV values are lowercase.
The summary JSON contains record_count, accepted_decision_count,
diagnostic_count, strict_upgrade_candidate_count,
strict_upgrade_applied=false, audit_only=true, and schema_version.
CLI write-mode summaries additionally contain input_digests, including the
SHA-256 of the exact frozen reconciler_audit.tsv; this is an immutable
handoff guard, not a workflow mutation.
Diagnostics use the stable fields schema_version, row_number, severity,
diagnostic_code, species, selected_accession, and message. They cover
missing audit linkage, species/accession mismatch, duplicate manual decisions,
duplicate audit linkage, validation-issue passthrough, strict attempts against
unresolved conflicts, and unknown or malformed audit rows.
strict_upgrade_candidate=true is possible only for a validated
curated_strict_confirmed decision with one exact clean linkage and no frozen
conflict. It is an audit handoff label. strict_upgrade_applied is always
false; the mapper does not modify the reconciler tier or any workflow
output.
The standalone offline adapter is:
typetreeflow strict-gating evaluate --manual-review-dir <dir> --reconciler-audit <tsv> [--json] [--write --outdir <dir> [--force]]
It requires the exact manual-review import triplet and an exact-header reconciler audit. The summary's recorded reconciler SHA-256 must match the supplied audit bytes. It checks canonical candidate/application flags, summary counts, duplicate keys, exact species/accession linkage, clean import status, distinct reviewers, unresolved conflicts, synthetic markers, source strength, and a structured chain comprising selected accession, BioSample, LPSN type-strain token, selected-genome linkage, and preserved source IDs. Unknown, missing, malformed, stale, ambiguous, or synthetic input fails closed. There is no test-mode exception; synthetic fixtures are blocked.
Dry-run stdout is one compact JSON object with dry_run=true,
writes_outputs=false, writes_workflow_outputs=false,
strict_gate_passed_count, audit_only=true,
strict_deliverable_written=false, and strict_upgrade_applied=false.
Write mode atomically publishes only strict_gating_audit.tsv,
strict_gating_summary.json, and strict_gating_diagnostics.tsv directly
under the dedicated outdir. --force accepts only an existing exact triplet
whose TSV headers and summary schema match. No workflow-shaped evidence/
directory is created.
Exit 0 means no blocking diagnostic and any requested audit write succeeded.
Input, validation, gating, usage, or refused-output diagnostics return 2;
blocked evaluations still write the audit triplet when explicitly requested.
Unexpected internal or write failures return 1. A passed row is only an
audit result: it never implies a strict deliverable was written or a strict
upgrade was applied.
The offline library helper project_strict_gate_state() maps existing
manual-review import and strict-gating fields into the stable six-state model:
audit-only, candidate, blocked, gate-passed,
deliverable-written, and upgrade-applied. It is an interpretation helper,
not a dispatch, evaluation, writer, or workflow authority.
Invalid flag combinations fail closed as blocked with deterministic
diagnostic codes. Existing TypeTreeFlow audit outputs should not exceed
gate-passed; deliverable-written and upgrade-applied are reserved future
states that require separate materialization and scientific-application
authorization. The companion summarize_strict_gate_states() function returns
JSON-serializable counts without reading files, writing files, or mutating any
workflow output.
The isolated CLI surface is:
typetreeflow strict-gate-state project --input-json <rows.json> [--json] \
[--write --outdir <isolated-directory> [--force]]--input-json accepts either a JSON array of row objects or an object with a
rows array. Stdout is always a single compact JSON object. Valid projection
inputs return exit code 0; invalid usage, unreadable/malformed input, and
invalid state combinations return 2; unexpected internal or write failures
return 1. Optional write mode atomically publishes
strict_gate_state_projection.tsv, strict_gate_state_summary.json, and
strict_gate_state_diagnostics.tsv directly under the requested isolated
directory. The command records writes_workflow_outputs=false,
strict_deliverable_written=false, downloads_triggered=0,
providers_contacted=0, and manifest_mutated=false.
The offline build_count_crosswalk_report() helper renders mixed-denominator
audit metrics as a stable TSV/JSON report without writing files. Each metric
has an explicit metric_family, unit, denominator_or_universe,
status_semantics, and not_equivalent_to field so species-universe,
selection-row, manifest-row, reconciler-partition, diagnostic, and download
counts are not collapsed into one coverage number.
The bundled clostridium_plan_only_crosswalk() encodes the frozen no-live
Clostridium plan-only invariants: strict_rows + candidate_rows + conflict_rows + gap_rows = checklist_species (0 + 115 + 8 + 48 = 171) and
candidate_rows + conflict_rows = manual_review_rows (115 + 8 = 123).
downloads=0 remains a plan-only execution fact, not proof that manifest,
candidate, or checklist rows are unavailable. Invalid or missing counts are
reported as deterministic issues; the helper does not read workflow outputs,
change completion metrics, or contact providers.
When the required Clostridium partition metrics are present and valid, the
summary includes clostridium_opportunity_action_summary. That packet groups
the frozen conflict, candidate, gap, and strict counts into audit-only action
classes such as conflict resolution, candidate type-linkage review, and
provider/external-FASTA gap handoff. It contains counts and recommended local
input classes only; it does not contain species rows, run commands, contact
providers, trigger downloads, mutate manifests, or grant strict deliverable
status.
The isolated CLI surface is:
typetreeflow count-crosswalk build \
(--metrics-tsv <metrics.tsv> | --clostridium-plan-only) [--json] \
[--write --outdir <isolated-directory> [--force]]Stdout is always a single compact JSON object. Valid inputs return exit code
0; invalid usage, unreadable inputs, and count-invariant diagnostics return
2; unexpected internal or write failures return 1. The optional write mode
atomically publishes count_crosswalk_metrics.tsv,
count_crosswalk_summary.json, and count_crosswalk_issues.tsv directly
under the requested isolated directory. The command records
writes_workflow_outputs=false, downloads_triggered=0,
providers_contacted=0, and manifest_mutated=false.
The offline project_offline_readiness() helper combines already constructed
curator-packet preflight, strict-gate state, and count-crosswalk summaries into
one JSON-serializable projection. It accepts in-memory objects or mappings
only and returns offline_readiness_status as ready, blocked, or
not_evaluated, with per-component status and stable diagnostic codes.
ready means only that local synthetic/offline contracts are mutually
coherent. It always preserves audit_only=true,
authorization_granted=false, real_curator_data_evaluated=false,
strict_deliverable_written=false, and strict_upgrade_applied=false.
Missing, invalid, contradictory, denominator-collapsed, nonzero-download, or
higher-than-gate-passed inputs fail closed. The helper does not read files,
write files, dispatch commands, contact providers, or mutate workflow outputs.
The isolated CLI adapter is:
typetreeflow readiness evaluate [--curator-packet-preflight-json <json>] [--strict-gate-state-json <json>] [--count-crosswalk-json <json>] [--json] [--write --outdir <dir> [--force]]
It reads only the explicitly named component JSON files and emits exactly one
compact JSON object to stdout; --json is an accepted no-op. Missing component
paths are evaluated as missing components rather than as command-usage errors.
Unreadable, symlink, malformed JSON, or non-object inputs fail closed with
component diagnostics. By default, the command reports dry_run=true,
writes_outputs=false, writes_workflow_outputs=false,
authorization_granted=false, real_curator_data_evaluated=false,
strict_deliverable_written=false, and strict_upgrade_applied=false.
With explicit --write --outdir, it atomically writes only
offline_readiness_summary.json and offline_readiness_diagnostics.tsv to
the isolated output directory, reports dry_run=false and
writes_outputs=true, and still reports writes_workflow_outputs=false.
Existing output directories are refused by default; --force replaces only an
owned readiness pair with matching schemas. Protected workflow-like output
paths are refused. Write mode does not make readiness a workflow output and
does not alter any strict deliverable boundary.
Exit code 0 means offline_readiness_status=ready; exit code 2 means
blocked or not evaluated; exit code 1 is reserved for unexpected internal
errors.
doctor checks IQ-TREE readiness by resolving iqtree2 first, then iqtree.
The iqtree2 check remains the JSON check id for compatibility, and its
message records the selected executable. If neither executable is on PATH,
the phylogeny readiness check is blocking.
doctor also checks barrnap CM/HMM database readiness. It honors explicit
database overrides such as BARRNAP_DB_DIR, accepts top-level .cm or .hmm
files, and recognizes the barrnap 1.10.5 nested DB layout with .cm files
under bac/, arc/, or fun/ such as bac/bac.rRNA.cm. Default inspected
paths include the active Python environment's db/ directory alongside the
legacy barrnap share/, lib/, and bin/db locations. Passing JSON messages
include a short layout/path summary, not a full file listing. If
barrnap is present but the DB is not found in configured or inspected local
paths, the barrnap_cm_database check is blocking and next_actions includes
barrnap --updatedb. doctor does not run that command.
Failed-handoff packages are review bundles, not raw cache exports. By default
package-results --failed-handoff excludes cache/ and raw/generated
provider intermediates, while retaining available small review artifacts such
as run state, selection, source audit, taxonomy, candidate, retry diagnostic,
report, and handoff files.
--enable-expanded-discovery writes audit tables only; it does not mutate
manifest, selection, evidence levels, or completion counts.
Use repository-independent workspaces. <workspace>/runs/ is for generated run
outputs. The repository root is source code, not an output workspace.
Repository-root results/ is not a run output directory; any repository-root
path is reported as forbidden by hygiene checks. typetreeflow_out/ is a
legacy old default path only.
Recommended layout:
<workspace>/runs/<run_id>/: run output directory.<workspace>/deliveries/<run_id>/: packaged handoff output.<workspace>/cache/: optional external cache roots when configured.
manifest.tsvname_map.tsvexternal_genome_registration_results.tsvexternal_genome_install_plan.tsvprovider/provider_registration_plan.tsvprovider/proposed_external_genomes.tsvcache/ncbi/download_plan.tsvcache/ncbi/download_results.tsvcache/ncbi/genome_registration_results.tsvcache/ncbi/extracted/<record_id>genomes/references/<normalized_id>.fnarrna/rrna_plan.tsvrrna/barrnap/<normalized_id>.gffrrna/sequences/<normalized_id>.16s.fastarrna/all_16S.fastarrna/strict_16S.fastarrna/policy_16S.fastaani/ani_plan.tsvani/references.txtani/fastani_raw.tsvani/ani_query_vs_refs.tsvani/ani_summary.tsvphylo/phylo_plan.tsvphylo/all_16S.aln.fastaphylo/all_16S.trimmed.fastaphylo/iqtree/all_16S.treefilecandidates/assembly_candidates.tsvcandidates/assembly_candidate_diagnostics.tsvcandidates/discovery_records.tsvsource_audit/sequence_source_audit.tsvsource_audit/culture_collection_audit.tsvsource_audit/completion_audit.tsvsource_audit/completion_summary.tsvcompletion/gaps.tsvcompletion/uncovered_species.tsvcompletion/16s_gaps.tsvcompletion/expanded_discovery_plan.tsvcompletion/expanded_discovery_results.tsvcompletion/expanded_discovery_history.tsvcompletion/rejected_candidates.tsvcompletion/manual_supplement_hints.tsvselection/strain_candidates.tsvselection/user_selection.tsvselection/download_preflight_summary.tsvselection/download_plan_readiness_summary.jsonmanual_deposit_evidence_template.tsvmanual_species_gap_summary.tsvmanual_review_report.mdtaxonomy/checklist_comparison.tsvtaxonomy/gtdb_metadata_audit.jsonwhen GTDB metadata audit is configuredtaxonomy/ncbi_taxonomy_plan.tsvtaxonomy/ncbi_taxonomy_cache.tsvevidence/bacdive_enrichment.tsvwhen BacDive enrichment is explicitly enabledevidence/bacdive_diagnostics.tsvwhen BacDive enrichment is explicitly enabledevidence/bacdive_source_audit.jsonwhen BacDive enrichment is explicitly enabledevidence/reconciler_audit.tsvwritten by theverify-genusstrict_reconciliationaudit-only stageevidence/reconciler_summary.jsonwritten by theverify-genusstrict_reconciliationaudit-only stageevidence/reconciler_diagnostics.tsvwritten by theverify-genusstrict_reconciliationaudit-only stagereport/summary.mdreport/run_review.mdreport/artifact_scope.tsv
-
manifest.tsv:record_id,canonical_name,display_name,genus,species,strain,taxid,family,order,assembly_accession,assembly_source,is_type_material,is_outgroup,is_query,has_genome,genome_path,has_16s,rrna_16s_path,rrna_16s_source,rrna_16s_evidence_level,rrna_16s_audit_status,rrna_16s_strict_usable,normalized_id,source,status,evidence_level,type_confirmation_status,selection_policy,selection_role,selection_reason,risk_flags,manual_review_status,notes -
name_map.tsv:record_id,normalized_id,canonical_name,display_name,assembly_accession -
species_checklist.tsv:genus,species,full_name,status,type_strain_names,type_strain,source,notes,nomenclatural_status,taxonomic_status,lpsn_record_number,lpsn_url,synonyms -
excluded_lpsn_taxa.tsv:original_name,genus,species,full_name,nomenclatural_status,taxonomic_status,type_strain_names,type_strain,lpsn_record_number,lpsn_url,source,notes,exclusion_reason -
lpsn_species_cache.tsv:genus,species,full_name,nomenclatural_status,taxonomic_status,type_strain,lpsn_record_number,lpsn_url,source,notes -
provider_request.tsv:request_id,species,strain,type_strain_id,provider,provider_name,provider_record_id,provider_record_url,provider_artifact_id,provider_artifact_version,artifact_type,local_fasta_path,local_sha256,terms_review_status,license_notes,retrieval_date,is_type_material,requires_manual_review,curator,notes -
provider_registration_plan.tsv:request_id,species,strain,type_strain_id,provider,provider_name,provider_record_id,provider_record_url,provider_artifact_id,provider_artifact_version,artifact_type,status,planned_action,network_action,download_action,credential_action,manifest_action,ncbi_download_plan_action,eligible_for_proposed_external_genomes,missing_fields,blocking_reasons,manual_review_required,terms_review_status,license_notes,proposed_external_genomes_status,notes -
provider/proposed_external_genomes.tsv:species,strain,type_strain_id,external_source,external_source_name,external_genome_id,external_source_url,genome_fasta_path,sha256,is_type_material,requires_manual_review,status,notes -
proposed_external_genomes.tsv:species,strain,type_strain_id,external_source,external_source_name,external_genome_id,external_source_url,genome_fasta_path,sha256,is_type_material,requires_manual_review,status,notes -
external_genomes.tsv:species,strain,type_strain_id,external_source,external_source_name,external_genome_id,external_source_url,genome_fasta_path,sha256,is_type_material,requires_manual_review,status,notes -
external_genome_registration_results.tsv:species,strain,type_strain_id,external_source,external_genome_id,genome_fasta_path,sha256,computed_sha256,status,valid,message,notes -
external_genome_install_plan.tsv:species,strain,type_strain_id,external_source,external_source_name,external_genome_id,external_source_url,source_genome_fasta_path,installed_genome_path,sha256,is_type_material,status,notes -
external_genome_install_results.tsv:species,strain,type_strain_id,external_source,external_source_name,external_genome_id,external_source_url,source_genome_fasta_path,installed_genome_path,sha256,is_type_material,status,notes -
taxonomy/checklist_comparison.tsv:checklist_name,gtdb_name,genus,species,status,comparison_status,gtdb_record_id,assembly_accession,normalized_id,notes,source,nomenclatural_status,taxonomic_status,type_strain,lpsn_record_number,lpsn_url -
taxonomy/gtdb_metadata_audit.json: configured-only JSON audit written when--gtdb-metadataor--gtdb-releaseis provided. It recordsmetadata_path, file status, release,load_status, timestamp, and coverage counts when local metadata loads successfully. When GTDB metadata audit is not configured, this artifact is not written and run-state/report/package output must not reportgtdb_metadata_not_loaded. For configured GTDB audit, rawgtdb_metadata_not_loadedandgtdb_metadata_load_failedstates appear as non-blockinggtdb_auditwarnings on public AI JSON surfaces. GTDB remains optional supporting audit evidence; these warnings do not alter the persisted raw state, strict or completion semantics, or execution authorization. -
taxonomy/ncbi_taxonomy_plan.tsv:species,scientific_name,query,query_reason,status,notes -
taxonomy/ncbi_taxonomy_cache.tsv:species,taxid,scientific_name,rank,synonyms,equivalent_names,includes,authority,source,notes -
evidence/bacdive_enrichment.tsv:schema_version,run_id,species,checklist_source,lpsn_type_strain_text,lpsn_type_strain_identifiers,query_index,query_kind,query,endpoint,lookup_status,bacdive_id,bacdive_species,strain_designation,culture_collection_numbers,dsmz_accession,is_type_strain,evidence_tier,reconciliation_status,overlapping_identifiers,selected_genome_linkage,strict_confirmed,source_platform,source_url,accessed_at,diagnostic_codes,notes -
evidence/bacdive_diagnostics.tsv:schema_version,run_id,query_index,species,query_kind,query,endpoint,status,severity,diagnostic_code,evidence_effect,message,http_status,retry_count,accessed_at,notes -
evidence/bacdive_source_audit.json: JSON audit written only for opt-in BacDive enrichment runs. It recordsenabled,query_mode,max_queries,timeout_seconds,client_kind,stage_status,live_api_called,generated_at, official documentation/field/terms/citation/license URLs, additivedocs_url, top-level source-access and call summary fields (accessed_at_start,accessed_at_end,endpoint_count,lookup_call_count,fetch_call_count,last_http_status,stopped_reason),planned_query_count,executed_query_count,http_call_count,http_calls,completed_query_count,skipped_query_count,result_status_counts,record_count,diagnostic_count, output paths,candidate_only,strict_confirmed=false,strict_or_completion_effect=none,raw_payload_policy=not_written,raw_payload_saved=false, and the redaction policy. Fake/no-client paths do not synthesize HTTP call counts; blocked public live paths keep zero call counts and record the blocker instopped_reason. -
evidence/reconciler_audit.tsv: audit-only output for thestrict_reconciliationstage. Field order:schema_version,species_name,assembly_accession,strain_designation,biosample_accession,selection_policy,selection_evidence_level,manifest_evidence_level,manifest_type_confirmation_status,reconciled_evidence_tier,strict_usable,requires_manual_review,strict_upgrade_basis,authority_sources,matched_lpsn_type_tokens,matched_bacdive_accessions,matched_biosample_accessions,selected_genome_linkage,conflict_status,reconciliation_notes,source_input_status,bacdive_row_count,diagnostic_codes -
evidence/reconciler_summary.json: audit-only JSON summary for thestrict_reconciliationstage. Count fields:record_count,strict_count,candidate_count,conflict_count,gap_count,manual_review_count,diagnostic_count -
evidence/reconciler_diagnostics.tsv: audit-only diagnostics for thestrict_reconciliationstage. Field order:schema_version,species_name,assembly_accession,source,status,severity,diagnostic_code,message,source_input_status,notes -
candidates/assembly_candidates.tsv:species,assembly_accession,organism_name,strain,biosample,bioproject,assembly_level,refseq_category,is_type_material,culture_collection_ids,has_recognized_deposit_id,lpsn_type_strain_ids,ncbi_culture_collection_ids,curator_culture_collection_ids,matched_lpsn_type_strain_ids,has_lpsn_type_strain_match,match_evidence,curator_evidence_source,curator_notes,curator_evidence_applied,discovery_name,discovery_name_type,matched_correct_name,synonym_used,synonym_evidence,requires_manual_review,manual_review_reason,source,notes -
candidates/assembly_candidate_diagnostics.tsv:species,code,message,assembly_accession -
candidates/discovery_records.tsv:species,assembly_accession,organism_name,strain,biosample,bioproject,assembly_level,refseq_category,is_type_material,source,notes -
selection/*.tsv:species,assembly_accession,organism_name,strain,culture_collection_ids,is_type_material,has_lpsn_type_strain_match,match_evidence,evidence_level,selection_rank,selected,selection_policy,policy_decision,ranking_reasons,blocking_reasons,manual_review_reason,selection_reason,notes -
selection/user_selection.tsv:species,assembly_accession,organism_name,strain,culture_collection_ids,is_type_material,has_lpsn_type_strain_match,match_evidence,evidence_level,selection_rank,selected,selection_policy,policy_decision,ranking_reasons,blocking_reasons,manual_review_reason,selection_reason,notes -
selection/download_preflight_summary.tsv:selected_total,strict_confirmed,likely_type_material,representative_only,missing_evidence_level,ncbi_assembly_backed,external_registered,download_planned,download_skipped_existing,download_not_applicable,download_skipped_no_accession,representative_only_scope -
selection/download_plan_readiness_summary.json: read-only JSON summary derived fromcache/ncbi/download_plan.tsv. Stable fields includeschema_version,available,download_plan_path,total_rows,status_counts,download_ready_ncbi_count,public_ncbi_download_plan_ready_count,existing_genome_count,missing_accession_count,external_registered_count,other_plan_status_count,malformed_row_count,review_or_handoff_count,bounded_ncbi_download_smoke_candidate_count,bounded_ncbi_download_smoke_ready,bounded_ncbi_download_smoke_scope,bounded_ncbi_download_smoke_blockers,high_quality_bounded_ncbi_download_smoke_candidate_count,high_quality_bounded_ncbi_download_smoke_ready,high_quality_bounded_ncbi_download_smoke_scope,high_quality_bounded_ncbi_download_smoke_blockers,bounded_ncbi_download_smoke_quality_tier_recommendation,whole_plan_requires_review,assembly_quality_summary_available,planned_assembly_level_counts,planned_refseq_category_counts,planned_complete_or_chromosome_count,planned_scaffold_or_contig_count,planned_unknown_assembly_level_count,planned_high_quality_download_candidate_count,planned_draft_or_fragmented_download_candidate_count,download_quality_coverage_summary,assembly_quality_notes,safe_for_unattended_download,downloads_triggered,providers_contacted,network_access,external_tools,manifest_mutated, andstrict_scientific_deliverable. Forstatus=plannedrows, assembly metadata is joined byassembly_accessionfromselection/user_selection.tsvwhen those optional columns are present and otherwise fromcandidates/assembly_candidates.tsv. Complete Genome and Chromosome are reported as the high-quality tier; Scaffold and Contig are reported as draft or fragmented, not invalid. Missing or unrecognized assembly levels are counted asunknown.download_quality_coverage_summaryrepeats those planned-row counts with fractions and the recommended bounded-smoke quality tier for automation. These quality counts and smoke-tier recommendations do not change selection, download readiness, manifests, completion metrics, or strict scientific policy. -
selection_review_strategy.v1: compact JSON stdout schema forselection-review strategy. Stable fields includeschema_version,command,status,reason,outdir,selection_review_required,selected_row_count,manifest_row_count,bounded_smoke_selected_row_count,high_quality_planned_row_count,draft_or_fragmented_planned_row_count,unknown_assembly_level_planned_row_count,planned_refseq_category_counts,recommended_strategy,recommended_quality_tier,first_round_limit,bounded_smoke_outdir,bounded_smoke_outdir_defaulted,selected_accession_quality_preview,selected_accession_quality_preview_truncated,selected_datasets_command_preview,selected_datasets_command_preview_truncated,selected_datasets_command_preview_only,recommended_request_target,recommended_request,recommended_next_command,review_artifacts,recommended_commands,handoff_checklist,review_guidance,forbidden_without_explicit_approval,downloads_triggered,providers_contacted,network_access,external_tools,manifest_mutated,strict_upgrade_applied, andaccepted_for_final_use. The command reads only existingverify-genusrun artifacts and is intended for operator or AI-controller strategy review after the default selection checkpoint.--bounded-smoke-outdir <dir>can override the default siblinghandoffs/bounded_download_smokesuggestion. When bounded rows are available,bounded_smoke_outdirpopulates the laterdownload-smoke prepare --write --outdir ...handoff command plus the top-levelrecommended_requestandrecommended_next_command. The strategy command itself still writes nothing.selected_datasets_command_previewis preview-only andhandoff_checklistmarks actual boundeddatasetsexecution and final genome acceptance as separate approval steps. It does not write files, rundatasets, inspect ZIP/FASTA payloads, contact providers, decide final genome usability, mutate workflow outputs, or change strict scientific status. -
manual_deposit_evidence_template.tsv:species,assembly_accession,organism_name,strain,biosample,is_type_material,lpsn_type_strain_ids,ncbi_culture_collection_ids,biosample_culture_collection,biosample_type_material,current_manual_review_reason,suggested_review_action,curator_confirmed_deposit_id,curator_evidence_source,curator_notes -
manual_species_gap_summary.tsv:species,lpsn_type_strain_ids,candidate_count,type_material_candidate_count,candidates_with_biosample_count,candidates_with_ncbi_deposit_id_count,best_candidate_accession,best_candidate_reason,gap_reason,recommended_next_step -
source_audit/sequence_source_audit.tsv:species,genome_accession,genome_strain,genome_biosample,genome_culture_ids,rrna_source,rrna_accession,rrna_strain,rrna_biosample,rrna_culture_ids,same_biosample,same_culture_collection_id,same_strain_text,audit_status,notes -
source_audit/culture_collection_audit.tsv:species,source,source_field,source_text,recognized_ids,has_recognized_deposit_id,notes -
source_audit/completion_audit.tsv:species,canonical_name,type_strain,ncbi_assembly_accession,ncbi_assembly_backed,external_registered_genome_backed,external_genome_id,external_source,external_source_url,genome_evidence_scope,completion_status,notes -
source_audit/completion_summary.tsv:metric,value,notes -
completion/gaps.tsv:species,checklist_name,lpsn_type_strain,lpsn_url,reason_category,selected,selected_assembly,selected_strain,evidence_level,record_status,suggested_next_action,notes -
completion/uncovered_species.tsv:species,checklist_name,lpsn_type_strain,lpsn_url,reason_category,selected,selected_assembly,selected_strain,evidence_level,record_status,suggested_next_action,notes -
completion/16s_gaps.tsv:species,checklist_name,lpsn_type_strain,lpsn_url,reason_category,selected,selected_assembly,selected_strain,evidence_level,record_status,suggested_next_action,notes -
completion/expanded_discovery_plan.tsv:species,checklist_name,lpsn_type_strain,token,token_kind,query_database,query,reason,suggested_next_action,notes -
completion/expanded_discovery_results.tsv:species,token,token_kind,query_database,query,candidate_accession,candidate_biosample,candidate_organism,candidate_strain,candidate_assembly_level,decision,decision_reason,suggested_next_action,notes -
completion/expanded_discovery_history.tsv:run_id,timestamp,operation,attempt,species,token,token_kind,query_database,query,candidate_accession,candidate_biosample,candidate_organism,candidate_strain,candidate_assembly_level,decision,decision_reason,suggested_next_action,notes -
completion/rejected_candidates.tsv:species,token,query_database,query,candidate_accession,candidate_biosample,candidate_organism,candidate_strain,decision,decision_reason,reject_category,notes -
completion/manual_supplement_hints.tsv:species,lpsn_type_strain,tokens,matched_candidate_count,rejected_candidate_count,no_result_count,query_failed_count,recommended_action,suggested_template,notes,reason,source,handoff_path -
cache/ncbi/download_plan.tsv:record_id,normalized_id,assembly_accession,expected_genome_path,datasets_zip_path,download_dir,status,notes -
bounded_download_smoke_plan.tsv: isolated subset ofcache/ncbi/download_plan.tsvfor a separately authorized bounded NCBI download smoke. Fields are thecache/ncbi/download_plan.tsvfields plusassembly_level,refseq_category, andquality_tier; every row hasstatus=planned.download-smoke inspectalso accepts older bounded smoke plans whose field order matches onlycache/ncbi/download_plan.tsv. -
bounded_download_smoke_commands.tsv: complete command handoff manifest written bydownload-smoke prepare --write, with one row per bounded plan row. Fields arerecord_id,assembly_accession,assembly_level,refseq_category,quality_tier,datasets_zip_path, andcommand_json;command_jsonis a compact JSON array for the boundeddatasets download genome accession ... --include genome --filename ...command. This file is for operator or AI-controller inspection only; it does not rundatasets, authorize downloads, contact providers, mutate manifests, or create strict deliverables. -
bounded_download_smoke_summary.json: read-only JSON summary fordownload-smoke prepare. Stable fields includeschema_version,command,source_download_plan_path,limit,requested_quality_tier,resolved_quality_tier,quality_tier,selected_row_count,selected_high_quality_row_count,selected_quality_tier_counts,selected_assembly_level_counts,selected_refseq_category_counts,selected_accession_quality_preview,selected_accession_quality_preview_truncated,selected_datasets_command_preview,selected_datasets_command_preview_truncated,selected_datasets_command_preview_only,inspection_min_fasta_n50_bases,inspection_max_fasta_record_count,inspection_max_fasta_ambiguous_bases,inspection_min_fasta_total_bases,inspection_min_fasta_longest_record_bases,inspection_quality_profile,inspection_block_fragmented_fasta,inspection_block_fasta_header_keywords,recommended_inspection_request_target,recommended_inspection_request,recommended_inspection_next_command,recommended_inspection_command,recommended_execution_validation_request_target,recommended_execution_validation_request,recommended_execution_validation_next_command,recommended_execution_validation_command,handoff_checklist,source_planned_row_count,source_high_quality_planned_row_count,source_draft_or_fragmented_planned_row_count,source_unknown_assembly_level_planned_row_count,source_refseq_category_counts,source_total_rows,ready,blockers,execution_boundary,safe_for_unattended_download,downloads_triggered,providers_contacted,network_access,external_tools,manifest_mutated, andstrict_scientific_deliverable.selected_high_quality_row_count,selected_quality_tier_counts, andselected_refseq_category_countscount only selected rows; source-level high-quality and RefSeq-category availability are reported separately.selected_accession_quality_previewincludes selected accessions, normalized assembly levels, normalized RefSeq category labels, and quality tiers.selected_datasets_command_previewlists at most five boundeddatasets download genome accession ... --include genome --filename ...command arrays for operator inspection; it is a preview only and does not rundatasets.handoff_checklistmarks bounded datasets execution and final genome acceptance as separate approval/review steps. Therecommended_execution_validation_*fields are empty untilprepare --writehas produced an isolated command manifest, then point to validation-onlydownload-smoke executewithout--execute; that handoff validates the pinned command manifest and does not download. Therecommended_inspection_*fields are empty untilprepare --writehas produced an isolated bounded plan, then point todownload-smoke inspectwith that plan path and the deterministic siblinginspection/output directory. Controllers can passrecommended_inspection_requestorrecommended_execution_validation_requesttocommands render; therecommended_*_commandfields remain compatibility argv lists for operator inspection. The defaultinspection_quality_profile=fragmentationcarries--quality-profile fragmentationinto that recommended handoff, enabling local blockers for fragmented FASTA signals and WGS/scaffold/contig header keywords during the later inspection;--inspection-quality-profile noneleaves those profile gates disabled unless explicit gate flags are supplied. Theinspection_*fields only carry optional local inspection quality gates into that recommended handoff; prepare does not inspect ZIPs, run downloads, contact providers, or decide final genome usability.quality_tieris the resolved effective tier.--quality-tier recommendedis the default and resolves the readiness recommendation tohigh,all, ornone;--quality-tier highselects only planned Complete Genome or Chromosome rows; Scaffold and Contig remain valid planned rows whenallis selected explicitly or whenrecommendedfalls back toall. -
bounded_download_smoke_execution.tsv: bounded execution audit rows fordownload-smoke execute. Fields arerecord_id,assembly_accession,assembly_level,refseq_category,quality_tier,datasets_zip_path,command_json,command_valid,executed,returncode,status, andnotes. A row is executed only whencommand_jsonexactly matches the bounded datasets command contract and--executeis supplied; otherwise the command is validation-only. Execution success means a ZIP is ready fordownload-smoke inspect, not that a genome is final-use accepted. -
bounded_download_smoke_execution_summary.json: read-only JSON summary fordownload-smoke execute. Stable fields includeschema_version,command,source_commands_manifest_path,limit,selected_row_count,command_valid_count,command_invalid_count,execute_requested,executed_command_count,datasets_zip_ready_for_inspection_count,status_counts,ready,blockers,execution_boundary,safe_for_unattended_download,recommended_inspection_request_target,recommended_inspection_request,recommended_inspection_request_blockers,recommended_inspection_next_command,recommended_inspection_command,downloads_triggered,providers_contacted,network_access,external_tools,manifest_mutated,strict_scientific_deliverable, and legacyrecommended_next_command. When execution audit outputs are written and the siblingbounded_download_smoke_plan.tsvis present, the structuredrecommended_inspection_*fields point to the matching localdownload-smoke inspecthandoff. If the sibling plan is absent, the request fields stay empty andrecommended_inspection_request_blockersincludesbounded_download_smoke_plan_missing. Dry-run validation leavesdownloads_triggered=0,network_access=false, andexternal_tools=false. Explicit execution may set those fields when commands run, but it still writes only isolated audit outputs and requires later ZIP/FASTA inspection before any bounded-smoke quality decision. If thedatasetsexecutable is missing, execution recordsdatasets_executable_missing, leaves the row unexecuted, and keepsdownloads_triggered=0,network_access=false, andexternal_tools=false.--download-smoke-execution-dir <dir>is an explicit read-only report/package surface for these two files. Report-only mode may show## Bounded Download Smoke Execution;package-results --include reportsand--include allmay copy validated members underdownload_smoke/withevidence_policy=download_smoke_execution_auditandstrict_scientific_deliverable=false. Missing input is omitted; partial or malformed input copies only valid members and emits a compact warning. Failed-handoff packages exclude the execution files. -
bounded_download_smoke_inspection.tsv: local inspection rows for a bounded smoke plan after a separately authorized download attempt. Fields arerecord_id,assembly_accession,assembly_level,refseq_category,quality_tier,zip_path,zip_exists,zip_valid,unsafe_zip_member_count,genome_fasta_present,genome_fasta_member_count,genomic_named_fasta_member_count,genome_fasta_install_selection_status,fasta_record_count,fasta_total_bases,fasta_longest_record_bases,fasta_n50_bases,fasta_ambiguous_bases,fasta_header_wgs_keyword_count,fasta_header_scaffold_keyword_count,fasta_header_contig_keyword_count,empty_genome_fasta_count,multiple_genome_fasta_members_count,fasta_fragmentation_signal,fasta_quality_gate_blockers,installable_genome_fasta_ready,installable_genome_fasta_not_ready_reasons, andstatus.assembly_level,refseq_category, andquality_tierare copied from annotated bounded smoke plans when available and otherwise useunknown.unsafe_zip_member_countis a count-only fail-closed signal for absolute, path-traversing, Windows-drive-prefixed, or symlink-like ZIP members; row status becomeszip_unsafe_membersand blockerunsafe_zip_member_pathsis reported before FASTA inspection.genome_fasta_install_selection_statusisselected,ambiguous, ornot_evaluatedand mirrors the later reference-genome installer selection rule: one FASTA member is selectable, more than one member is selectable only when exactly one member is namedgenomic.fnaor*_genomic.fna. When the source member is uniquely selectable, FASTA quality statistics describe that installable member; member-count fields still describe all FASTA members in the ZIP.fasta_quality_gate_blockersis empty unless explicit local quality gates are supplied, then contains semicolon-separated controlled blocker codes for that row.installable_genome_fasta_readyis a row-level local smoke signal derived from ZIP validity, unsafe-member checks, genome FASTA presence, install-selection status, empty-FASTA checks, and enabled quality-gate blockers;installable_genome_fasta_not_ready_reasonscontains semicolon-separated controlled reason codes when the row is not ready. The FASTA statistics, N50 value, header keyword counts, unsafe-member count, empty-FASTA count, multiple-member count, install-selection status, fragmentation signal, row-level readiness, and row-level blocker/reason codes are counts-only audit visibility; raw sequence text and raw FASTA headers are not copied into the inspection files. Readers accept earlier inspection TSVs that lackassembly_level,refseq_category,quality_tier,unsafe_zip_member_count,genome_fasta_install_selection_status,genomic_named_fasta_member_count,multiple_genome_fasta_members_count,empty_genome_fasta_count,fasta_quality_gate_blockers,installable_genome_fasta_ready, orinstallable_genome_fasta_not_ready_reasons. -
bounded_download_smoke_inspection_summary.json: read-only JSON summary fordownload-smoke inspect. Stable fields includeschema_version,command,source_download_plan_path,selected_row_count,zip_exists_count,zip_valid_count,unsafe_zip_member_count,genome_fasta_present_count,genome_fasta_member_count,genomic_named_fasta_member_count,genome_fasta_install_selection_status_counts,genome_fasta_install_selection_ambiguous_count,installable_genome_fasta_ready_count,installable_genome_fasta_not_ready_count,installable_genome_fasta_not_ready_reason_counts,installable_genome_fasta_ready_preview,installable_genome_fasta_ready_preview_truncated,installable_genome_fasta_not_ready_preview,installable_genome_fasta_not_ready_preview_truncated,assembly_metadata_high_quality_row_count,assembly_metadata_high_quality_installable_ready_count,assembly_metadata_high_quality_fasta_quality_blocked_count,assembly_metadata_high_quality_fasta_quality_blocker_counts,assembly_metadata_high_quality_fasta_quality_blocked_preview,assembly_metadata_high_quality_fasta_quality_blocked_preview_truncated,fasta_record_count,fasta_total_bases,fasta_longest_record_bases,fasta_max_n50_bases,fasta_ambiguous_bases,fasta_header_wgs_keyword_count,fasta_header_scaffold_keyword_count,fasta_header_contig_keyword_count,empty_genome_fasta_count,multiple_genome_fasta_members_count,fasta_fragmentation_signal_counts,installable_genome_fasta_fragmentation_signal_counts,installable_genome_fasta_header_fragment_keyword_row_count,min_fasta_n50_bases,max_fasta_record_count,max_fasta_ambiguous_bases,min_fasta_total_bases,min_fasta_longest_record_bases,quality_profile,block_fragmented_fasta,block_fasta_header_keywords,fasta_n50_below_minimum_count,fasta_record_count_above_maximum_count,fasta_ambiguous_bases_above_maximum_count,fasta_total_bases_below_minimum_count,fasta_longest_record_below_minimum_count,fragmented_fasta_signal_count,fasta_header_fragment_keyword_row_count,fasta_quality_gate_passed_row_count,fasta_quality_gate_blocked_row_count,fasta_quality_gate_blocker_counts,quality_gate_recommendation,quality_gate_recommendation_reasons,recommended_quality_gate_request_target,recommended_quality_gate_request,recommended_quality_gate_next_command,recommended_quality_gate_command,recommended_review_queue_request_target,recommended_review_queue_request,recommended_review_queue_next_command,recommended_execution_validation_request_target,recommended_execution_validation_request,recommended_execution_validation_next_command,recommended_execution_validation_command,bounded_smoke_next_action,bounded_smoke_next_action_reasons,status_counts,ready,blockers,execution_boundary,safe_for_unattended_download,downloads_triggered,providers_contacted,network_access,external_tools,manifest_mutated, andstrict_scientific_deliverable.installable_genome_fasta_ready_countcounts rows with a uniquely selectable non-empty genome FASTA source and no enabled FASTA quality-gate blockers;installable_genome_fasta_not_ready_countcounts the remaining selected rows, including missing, invalid, unsafe, empty, ambiguous, missing-FASTA, or quality-gate-blocked rows.installable_genome_fasta_not_ready_reason_countsmaps those non-ready rows to controlled blocker-style reason counts such as missing ZIPs, invalid ZIPs, unsafe ZIP members, missing or empty genome FASTA, ambiguous install selection, and enabled FASTA quality-gate blockers. The ready and not-ready previews list at most five rows each using only record IDs, accessions, assembly metadata, row status, controlled not-ready reasons, controlled quality blocker codes, and fragmentation signal; they do not include ZIP paths, raw FASTA headers, or sequence text.assembly_metadata_high_quality_*fields separately summarize rows selected from high-quality assembly metadata, including how many remain locally FASTA-installable and how many are blocked by local FASTA quality gates; this prevents Complete Genome or Chromosome metadata from being mistaken for automatic local FASTA acceptance. The high-quality blocked preview lists at most five affected rows using only record IDs, accessions, assembly metadata, row status, and controlled blocker codes; it does not include raw FASTA headers or sequence text. Therecommended_quality_gate_*fields are populated when the inspection observed fragmentation/header signals without the matching active gates; controllers can passrecommended_quality_gate_requesttocommands render, whilerecommended_quality_gate_commandremains a compatibility argv list. Therecommended_review_queue_*fields are populated only wheninspect --writehas written an isolated inspection directory with bounded rows, and point to the localcoverage-pipeline server-validation-result review-queuehandoff. Therecommended_execution_validation_*fields are populated when ZIP outputs are missing and the siblingbounded_download_smoke_commands.tsvexists, and point to validation-onlydownload-smoke executewithout--execute; that handoff validates the pinned command manifest and does not download.bounded_smoke_next_actionis a controlled AI/operator routing hint such asrerun_with_fragmentation_quality_gates,review_high_quality_metadata_fasta_quality_blockers,review_or_rerun_bounded_download_outputs,prepare_bounded_download_smoke_plan, orreview_bounded_smoke_outputs; it does not authorize downloads, provider access, manifest mutation, installation, or strict deliverable changes. The defaultquality_profileisfragmentation, which enables fragmented FASTA and WGS/scaffold/contig header keyword blockers so obvious scaffold/contig/WGS-like outputs fail bounded-smoke readiness by default. It does not treat a small number of records with one dominant chromosome-scale record and no WGS/scaffold/contig header keywords as automatically fragmented; those rows are reported asmulti_record_single_dominantfor review visibility.--quality-profile nonepreserves compatibility/visibility-only behavior and may returnquality_gate_recommendation=rerun_with_fragmentation_quality_gateswhen those signals are observed.installable_genome_fasta_fragmentation_signal_countsandinstallable_genome_fasta_header_fragment_keyword_row_countsummarize fragmentation/header keyword signals only among rows that remain locally installable under the active quality gates.fasta_n50_bases, header keyword counts, andfasta_fragmentation_signalare descriptive fields (single_record,multi_record_single_dominant,multi_record_fragmented, ornot_evaluated). Unsafe ZIP member paths are blocked by default asunsafe_zip_member_paths, with row statuszip_unsafe_members; no FASTA member content is inspected for that row. A genome FASTA member with zero records or zero bases is blocked by default asempty_genome_fasta_outputs, with row statusgenome_fasta_empty. A bounded row with more than one genome FASTA member remains visible throughmultiple_genome_fasta_members_count; it is blocked by default only when the installer selection rule cannot uniquely choose the source member, reported asgenome_fasta_install_selection_ambiguouswith row statusgenome_fasta_multiple_members. Optional flags--min-fasta-n50-bases,--max-fasta-record-count,--max-fasta-ambiguous-bases,--min-fasta-total-bases,--min-fasta-longest-record-bases,--block-fragmented-fasta, and--block-fasta-header-keywordscan add or repeat local bounded smoke blockers for obvious short, ambiguous-base-heavy, scaffold/contig, or WGS-style outputs, and the quality-gate passed/blocked row counts plus blocker-count map summarize those controlled row blockers.--quality-profile fragmentationis shorthand for enabling the fragmented FASTA and WGS/scaffold/contig header keyword blockers. These readiness blockers are local smoke acceptance criteria only; they do not change strict status, completion, or final genome usability. The inspection only checks local ZIP existence, ZIP validity, unsafe member paths, whether genome FASTA members are present, install-selection ambiguity, and bounded FASTA count statistics; it does not rundatasets, extract ZIPs, write raw sequences, access the network, contact providers, mutate manifests, or create strict deliverables.--download-smoke-inspection-dir <dir>is an explicit read-only report/package surface for these two files. Report-only mode may show## Bounded Download Smoke Inspection;package-results --include reportsand--include allmay copy validated members underdownload_smoke/withevidence_policy=download_smoke_inspection_auditandstrict_scientific_deliverable=false. Missing input is omitted; partial or malformed input copies only valid members and emits a compact warning. Failed-handoff packages exclude the inspection files. -
download_smoke_quality_review_decisions.tsv: optional local decision template written bycoverage-pipeline server-validation-result quality-review-template --write --out <tsv>. It copiesrecord_idandassembly_accessionfromdownload_smoke_review_queue_triage.tsvand leavesquality_review_decision,decision_reason_code,reviewer_id, andreviewed_atempty. The template is not a completed review and is rejected byquality-reviewuntil every row is filled with controlled decision/reason, reviewer, and date values. -
download_smoke_quality_review.tsv,download_smoke_quality_review_summary.json, anddownload_smoke_quality_review_diagnostics.tsv: isolated audit triplet written bycoverage-pipeline server-validation-result quality-review --write --outdir <dir>. The TSV records exact triage-to-decision linkage, controlledquality_review_decisionanddecision_reason_code, reviewer id, review date, and fixed false boundaries for final-use acceptance, strict upgrade, and manifest mutation. The summary repeats controlled decision/reason counts and fixed boundaries:audit_only=true,accepted_for_final_use=false,strict_upgrade_applied=false,manifest_mutated=false,downloads_triggered=0,providers_contacted=0,network_access=false, andexternal_tools=false. The diagnostics TSV uses controlled component/code/severity/accession fields only.--download-smoke-quality-review-dir <dir>is the explicit report/package surface for this triplet. Report-only mode may show## Bounded Download Smoke Quality Review;package-results --include reportsand--include allmay copy validated members underdownload_smoke/withevidence_policy=download_smoke_quality_review_auditandstrict_scientific_deliverable=false. Missing input is omitted; partial or malformed input copies only valid members and emits a compact warning. Failed-handoff packages exclude the quality-review files. A bounded-smoke quality acceptance is not final genome acceptance, not download authorization, and not strict deliverable promotion. When local inspection readiness or quality-gate fields are present, report and package handoff text may summarizeassembly_level_counts,refseq_category_counts,quality_tier_counts,installable_genome_fasta_ready_count,installable_genome_fasta_not_ready_count,installable_genome_fasta_not_ready_reason_counts,assembly_metadata_high_quality_row_count,assembly_metadata_high_quality_installable_ready_count,assembly_metadata_high_quality_fasta_quality_blocked_count,assembly_metadata_high_quality_fasta_quality_blocker_counts,assembly_metadata_high_quality_fasta_quality_blocked_preview,assembly_metadata_high_quality_fasta_quality_blocked_preview_truncated,installable_genome_fasta_fragmentation_signal_counts,installable_genome_fasta_header_fragment_keyword_row_count,fasta_quality_gate_passed_row_count,fasta_quality_gate_blocked_row_count,fasta_quality_gate_blocker_counts,quality_gate_recommendation,quality_gate_recommendation_reasons,bounded_smoke_next_action, andbounded_smoke_next_action_reasonsas controlled audit signals. Preview rows are limited to record IDs, accessions, assembly metadata, row status, and controlled blocker codes. Local recommended command paths, ZIP paths, raw FASTA headers, and sequence text are not surfaced there. -
cache/ncbi/download_results.tsv:record_id,normalized_id,assembly_accession,status,zip_path,returncode,stderr,notes. Successfuldatasetscommands that write valid ZIP files with unsafe member paths are recorded asskipped_invalid_zipwith count-only notes before registration or extraction. -
cache/ncbi/genome_registration_results.tsv:record_id,normalized_id,source_fna,installed_genome_path,status,notes. This records the durable ZIP extraction and reference-genome installation outcome after successful download results or reusable local ZIPs; it does not contain raw sequence text. Successful registration notes may include count-only FASTA quality signals such as record count, total bases, N50, ambiguous bases, scaffold/contig/WGS header keyword counts, and a fragmentation signal; raw FASTA headers and sequences are not copied into this TSV. When present,report/summary.mdandstatusmay show status counts and count-only FASTA quality summaries from this TSV as local installation visibility only; those counts do not change strict type-strain status, completion, or evidence policy. -
cache/ncbi/extracted/<record_id>: extracted NCBI Datasets ZIP contents. Registration checks unsafe ZIP members before FASTA presence; absolute, path-traversing, Windows-drive-prefixed, or symlink-like member paths fail closed asskipped_invalid_zipwithout exposing member paths. -
rrna/rrna_plan.tsv:record_id,normalized_id,genome_path,expected_gff_path,expected_rrna_fasta_path,status,notes -
report/artifact_scope.tsv:artifact_path,artifact_kind,scope,evidence_policy,record_count,strict_usable_count,candidate_count,excluded_mismatch_count,artifact_label,recommended_use,not_for,source_artifact,consumer_priority,strict_scientific_deliverable,notes -
ani/ani_plan.tsv:record_id,normalized_id,query_id,reference_genome_path,query_genome_path,status,notes -
ani/ani_query_vs_refs.tsv:normalized_id,reference_name,reference_genome_path,ani,matching_fragments,total_fragments,fraction,above_species_threshold -
ani/ani_summary.tsv:hit_count,top_hit_id,top_hit_name,top_ani,top_fraction,hits_above_95,status,notes -
phylo/phylo_plan.tsv:input_fasta_path,aligned_fasta_path,trimmed_fasta_path,iqtree_prefix,iqtree_executable,treefile_path,query_16s_status,query_sequence_count,status,notes
has_16s means that a sequence is available; it does not claim strict
same-genome or same-strain evidence. The four manifest provenance fields are
the stable row-level contract:
rrna_16s_source: acquisition source such asbarrnap,entrez, orexisting_file.rrna_16s_evidence_level:same_genome,same_strain_confirmed,candidate_fallback,mismatch_blocked, ormissing.rrna_16s_audit_status: the detailed source-audit result, includingsame_genome_internal_16s,same_biosample,same_culture_collection_id,strain_text_match,mismatch,manual_review_required, or an extraction failure/not-found status.rrna_16s_strict_usable: true only when an available sequence is same-genome or is supported by BioSample/culture-collection equivalence. Strain-text-only, candidate, mismatch, manual-review, and missing rows are false.
These fields are optional when reading legacy manifests. Missing provenance
must not be inferred as strict usable. The rrna_barrnap run-state summary
records rrna_16s_strict_usable and rrna_16s_candidate_or_blocked counts
when provenance-bearing rows exist.
rrna/all_16S.fasta remains the compatibility combined FASTA and may contain
same-genome, confirmed same-strain, candidate/fallback, mismatch/blocked, and
query sequences. It is candidate-inclusive, not a strict same-genome-only
FASTA. Entrez entries retain source=Entrez, accession, and audit_status in
their FASTA headers. Consult manifest.tsv and
source_audit/sequence_source_audit.tsv for the complete evidence contract.
The alignment, trimmed alignment, and tree derived from this file inherit the
same scope. Reports label a tree practical/candidate-inclusive whenever a
candidate or blocked row is present.
rrna/strict_16S.fasta is the policy-independent strict FASTA. It contains
only non-query records where rrna_16s_strict_usable=true and
rrna_16s_evidence_level is same_genome or same_strain_confirmed.
rrna/policy_16S.fasta is the resolved evidence-policy FASTA. Under strict
it equals rrna/strict_16S.fasta; under candidate it adds evaluator-admitted
candidate_fallback records; under exploratory it may add admitted practical
16S records. mismatch_blocked records remain excluded under every policy.
Local query rows are excluded unless a future evaluator explicitly admits
exploratory query 16S.
report/artifact_scope.tsv records the machine-readable scope for
rrna/all_16S.fasta, rrna/strict_16S.fasta, and rrna/policy_16S.fasta.
Read this file before choosing any 16S FASTA or phylogeny output. Only rows
with strict_scientific_deliverable=true are strict scientific deliverables.
artifact_label is the short reader-facing label, recommended_use is the
positive use case, not_for records misuse boundaries, source_artifact
records upstream evidence inputs, and consumer_priority is a stable sort key
where lower values are preferred first. rrna/all_16S.fasta is always
strict_scientific_deliverable=false; default alignment, trimmed alignment,
and tree outputs derived from it inherit compatibility/all scope. Under
strict policy, rrna/policy_16S.fasta may be a strict scientific deliverable;
under candidate or exploratory policy it must not be treated as strict unless
the scope row explicitly says strict_scientific_deliverable=true.
When no records are eligible for a scoped FASTA, the file is still written as
an empty FASTA and the scope manifest records record_count=0 with the reason
in notes. Delivery packages copy the manifest to
reports/artifact_scope.tsv and, when present, package root artifact_scope.tsv.
When normalized BacDive review outputs are packaged, both package scope
manifests also include evidence/bacdive_enrichment.tsv,
evidence/bacdive_diagnostics.tsv, and
evidence/bacdive_source_audit.json rows with scope=audit,
recommended_use=candidate enrichment review,
not_for=strict type-strain confirmation, and
strict_scientific_deliverable=false. These rows are package handoff metadata
only and are not strict type-strain confirmation. BacDive package inclusion
means audit availability, not a strict scientific deliverable; strict
deliverables must be determined from artifact_scope.tsv and strict evidence
fields. Raw BacDive payloads are not included. When existing reconciler audit
files are packaged under evidence/, package scope manifests add one row per
copied file with scope=audit,
evidence_policy=strict_reconciliation_audit, and
strict_scientific_deliverable=false. Reconciler package inclusion means audit
availability, not strict scientific delivery, completion gating, manifest
mutation, evidence-policy changes, or future package-tier policy.
When download_results.tsv or genome_registration_results.tsv is packaged,
package-root and reports scope manifests add audit-only rows with
evidence_policy=download_execution_audit or
evidence_policy=genome_registration_audit,
strict_scientific_deliverable=false, and not_for=strict deliverable gating.
These rows document local download command outcomes and ZIP/FASTA installation
outcomes only; they do not confirm strict type-strain status. If packaged
registration rows include count-only FASTA quality notes, package README and
handoff-index text summarize fragmented-row, WGS/scaffold/contig keyword-row,
record-count, N50, and ambiguous-base signals without copying raw FASTA headers
or sequences.
When selection/download_plan_readiness_summary.json exists,
package-results --include reports and --include all copy it to
reports/download_plan_readiness_summary.json. Package-root and reports scope
manifests add one row with scope=audit,
evidence_policy=download_plan_readiness_audit,
recommended_use=download readiness review, and
strict_scientific_deliverable=false. Failed-handoff packages exclude this
surface. Inclusion means download-plan review availability, not unattended
download authorization, provider contact, manifest mutation, or strict
deliverable gating.
When package-results --include reports or --include all receives an
explicit --manual-review-import-dir, each valid recognized member is copied
to manual_review/. Package-root and reports scope manifests add one row per
copied member with scope=audit,
evidence_policy=manual_review_audit,
recommended_use=curator decision review,
not_for=strict deliverable gating,
source_artifact=manual_review_import, and
strict_scientific_deliverable=false. A missing or empty triplet is omitted.
Partial or malformed input does not fail packaging: valid members remain
copyable and the package README/handoff index records a compact warning.
Failed-handoff packages exclude this surface. Inclusion means review
availability only; strict_upgrade_candidate=true is not a strict deliverable
upgrade, and strict_upgrade_applied=false means no manifest, selection,
reconciler, package, completion, or evidence-policy change.
completion/16s_gaps.tsv includes genome_ready_16s_not_found for missing
sequences and genome_ready_16s_not_strict_usable when a sequence exists but
its provenance does not support strict use.
Provider registration planning statuses: provider_plan_credentials_not_supported,
provider_plan_download_not_supported, provider_plan_manual_review_required,
provider_plan_missing_required_field, provider_plan_ready_for_review,
provider_plan_terms_review_required.
External genome statuses: external_genome_checksum_mismatch,
external_genome_download_not_applicable, external_genome_install_checksum_mismatch,
external_genome_install_failed, external_genome_install_planned,
external_genome_install_skipped_existing, external_genome_install_skipped_invalid,
external_genome_install_succeeded, external_genome_manual_review_required,
external_genome_missing_file, external_genome_registered.
Selection, audit, and workflow statuses include complete_ncbi,
complete_external_registered, missing_genome,
genome_present_insufficient_strict_type_evidence, conflict,
auto_selected_lpsn_type_strain_match,
auto_selected_curator_lpsn_type_strain_match,
auto_selected_likely_type_material, auto_selected_top_ranked,
representative_not_type_confirmed, available_not_selected,
manual_review_required, missing_assembly_accession, missing_biosample,
biosample_record_not_found, rrna_16s_not_found, and
phylo_ready_to_plan.
complete_ncbi requires both strict type-strain evidence and actual manifest
genome presence. An accession with status=genome_download_planned,
has_genome=false, and only an expected future genome_path remains
missing_genome; planning does not increase strict completion.
Expanded discovery decisions: rejected_species_mismatch,
matched_candidate, rejected_missing_accession, no_result,
query_failed, rejected_no_type_token_evidence.
Completion gap semantics separate genome availability from strict type evidence.
completion/uncovered_species.tsv is for checklist species without a
manifest-backed genome record and uses missing_genome as the gap reason.
Manifest-backed genomes with likely_type_material, representative_only, or
other non-strict evidence stay out of uncovered_species.tsv; they appear in
completion/gaps.tsv as insufficient_type_evidence with record status
genome_present_insufficient_strict_type_evidence. These candidate-backed rows
are review caveats and must not be described as strict LPSN-confirmed type
strains or as missing genomes.
Acquisition worklists built by
typetreeflow.evidence.acquisition_worklist are pure offline review queues.
They combine already available checklist, reconciler, completion-gap, and
external-genome rows plus optional archive-candidate audit rows and assign at
most one lane per species. The TSV field order is schema_version, species,
lane, selected_accession,
reconciled_evidence_tier, reason_code, recommended_action,
candidate_provider_keys, candidate_provider_statuses, source_artifacts,
audit_only, and strict_scientific_deliverable.
Supported lanes are no_action_strict_complete,
curator_conflict_resolution, public_linkage_review,
external_registration_ready, external_fasta_required, and
not_evaluated. Conflict lanes take precedence over candidate or
external-ready lanes. The summary preserves downloads_triggered=0,
providers_contacted=0, and manifest_mutated=false. It also includes
additive review_signal_counts and candidate_provider_key_counts for triage
signals such as selected accession, strict usable, conflict blocked, NCBI
type-material candidate, authoritative type-material candidate, BacDive/DSMZ
candidate, BioSample linkage review, archive candidate review, missing public
genome, external-registration-ready rows, expanded-discovery matched-candidate
review, and candidate provider routing hints. These counts are review hints
only and do not change lane, completion, provider, or download semantics.
The summary also includes candidate_provider_status_counts, and rows include
candidate_provider_statuses entries such as ena=metadata_only or
dsmz=planning_only, so AI/operators can separate public archive metadata
review from provider handoff pressure without contacting providers or running
downloads.
For external_fasta_required rows, candidate_provider_keys may be derived
from explicit local provider hints or recognizable culture-collection tokens
such as ATCC, DSM, JCM, NCTC, CGMCC, NBRC/NITE, KCTC, KACC, ACCC, IMSNU,
MAFF, NCFB, KCCM, NCCP, VKM, MCCC, GDMCC, CCTCC, CECT, CIP, CCUG, CCM, LMG,
NCIMB/NCIBM, NCIB, NRRL, NCAIM, HAMBI, KMM, GTC, PAGU, BCRC, CCRC, NCCB, CSUR/Marseille,
TBRC, TISTR, CCOS, CCAM, CICC, IFO, IAM, and FERM.
Explicit provider hints may use canonical provider keys, common abbreviations,
or static registry display names; they are normalized to canonical provider
keys before summary counting. Recognized hints are additive across supported
fields, so an unrecognized local source label does not mask a later canonical
provider name in another field. Expanded-discovery matched-candidate rows may
carry provider hints from fields such as query_database; manual supplement
matched-candidate hints may carry provider keys from controlled tokens. These
hints route later review pressure only and do not make a candidate strict or
download-ready.
Archive-candidate source fields such as archive_source and
archive_source_name may also normalize public archive or genome-portal names
such as ENA, DDBJ, INSDC, NCBI Assembly, NCBI BioSample, GenBank, RefSeq,
BV-BRC, PATRIC, IMG/M, and JGI IMG to provider hints. ENA, DDBJ, INSDC, NCBI
Assembly, NCBI BioSample, GenBank, RefSeq, BV-BRC, and PATRIC remain
metadata-only review hints; IMG/JGI remains a planning-only handoff hint and is
not counted as a public archive metadata source.
For archive-candidate rows, reason_code distinguishes the available
accession class when possible: assembly, BioSample-only, or nuccore/WGS
sequence accessions. All of these remain public_linkage_review rows and
require manual linkage evidence before any download or strict use.
The field is a provider handoff hint only; it does not confirm type-strain
status, contact providers, authorize terms, or trigger downloads.
Archive candidate audits built by
typetreeflow.evidence.archive_candidates are isolated public-linkage review
surfaces. Input rows use species, strain, type_strain_id,
archive_source, archive_source_name, assembly_accession,
biosample_accession, nuccore_accession, wgs_accession, organism_name,
strain_designation, culture_collection_tokens,
archive_type_material_signal, lpsn_token_overlap, source_url, and
evidence_notes. The generated archive_candidates.tsv prepends
schema_version and appends candidate_status, requires_manual_review,
recommended_action, audit_only, and strict_scientific_deliverable.
Supported statuses are archive_candidate_for_public_linkage_review,
archive_candidate_insufficient_type_linkage, archive_candidate_conflict,
archive_candidate_missing_accession, and archive_candidate_malformed.
Known archive_source aliases such as ENA, European Nucleotide Archive,
DDBJ, GenBank, RefSeq, BV-BRC, PATRIC, IMG/M, and JGI IMG are normalized to
canonical registry keys in output rows. Only metadata-only sources contribute
their canonical keys to public archive source counts; planning-only sources
such as IMG/JGI are retained on rows but counted as other in archive source
summaries. Unknown source labels remain lower-case review metadata and do not
create provider or download capability.
Archive candidate summaries always preserve downloads_triggered=0,
providers_contacted=0, manifest_mutated=false, audit_only=true, and
strict_scientific_deliverable=false. They also include controlled
archive_source_counts, accession_kind_counts, and
review_input_class_counts maps plus source_input_kind_counts and
expanded_discovery_candidate_count so AI/operator handoff can distinguish
public archive source, available accession class, the next local review input,
and whether candidates came from the expanded-discovery bridge without reading
row-level notes. The same summary includes
public_archive_opportunity_packet, a bounded audit-only packet that groups
rows by local review input class, public archive source, accession class, and
source input kind. It also includes coverage_priority_route_counts and
coverage_priority_route_summary, which align archive candidates with the
coverage-priority routes exposed by providers catalog, including public
archive metadata review, NCBI Assembly/BioSample metadata review, BacDive/DSMZ
type-material metadata review, ordinary provider handoff, and credential-gated
handoff. Its
safe_for_unattended_download=false boundary is fixed: the packet ranks review
opportunities for later curator/AI inspection, but it does not authorize
downloads or strict deliverable promotion.
The isolated archive candidate CLI adapter is:
typetreeflow archive-candidates build (--input-tsv <archive_candidates_input.tsv> | --expanded-discovery-results-tsv <expanded_discovery_results.tsv>) [--json] [--write --outdir <dir> [--include-manual-review-template] [--include-input-template] [--force]]
Exactly one input source is required. --input-tsv reads the archive-candidate
input schema directly. --expanded-discovery-results-tsv reads a local
completion/expanded_discovery_results.tsv-style file and maps only
matched_candidate rows with an assembly or BioSample accession into the
archive-candidate input schema. The mapper infers public archive source from
the matched accession/query context, carries the query token as unreviewed
linkage evidence, and does not copy raw expanded-discovery notes.
Without --write, it writes nothing. With --write, it writes only
archive_candidates.tsv, archive_candidates_summary.json, and
archive_candidates_diagnostics.tsv into the explicitly supplied isolated
directory. With --include-manual-review-template, the same isolated directory
also receives a companion manual_review.tsv skeleton for rows whose next
input is manual review. The skeleton pre-fills species/accession context and
template-only evidence notes, but leaves review status, reviewer, date,
second-review, and conflict-resolution fields blank. It is not a curator
decision, will not validate as a completed manual-review TSV, and cannot grant
strict status until a curator or AI reviewer completes and validates it
separately. With --include-input-template, the isolated directory also
receives archive_candidates_input_template.tsv for rows whose next local step
is to supply a missing public accession or repair archive metadata. That file
uses the archive-candidate input schema and is intended for local editing before
rerunning archive-candidates build; it is not a review decision, workflow
output, download authorization, or strict deliverable signal. Successful writes
also include recommended_request,
recommended_request_target=coverage-pipeline build, and
recommended_next_command fields that point a later local coverage-pipeline run
at the written archive_candidates.tsv. They also include a
recommended_command_plan for that request; because the handoff is a write
request, the embedded plan remains blocked until an operator or controller
explicitly allows writes. The adapter does not run that next command, query
public archives, write external_genomes.tsv, mutate workflow outputs, contact
providers, trigger downloads, or grant strict type-strain status.
The isolated CLI adapter is:
typetreeflow acquisition-worklist build [--checklist-tsv <tsv>] [--reconciler-audit-tsv <tsv>] [--completion-gaps-tsv <tsv>] [--external-genomes-tsv <tsv>] [--archive-candidates-tsv <tsv>] [--expanded-discovery-results-tsv <tsv>] [--manual-supplement-hints-tsv <tsv>] [--json] [--write --outdir <dir> [--force]]
It reads only the explicitly named TSV files and emits exactly one compact
JSON object, including review_signal_counts and
candidate_provider_key_counts plus candidate_provider_status_counts review
hints. The summary also includes unrouted_type_strain_token_counts and
bounded unrouted_type_strain_token_examples for provider-like type-strain or
culture-collection prefixes that were visible in local evidence but did not
match the static provider registry. Plain strain codes, lower/mixed-case
strain-note prefixes, and known legacy or cross-deposit strain-designation
prefixes are filtered out where possible. These fields are audit-only platform
expansion signals, not provider keys or download routes. The summary also
includes acquisition_opportunity_summary, a stable lane/reason-code grouping
with bounded species previews, source-artifact counts, provider hint counts,
and the next local input class. It is intended for
Clostridium-scale action mapping from existing evidence and always keeps
safe_for_unattended_download=false; it does not start provider contact or
download work. Without --write, it writes nothing. With --write, it writes only
acquisition_worklist.tsv and
acquisition_worklist_summary.json into the explicitly supplied directory.
Command metadata reports the target output contract as
acquisition_worklist_packet.v1, so AI/operator controllers can route the
worklist pair before running the command. When --write succeeds, stdout and
the written acquisition_worklist_summary.json both include
recommended_request, recommended_request_target, and
recommended_next_command for a later local coverage-plan build command that
points to the written acquisition_worklist.tsv. It also includes a
metadata-only recommended_command_plan companion for that request, with the
rendered argv and preflight decision, so file-based controllers can resume from
the saved summary without inferring paths from prose. The adapter does not run
that next command.
Expanded discovery and manual-supplement inputs are local TSV handoffs only:
matched_candidate and review_matched_candidates can surface public linkage
review, while manual_search_required or provide_external_genome_fasta can
surface external FASTA/provider handoff pressure. The adapter does not run
expanded discovery, query NCBI/BioSample/LPSN/provider services, auto-select
accessions, or mutate workflow outputs.
Existing output directories are refused by default; --force replaces only an
owned pair with matching schemas. Missing or unreadable input blocks the
command with exit code 2; successful worklist generation exits 0;
unexpected internal or write failures exit 1.
The optional report/package surfaces are separate from worklist generation:
pass --acquisition-worklist-dir <dir> with --report-only to display compact
audit counts, or with package-results --include reports|all to copy the
validated pair into a delivery package.
The isolated coverage action plan adapter is:
typetreeflow coverage-plan build --worklist-tsv <acquisition_worklist.tsv> [--json] [--write --outdir <dir> [--force]]
It reads only the explicitly named acquisition worklist TSV with the matching
schema and audit-only boundary fields, then emits exactly one compact JSON
object. Without --write, it writes nothing. With --write, it writes only
coverage_plan.tsv and coverage_plan_summary.json into the explicitly
supplied directory.
The compact JSON and written summary include provider route aggregates such as
provider_automation_level_counts, operator_route_counts,
next_input_class_counts, automation_boundary_counts, and
provider_route_groups, so AI/operator controllers can distinguish
public-metadata review from user-assisted provider handoff before generating
the provider-handoff pair. The same summary includes bounded
priority_provider_route_items, a provider-first queue sorted with
planning-handoff providers before public metadata-review providers, then by
record count and provider key. Each item carries the primary route, action,
next-input class, bounded species preview, credential/network counts, and
fixed no-execution fields. It is local prioritization metadata only and does
not authorize provider contact or downloads. Public archive and public
type-linkage rows without explicit hints use metadata-only defaults such as
ENA, DDBJ, INSDC, GenBank, NCBI Assembly, NCBI BioSample, and RefSeq so public
accession/linkage review pressure remains visible. Archive-candidate reason
codes refine the required input for assembly, BioSample-only, or nuccore/WGS
sequence accession review while keeping the same audit-only
review_public_archive_linkage action. Provider hints from supported worklist
fields are additive: an unknown local label is retained as fail-closed
planning-only handoff metadata and does not mask later canonical provider or
public archive names in other fields.
Command metadata reports the target output contract as
coverage_plan_packet.v1, so controllers can route the coverage-plan pair
before running the command. When --write succeeds, stdout and the written
coverage_plan_summary.json both include recommended_request,
recommended_request_target, and
recommended_next_command for a later local provider-handoff build command
that points to the written coverage_plan.tsv. When the priority route list
contains a provider-handoff item, that request includes provider_keys for the
first up to three prioritized provider keys, so the next handoff is bounded by
default rather than expanding every provider route at once. It also includes a
metadata-only recommended_command_plan companion for that request, with the
rendered argv and preflight decision, so file-based controllers can resume from
the saved summary without inferring paths from prose. The adapter does not run
that next command.
Existing output directories are refused by default;
--force replaces only an owned pair with matching schemas. Missing,
unreadable, malformed, wrong-schema, or boundary-violating input blocks the
command with exit code 2; successful plan generation exits 0; unexpected
internal or write failures exit 1.
Coverage plans are AI action queues only: they do not contact providers,
download genomes, mutate manifests, change completion metrics, or promote
strict scientific deliverables.
The optional report/package surfaces are separate from plan generation: pass
--coverage-plan-dir <dir> with --report-only to display compact audit
counts, or with package-results --include reports|all to copy the validated
pair into a delivery package under coverage_plan/ with
evidence_policy=coverage_plan_audit and
strict_scientific_deliverable=false artifact-scope rows.
The isolated provider handoff adapter is:
typetreeflow provider-handoff build --coverage-plan-tsv <coverage_plan.tsv> [--provider-key <key> ...] [--json] [--write --outdir <dir> [--force]]
It reads only the explicitly named coverage-plan TSV and expands non-empty
provider_keys through the static fail-closed provider registry. Common
provider labels and case variants such as DSMZ, RefSeq,
DSM, ATCC Genome Portal, BCCM-LMG, and BCCM/LMG are normalized to
canonical provider keys before counting and serialization. Provider-key cells
may also contain recognizable standalone tokens embedded in longer labels, such
as German Collection of Microorganisms and Cell Cultures (DSMZ). Acquisition
worklists use the same static registry alias and culture-collection token
rules when deriving candidate_provider_keys from local rows. The compact
JSON and summary also include
readiness counts for terms review, credential requirement, network support,
and default network enablement, plus required_inputs,
recommended_request, and recommended_next_command fields for the next
offline provider-request draft step. Unknown providers still fail closed as
planning-only rows under the supplied value. Optional repeated
--provider-key <key> values filter output rows to a bounded provider subset
using the same canonical key and alias rules; the compact JSON reports
provider_key_filter, provider_key_filter_count, and filtered. The filter
is local queue control only and does not authorize provider contact. Without
--write, it writes nothing. With --write, it writes only
provider_handoff.tsv and provider_handoff_summary.json into the explicitly
supplied directory. On successful writes, stdout's recommended_request points
to that written provider_handoff.tsv for a later local
provider-request draft command, and the written summary preserves the same
filter provenance and concrete path so file-based controller resume does not
need stdout context.
Dry-run output keeps the generic handoff filename template. Both dry-run and
successful write payloads include a
metadata-only recommended_command_plan companion for the provider-request
draft handoff, with rendered argv and preflight decision. Existing output
directories are refused by default;
--force replaces only an owned pair with matching schemas. Missing,
unreadable, malformed, provider-key-empty input, or rows missing species,
source_lane, or action_code block the command with exit code 2;
successful handoff generation exits 0; unexpected internal or write failures
exit 1. Provider handoff rows are AI/operator planning artifacts only: they
do not contact providers, download genomes, mutate manifests, change completion
metrics, or promote strict scientific deliverables.
Command metadata reports the target output contract as
provider_handoff_packet.v1, so controllers can route the provider-handoff pair
before running the command.
provider_handoff.tsv includes the source coverage priority,
provider_automation_level, and the same controlled operator_route,
next_input_class, and automation_boundary vocabulary used by
providers catalog and the coverage action queue. The summary JSON and compact
stdout include counts for those route fields plus source_priority_counts and
provider_route_groups, which groups provider keys and row counts by
operator_route. The automation level is AI planning metadata derived from the static provider
registry, using the same planning_handoff, metadata_review, and
download_enabled labels as providers catalog. Guidance notes are compact
fail-closed strings derived from the provider registry adapter. These fields
may describe terms review, credential review, user-assisted local FASTA
handoff, public archive metadata review, or current adapter capability, but
they are not provider authorization, terms acceptance, download readiness, or
strict type-strain evidence.
Planning-only public genome portal entries such as IMG/JGI remain in this
handoff route. They may report credentials_required=true, but still keep
network_supported=false, default_network_enabled=false,
downloads_triggered=0, and providers_contacted=0.
The optional report/package surfaces are separate from handoff generation:
pass --provider-handoff-dir <dir> with --report-only to display compact
provider-handoff audit counts, or with package-results --include reports|all
to copy the validated pair into a delivery package under provider_handoff/
with evidence_policy=provider_handoff_audit and
strict_scientific_deliverable=false artifact-scope rows.
The isolated provider request draft adapter is:
typetreeflow provider-request draft --provider-handoff-tsv <provider_handoff.tsv> [--provider-key <provider-key-or-alias> ...] [--json] [--write --outdir <dir> [--force]]
It reads only the explicitly named provider_handoff.tsv and converts valid
handoff rows into a deterministic review draft for local
provider-request validate.
Repeated --provider-key values filter the handoff to canonical provider keys
or known aliases before drafting request rows, so operators can split one
combined provider handoff into provider-specific local review batches without
rerunning coverage planning. The filter is local routing only; it does not
contact providers, accept terms, download genomes, mutate workflow outputs, or
change completion metrics.
Without --write, it writes nothing. With --write, it writes only
provider_request.tsv and provider_request_draft_summary.json into the
explicitly supplied directory. Existing output directories are refused by
default; --force replaces only an owned pair with matching schemas.
Missing, unreadable, malformed, boundary-violating, empty input, or handoff rows
missing provider_key, provider_name, provider_status, or species block
the command with exit code 2; successful draft generation exits 0;
unexpected internal or write failures exit 1.
Draft rows are intentionally incomplete. The adapter fills stable provider,
species, artifact type, request ID, review flags, and audit notes, while
leaving curator-owned strain, type-strain ID, provider record, local FASTA,
SHA-256, license, retrieval date, and curator fields blank. These rows do not
contact providers, accept terms, download genomes, mutate manifests, change
completion metrics, or promote strict scientific deliverables.
The compact JSON and provider_request_draft_summary.json include
provider_automation_level_counts, operator_route_counts,
provider_route_groups, next_input_class_counts, automation_boundary_counts,
provider_key_filter, provider_key_filter_count, filtered,
curator_completion_required_count, curator_completion_template_counts,
curator_completion_template_guidance, curator_completion_field_counts,
curator_completion_blocker_counts,
recommended_request, recommended_request_target, and
recommended_next_command. Dry-run output keeps a generic
provider-request validate request. On successful writes, stdout's
recommended_request and recommended_next_command point to the written
provider_request.tsv for the later local validation command, and the written
summary preserves the same concrete path for file-based controller resume.
commands recognize, commands plan, and commands preflight report the
target output contract as provider_request_draft_packet.v1, so AI/operator
controllers can route the draft pair without running the command first.
The row notes include provider_status, provider_automation_level,
operator_route, next_input_class, automation_boundary,
curator_completion_template, and required_curator_fields so an AI/operator
can distinguish provider/local FASTA handoff from public-archive linkage
review or BacDive/type-material metadata linkage review without losing the
provider status and automation boundary from the handoff step. These counts and
guidance entries are planning diagnostics for missing curator-owned fields such as strain,
type-strain ID, provider-record/artifact ID, local FASTA path, SHA-256, terms
review, license, retrieval date, and curator name. They are not completion
metrics and do not make a draft row eligible for provider execution.
The isolated provider request validation adapter is:
typetreeflow provider-request validate --input <provider_request.tsv> [--provider-key <provider-key-or-alias> ...] [--base-dir <dir>] [--json] [--write --outdir <dir> [--force]]
It reads only the explicitly named provider_request.tsv plus local FASTA
files referenced by rows. Relative FASTA paths are resolved against
--base-dir, or against the input file parent when --base-dir is omitted.
The command checks required request fields, provider record/artifact ID,
terms_review_status=reviewed_allowed, supported artifact type, license notes,
valid retrieval date, curator field, is_type_material=true,
requires_manual_review=false, local FASTA existence, nonempty file size,
non-symlink path, SHA-256 shape, and checksum match. It emits one compact JSON
object with ready_count, blocked_count, blocker_counts,
blocker_guidance,
local_fasta_checked_count, local_sha256_matched_count,
provider_status_counts, provider_automation_level_counts,
operator_route_counts, provider_route_groups, next_input_class_counts, and
automation_boundary_counts, source_priority_counts, plus provider_key_filter,
provider_key_filter_count, and filtered when a local provider subset was
selected. Route counts are populated when the controlled values are present in
draft row notes. Row previews include only request ID, species, provider, readiness
status, blocker codes, provider/route metadata, and boolean local evidence checks. They
do not echo local FASTA paths, hashes, provider notes, curator values, or
sequence contents. The JSON and summary also include required_inputs plus a
structured recommended_request for the next offline
provider-request external-genomes-handoff step, its compact
recommended_request_target, and a renderable recommended_next_command.
Library summaries keep a generic <provider_request.tsv> template; CLI stdout
and write summaries use the explicit --input path and preserve --base-dir
in the recommended request when supplied. They include repeated
--provider-key filters in the recommended request when supplied, so a
provider-specific validation batch can continue to a provider-specific
external-genomes-handoff batch without inference. They also include
provider_request_readiness_packet, a compact AI/operator handoff object with
stage=validate, status/count fields, audit-only boundary flags, and
next_stage=provider_request_external_genomes_handoff only when every row is
ready. It carries provider_route_groups when controlled route metadata is
present, so controllers can route without re-reading the parent payload. Ready
packets also carry source_priority_counts when upstream coverage priority is
available, and include compact recommended_request_target labels for
AI/controller routing. Blocked or failed validation packets keep
recommended_request=null, empty request-target labels, and an empty
recommended_next_command. Ready packets also include
recommended_command_plan, a non-executing commands plan companion for the
packet's recommended_request. The command-plan companion also repeats
recommended_request_target, so controllers can route without parsing the
nested request object. Because that request writes an isolated audit directory,
the companion remains blocked until an operator or parent agent explicitly
grants write allowance.
blocker_guidance maps each blocker code to an operator action, affected row
count, severity, and fixed no-download/no-provider/no-strict-deliverable
boundary flags so a controller can repair provider_request.tsv without
inferring fixes from prose.
Successful fully ready validation exits 0; schema/input/readiness blockers
exit 2; unexpected internal or write failures exit 1. Without --write,
the command writes nothing. With --write, it writes only
provider_request_validation_summary.json and
provider_request_validation_diagnostics.tsv into the explicitly supplied
directory. Existing output directories are refused by default; --force
replaces only an owned pair with matching schemas. The command remains
audit-only: it does not contact providers, accept terms, download genomes,
write workflow outputs, write external_genomes.tsv, mutate manifests, change
completion metrics, or promote strict scientific deliverables. A ready row
means only that local provider-request evidence is ready for external-genome
handoff review.
The isolated provider request to external-genomes draft adapter is:
typetreeflow provider-request external-genomes-draft --input <provider_request.tsv> [--provider-key <provider-key-or-alias> ...] [--base-dir <dir>] [--json] [--write --outdir <dir> [--force]]
It reads only the explicitly named provider_request.tsv plus local FASTA
files needed by the same validation guards used by
provider-request validate. Relative FASTA paths are resolved against
--base-dir, or against the input file parent when --base-dir is omitted.
Repeated --provider-key values filter a combined provider request file to
canonical provider keys or known aliases before validation and projection.
The command emits one compact JSON object and never echoes local FASTA paths,
SHA-256 values, provider notes, curator values, or sequence contents. Without
--write, it writes nothing. With --write, it writes only
external_genomes.tsv and
provider_request_external_genomes_summary.json into the explicitly supplied
directory. The JSON and summary include route counts for exported ready rows,
provider_status_counts, provider_automation_level_counts,
provider_route_groups, source_priority_counts, recommended_request for
external-genomes validate, plus install_plan_recommended_request for the offline external-genomes install-plan step. The install-plan recommended request includes write=true and
outdir=<isolated-install-plan-directory> so AI/operator controllers can
materialize the next audit directory explicitly; this is still only an
isolated-output write, not workflow-output mutation or download execution.
The draft row notes may carry controlled route metadata copied from the
provider request notes, including numeric source_priority for downstream
queue ordering; they must not copy raw provider notes or curator notes.
When --write succeeds, the recommended validation and install-plan requests
point to the just-written <dir>/external_genomes.tsv artifact instead of the
generic placeholder so the next local dry-run step can be rendered without
manual path reconstruction. The payload and written summary also include
provider_request_readiness_packet with stage=external_genomes_draft; it
sets next_stage=external_genomes_validate and exposes the validation and
install-plan recommended requests only when every provider request row was
exported. The packet retains provider_route_groups from the exported ready
rows. Ready packets also include recommended_command_plan for the
validation request and install_plan_recommended_command_plan for the
install-plan request, plus compact recommended_request_target and
install_plan_recommended_request_target labels. These companions are
metadata-only preflight results: they do not execute the request, and
write-oriented install-plan requests remain blocked until explicit write
allowance is supplied.
Existing output directories are refused by default; --force replaces only an
owned pair with matching schemas.
The command exits 0 only when every provider request row is ready and can be
rendered into the external-genomes schema. Input, schema, or readiness blockers
exit 2; unexpected internal or write failures exit 1. The output
external_genomes.tsv is a local handoff input for
external-genomes validate; it does not register external genomes, copy FASTA
files, contact providers, trigger downloads, mutate manifests, change
completion metrics, or promote strict scientific deliverables.
The isolated provider request external-genomes handoff bundle is:
typetreeflow provider-request external-genomes-handoff --input <provider_request.tsv> [--provider-key <provider-key-or-alias> ...] [--base-dir <dir>] [--json] [--write --outdir <dir> [--force]]
It reads the same explicit provider request TSV and local FASTA files, then
runs the local readiness validation and external-genomes draft projection in
one command. Without --write, it writes nothing. With --write, it writes
provider_request_validation/ under the supplied directory. It writes
provider_request_external_genomes/ only when every row is ready and can be
rendered as an external-genomes handoff draft. Blocked runs therefore preserve
validation diagnostics without creating a draft external-genomes directory.
Repeated --provider-key values apply to both bundled validation and
external-genomes projection, preserving provider-specific batch boundaries in
stdout and written summaries.
The command emits one compact JSON object and does not echo local FASTA paths,
SHA-256 values, provider notes, curator values, or sequence contents.
The handoff payload includes validation route counts so AI/operator controllers
can keep the provider-request route visible through the bundled handoff step.
When --write succeeds and the draft directory is created, the returned
recommended validation and install-plan requests point to
<dir>/provider_request_external_genomes/external_genomes.tsv, the concrete
child artifact in the isolated handoff bundle, and the top-level payload exposes
their compact recommended_request_target labels. Blocked handoff payloads
leave top-level recommended request fields empty. The payload also includes
provider_request_readiness_packet with stage=external_genomes_handoff; it
uses the same audit-only boundary fields and sets
next_stage=external_genomes_validate only when both validation and draft
projection passed.
The command exits 0 only when validation and external-genomes draft
projection both pass. Validation, schema, readiness, or path-safety blockers
exit 2; unexpected internal or write failures exit 1. The bundle is an
AI/operator convenience for isolated handoff directories only. It does not
register external genomes, copy FASTA files, contact providers, trigger
downloads, mutate manifests, change completion metrics, create workflow
outputs, or promote strict scientific deliverables.
For AI metadata routing, commands render accepts
{"command":"plan-provider-registration","provider_request":"provider_request.tsv","outdir":"run"}
and renders the current compatible argv form:
--plan-provider-registration <provider_request.tsv> --outdir <run>.
--plan-provider-registration itself emits one compact JSON object on stdout.
The payload reports request, plan, proposed external-genome, status, planned
action, blocker, and manual-review counts plus audit-only boundary fields
(downloads_triggered=0, providers_contacted=0, network_access=false,
manifest_mutated=false, strict_scientific_deliverable=false) and the
recommended next command for reviewing provider/proposed_external_genomes.tsv.
The isolated coverage pipeline adapter is:
typetreeflow coverage-pipeline preview [--checklist-tsv <species.tsv>] [--reconciler-audit-tsv <reconciler_audit.tsv>] [--completion-gaps-tsv <gaps.tsv>] [--external-genomes-tsv <external_genomes.tsv>] [--archive-candidates-tsv <archive_candidates.tsv>] [--expanded-discovery-results-tsv <expanded_discovery_results.tsv>] [--manual-supplement-hints-tsv <manual_supplement_hints.tsv>] [--provider-key <provider-key-or-alias> ...] [--queue-preview-limit <1..10>] [--queue-item-id <queue_item_id>] [--queue-operator-route <operator_route>] [--stage <operator_chain_stage>] [--expected-queue-snapshot-sha256 <sha256>] [--expected-operator-chain-snapshot-sha256 <sha256>] [--json]
typetreeflow coverage-pipeline build [--checklist-tsv <species.tsv>] [--reconciler-audit-tsv <reconciler_audit.tsv>] [--completion-gaps-tsv <gaps.tsv>] [--external-genomes-tsv <external_genomes.tsv>] [--archive-candidates-tsv <archive_candidates.tsv>] [--expanded-discovery-results-tsv <expanded_discovery_results.tsv>] [--manual-supplement-hints-tsv <manual_supplement_hints.tsv>] [--validate-provider-request [--provider-request-validation-base-dir <dir>]] [--curated-provider-request-tsv <provider_request.tsv>] [--provider-key <provider-key-or-alias> ...] [--external-genomes-install-target-outdir <dir>] [--queue-preview-limit <1..10>] [--queue-item-id <queue_item_id>] [--queue-operator-route <operator_route>] [--stage <operator_chain_stage>] [--expected-queue-snapshot-sha256 <sha256>] [--expected-operator-chain-snapshot-sha256 <sha256>] [--json] [--write --outdir <dir> [--force]]
typetreeflow coverage-pipeline status --coverage-pipeline-dir <dir> [--archive-candidates-dir <dir>] [--manual-review-import-dir <dir>] [--strict-gating-dir <dir>] [--provider-request-validation-dir <dir>] [--provider-request-external-genomes-dir <dir>] [--external-genomes-install-plan-dir <dir>] [--registration-run-dir <dir>] [--server-validation-result <coverage_handoff_server_validation_result.json>] [--queue-preview-limit <1..10>] [--queue-item-id <queue_item_id>] [--queue-operator-route <operator_route>] [--stage <operator_chain_stage>] [--expected-queue-snapshot-sha256 <sha256>] [--expected-operator-chain-snapshot-sha256 <sha256>] [--require-complete] [--json]
typetreeflow coverage-pipeline server-validation-result validate --input <coverage_handoff_server_validation_result.json> [--json]
typetreeflow coverage-pipeline server-validation-result review-queue (--input <coverage_handoff_server_validation_result.json> | --download-smoke-inspection-dir <bounded_download_smoke_inspection_dir>) [--json] [--write --out <download_smoke_review_queue.tsv> [--force]]
typetreeflow coverage-pipeline server-validation-result triage-queue --input <download_smoke_review_queue.tsv> [--json] [--write --out <download_smoke_review_queue_triage.tsv> [--force]]
typetreeflow coverage-pipeline server-validation-result quality-review-template --triage <download_smoke_review_queue_triage.tsv> [--json] [--write --out <download_smoke_quality_review_decisions.tsv> [--force]]
typetreeflow coverage-pipeline server-validation-result quality-review --triage <download_smoke_review_queue_triage.tsv> --decisions <download_smoke_quality_review_decisions.tsv> [--json] [--write --outdir <dir> [--force]]
coverage-pipeline preview, build, and status read only explicitly named
local TSV files or isolated audit directories, build or inspect the in-memory
acquisition worklist, coverage action plan, provider handoff, and provider
request draft, then emit one compact JSON object with lane, action,
provider-key,
provider-status, provider automation-level, and provider-request draft counts
plus worklist_candidate_provider_key_counts,
worklist_candidate_provider_status_counts,
coverage_next_action_groups, coverage_opportunity_summary,
provider_request_provider_batches, and
provider_request_validation_recommended_next_command plus
provider_request_external_genomes_recommended_next_command plus
provider_request_external_genomes_install_plan_recommended_next_command plus
external_genomes_registration_dry_run_recommended_next_command plus
provider_request_external_genomes_handoff_recommended_next_command plus
provider_request_recommended_next_command, their matching
*_recommended_request structured request drafts, matching
*_recommended_request_target compact command/subcommand labels, and bounded
*_recommended_command_plan no-dispatch planning companions. The same
companions are also collected in the stage-keyed coverage_stage_command_plans
map for controllers that prefer one contract field. When the structured request
uses an isolated pipeline child artifact such as
provider_request/provider_request.tsv, the matching recommended command is
rendered from that same request instead of reverting to a generic
<provider_request.tsv> placeholder, so file-based controllers can resume
without inferring paths from prose. provider_request_provider_batches
contains one audit-only item per provider key in the generated provider request
draft, including provider-key-filtered validation and external-genomes handoff
requests plus command plans. Each provider batch also carries route context
counts from the generated request rows, including provider status, automation
level, operator route, next input class, automation boundary, source action,
primary route/action labels, and booleans such as requires_provider_handoff
and metadata_review_only, so controllers can batch provider work without
parsing row-level notes. Handoff write plans remain blocked until explicit
write allowance is supplied. coverage-pipeline
preview, build, and status can also take
--stage <operator_chain_stage> and return
selected_operator_chain_stage, selected_operator_chain_stage_found, and
selected_operator_chain_stage_command_plan for a single explicit stage. They
also return selected_operator_chain_stage_route_context, including bounded
coverage-priority route counts when a selected audit stage exposes them, so
controllers can route public-archive review without parsing stage summaries. An
unknown stage is a compact JSON blocked result with
diagnostic_code=operator_chain_stage_not_found. Action
groups are sorted by priority and summarize action code, record count, source
lanes, provider keys, required inputs, a structured recommended_request draft,
and the recommended next command for AI/operator routing. Required inputs are
metadata-only evidence requirements copied from coverage-plan actions. The
coverage-pipeline preview and build commands also accept repeated
--provider-key <provider-key-or-alias> values to narrow the generated
provider-handoff and provider-request surfaces to provider-specific local
subsets while leaving the acquisition worklist and coverage action plan as
full-run audit context. Top-level coverage-pipeline payloads and summaries
preserve the canonical provider_key_filter, provider_key_filter_count, and
filtered values for file-based resume and audit.
request draft is also metadata only; operators should still pass it through
commands render, commands plan, or commands preflight before execution.
For provider handoff action groups, the request draft is a filtered
provider-handoff build request with the grouped provider keys, so controllers
prepare the bounded handoff before drafting provider requests.
Action groups also carry a bounded species list: species on
coverage_next_action_groups, and species_count, species_preview, and
species_truncated on the downstream compact summaries and packets. The preview
is capped and intended for routing the first review items, not for replacing the
source TSV files.
coverage_opportunity_summary is a compact derived view of those same action
groups with per-action provider automation-level counts, so an AI/operator can
see manual-review, public metadata-review, and planning-handoff pressure
without joining provider handoff rows manually. Each row also includes
controlled routing metadata: operator_route, next_input_class, and
automation_boundary. These fields classify the next local input or review
surface, such as curator decisions, public metadata linkage review, provider
handoff preparation, or external-registration review. They are not execution
authorization.
coverage_provider_route_opportunity_summary compresses the provider handoff
rows by provider_key, provider status, automation level, source action,
operator route, and next input class. It lists providers that currently require
planning_handoff separately from providers that only need public metadata
review, includes per-provider bounded species previews, and adds
priority_provider_route_items, a stable provider-first route list that ranks
provider handoff packages before metadata-only review pressure. It repeats
explicit no-download safety fields. It is for platform opportunity triage only
and does not contact providers or authorize unattended execution.
coverage_route_next_batch_packet derives from that provider route list and
exposes a bounded batch selector for AI/operator controllers. It reports the
first provider key, route priority, recommended operator action, required local
input artifact, structured recommended_request,
recommended_request_target, a metadata-only recommended_command_plan, up to
five batch items, and an operator-review gate for each item. The packet also
promotes the first item's command-plan decision, preflight decision, target
argv, and blocker/warning IDs for controllers that need a compact handoff.
For provider handoff route items, the recommended request is a filtered
provider-handoff build request with provider_keys containing the selected
provider key, so controllers can prepare one bounded provider-specific handoff
before drafting provider requests. Those route items also expose
recommended_write_request_template with write=true and an
operator-supplied <isolated-provider-handoff-directory> outdir, plus a
matching allow-write command-plan preview. The write template is a handoff
convenience only: it does not dispatch, does not choose the real outdir, and
does not replace the packet's default no-write recommended_request.
Controllers can inspect the recommended request through commands render,
commands plan, or commands preflight before invoking any local CLI. It is a
planning packet for local review or handoff preparation only; it does not
dispatch commands, contact providers, download genomes, mutate manifests, or
write strict deliverables.
coverage_action_queue is the same opportunity set in stable queue order with
a one-based queue_position, deterministic queue_item_id, bounded route booleans such as
requires_curator_input, requires_public_metadata_review,
requires_provider_handoff, and requires_external_registration_review, plus
safe_for_unattended_download=false, operator_execution_gate, and
review_input_packet on every row. The selected packet, operator recipe, queue
resume packet, preview items, and controller queue candidates also expose
next_input_package, a compact metadata-only summary of the next input schema,
artifact, field/status counts, route, and recommended request target. The queue is for
AI/operator prioritization only; it does not grant unattended download or
provider access. coverage_action_queue_summary reports bounded queue counts
by operator_route, next_input_class, execution-gate status, and review-input
schema, plus recommended-request target counts such as manual-review validate
or provider-handoff build, and route-specific counts such as
manual_or_curator_input_required_count, public_metadata_review_required_count, and
provider_handoff_required_count. current_coverage_action_queue_item
copies the first queued item or an empty object when no coverage action remains.
coverage_acquisition_readiness_summary is a compact acquisition-facing
classification of the same signals. It reports bounded
readiness_signal_counts for download_ready_ncbi,
external_genome_handoff_ready, provider_handoff_only,
public_metadata_review, curator_review, true_gap, and other_review.
It also emits recommended_acquisition_route, recommended_next_action, and
recommended_next_command as compact routing hints, prioritizing bounded NCBI
smoke readiness, reviewed external-genome handoff readiness, provider handoff,
public metadata review, curator review, and then true gaps.
recommended_next_command is populated only for an existing local/offline
handoff command such as download-smoke prepare, external-genomes install-plan, or provider-request draft; review-only routes leave it empty
instead of implying that scientific review can be automated by a command.
These counts are readiness signals, not strict species totals; the summary sets
counts_are_exclusive=false when downstream external-genome handoff signals are
also present. The summary is audit-only and always preserves
safe_for_unattended_download=false, downloads_triggered=0,
providers_contacted=0, manifest_mutated=false, and
strict_scientific_deliverable=false. Public metadata, BioSample, BacDive, or
provider-handoff rows do not become NCBI downloads or strict deliverables.
coverage_operator_route_summary groups the same queue by operator_route,
preserving first queue item IDs, first recommended request targets, per-route
record counts, next-input class counts, automation-boundary counts, and route
booleans for curator, public-metadata, provider-handoff, and external-registration
review. It is for AI routing and does not authorize unattended execution.
coverage_controller_packet combines the queue route summary, selected queue
resume packet, operator-chain stage readiness summary, and operator-chain resume
packet into one compact controller handoff. It reports which decision surfaces
are available, the first queue route and item, queue and operator-chain digest
guards, current command targets, per-candidate route_context, and explicit
no-execution safety fields. Queue candidates repeat next_input_package so a
controller can choose the next local input surface without expanding the full
review-input field list.
coverage_controller_resume_packet derives a first-candidate resume guard from
the controller packet. It repeats the selected source, target argv, route
context, next input package, digest guard summary, and
required_before_resume checklist in one object for server or AI parent
controllers; it is metadata only and still requires normal planning, preflight,
and operator approval before any execution.
coverage_controller_step_summary is the compact multi-candidate companion:
it lists each controller candidate's priority, source, handoff kind, target
argv, preflight decision, blocker/warning counts, snapshot match flag, and
route-context labels without copying the full nested candidate payloads.
coverage_controller_preflight_handoff_packet wraps the first candidate's
target argv as a commands preflight --argv-json ... request so a server or AI
parent controller can run the local preflight gate before dispatch. It repeats
candidate and controller blockers, but it does not execute the target command
or authorize execution after preflight.
When coverage-pipeline build --write publishes an isolated pipeline
directory, it also writes coverage_next/next_input_package.json, a compact
handoff file that freezes the current queue item, review-input packet, command
plan, operator recipe, queue resume packet, and queue digest guard. The file is
for AI/operator resume and review only; it does not dispatch commands, contact
providers, download genomes, mutate workflow outputs, or promote strict
deliverables. Provider-handoff queue items may also include a
recommended_write_request_template and recommended_write_command_plan for a
local provider-handoff build --write --outdir <isolated-provider-handoff-directory>
handoff; this is still a preflighted template, not automatic provider contact or
download. coverage-pipeline status reports
coverage_next_input_handoff_artifact_packet with the file path, size,
SHA-256, selected queue labels, and a handoff_matches_embedded_packet guard so
controllers can fail closed if the saved handoff no longer matches the stored
pipeline summary. It also preserves provider request record/status/key-count
fields plus provider_request_provider_batch_count and
provider_request_provider_batches from the stored build summary, including the
route context fields used to batch provider handoff and public metadata review
without reparsing provider request rows.
coverage_parent_controller_packet is the top-level parent-controller
envelope. It repeats the controller status, step summary, first controller
candidate, preflight argv, provider/external handoff next step, server
validation status/runbook summary, result contract/template summary, and the
recommended surface to inspect next. In coverage-pipeline status, it also
summarizes the written server-validation result-template artifact path, SHA-256,
template-match flag, and validator argv when that isolated artifact exists. If
--server-validation-result is supplied, it also summarizes the explicit
server-validation result artifact path, SHA-256, result status, validation
status, and diagnostic count.
It is metadata only:
target_command_execution_authorized=false,
safe_for_unattended_execution=false, and provider contact, downloads,
workflow-output writes, manifest mutation, external-genomes registration, and
strict deliverable promotion remain disabled.
coverage_controller_inspection_summary is the bounded index over the parent
controller, controller, step-summary, preflight, handoff-next-step, handoff
server-validation packet/runbook/result-contract/result-template, the optional
written result-template artifact status packet, the optional explicit
server-validation result artifact status packet, and route-batch packets. It
lists each surface's availability, schema version, target argv, blocker IDs,
warning IDs, and execution boundary so a parent process can inspect one compact
table before expanding nested packets. It is also metadata only and does not
authorize target command execution.
coverage_controller_runbook_packet converts the parent-controller
recommendation and inspection summary into an ordered metadata-only checklist
for parent processes: inspect controller surfaces, inspect the recommended
surface, and, when present, run only the commands plan or commands preflight metadata gate. Its stop conditions include controller blockers,
snapshot or digest mismatches, preflight blocks, missing operator approval, and
any target command that would contact providers or download genomes.
queue_item_id is derived from the current queue position and action code so
controllers can trace the same item across packet, recipe, preview, and status
payloads without inventing their own keys.
coverage_priority_summary is a shorter AI/operator dashboard over the same
queue. It reports total actionable records, the top action code, top route, top
next-input class, up to three top queue items, record-count maps by route and
next-input class, execution-gate status record counts, review-input schema
record counts, recommended-request target record counts, provider
automation-level record counts, and
automation_boundary=prioritization_only_no_execution. Each top queue item
also carries its compact operator_execution_gate and review_input_packet.
It also includes a compact recommended_request_target. It is prioritization
metadata only and does not authorize provider access, downloads, registration,
manifest mutation, or strict completion.
coverage_next_task_packet is the single current-task packet derived from the
first queued item, or from the stable queue item selected by
--queue-item-id <queue_item_id>, or from the first queued item matching
--queue-operator-route <operator_route>. It repeats the action code, route,
next-input class, required inputs, structured recommended_request,
compact recommended_request_target, recommended command, and explicit
no-execution safety fields so AI controllers can pass the request through
commands render, commands plan, or commands preflight before any local
operator action. It is metadata only and
always reports safe_for_unattended_download=false. It also carries
operator_execution_gate, a compact metadata-only gate with gate_status,
has_recommended_request, required_before_execution,
requires_operator_review, safe_for_unattended_execution=false, and explicit
download/provider/manifest denials. Unknown queue item IDs are refused with
diagnostic_code=queue_item_id_not_found and exit code 2; unknown operator
routes are refused with diagnostic_code=queue_operator_route_not_found. If
both queue selectors are supplied, the item ID must belong to the requested
operator route or the call is blocked with
diagnostic_code=queue_item_operator_route_mismatch.
coverage_next_command_plan and coverage_next_operator_recipe echo the
planned target command's recommended_request_target and output_contracts so
controllers can route readiness or handoff packets without a separate catalog
lookup.
coverage_stage_readiness_summary is a compact, stable view of the same stage
chain for AI routing. It repeats stage counts, available and unavailable stage
names, the first unavailable stage, the next stage's compact
recommended_request_target, command-plan and preflight decisions, and blocker
or warning IDs. Its nested stage_blocker_summary lists blocked stages, their
required local inputs, recommended request targets, matching command-plan keys,
argv previews, and boundaries so controllers can plan missing handoff work
without expanding every stage row. It is metadata only and always reports no
unattended execution, provider contact, downloads, workflow writes, manifest
mutation, or strict scientific deliverable promotion.
commands recognize, commands plan, and commands preflight also declare
the coverage-pipeline stdout contracts for coverage_next_task_packet,
coverage_next_command_plan, coverage_stage_command_plans,
coverage_stage_readiness_summary,
coverage_provider_route_opportunity_summary,
coverage_route_next_batch_packet, coverage_next_operator_recipe,
coverage_queue_resume_packet, coverage_operator_queue_preview, and
coverage_operator_route_summary, plus the controller packet, parent-controller,
controller-inspection, server-validation result-contract/template, and
operator-chain packets when present. operator_chain_resume_packet is the compact counterpart
to operator_chain_next_step_packet: it carries the next stage, command target,
rendered argv, command-plan/preflight decisions, blocker IDs, and
resume_with_expected_operator_chain_snapshot_sha256 digest guard for later
metadata calls. It is still a no-execution handoff.
The packet also includes review_input_packet, a bounded local-input handoff
for the selected action. For manual-review actions it names the
manual_review.v1 schema, required manual-review TSV fields, allowed
manual-review statuses, and the evidence focus, such as public archive
accession-to-type-strain linkage or conflict resolution. Provider-handoff and
external-registration actions name their existing local TSV schemas instead.
This packet is review metadata only: it always reports no downloads, no
provider contact, no workflow-output writes, no manifest mutation, and no strict
scientific deliverable.
Controllers can also pass --expected-queue-snapshot-sha256 <sha256> with the
previously observed coverage_operator_queue_preview.queue_snapshot_sha256.
If the current queue digest differs, the command refuses the stale resume
attempt with diagnostic_code=queue_snapshot_mismatch and exit code 2.
Controllers can similarly pass
--expected-operator-chain-snapshot-sha256 <sha256> with a previously observed
operator_chain_snapshot_sha256. If the current operator-chain stage digest
differs, the metadata call refuses the stale handoff with
diagnostic_code=operator_chain_snapshot_mismatch and exit code 2.
coverage_next_command_plan is a no-dispatch planning companion for that
packet. It renders the packet's structured recommended_request, records the
compact recommended_request_target, target argv, embeds the commands preflight decision, and repeats the
no-download/no-provider/no-manifest-mutation boundary fields. It is metadata
only: decision=allow means the rendered argv passed the local preflight gate,
not that TypeTreeFlow executed the command or authorized provider access,
downloads, workflow mutation, or strict deliverable promotion.
coverage_next_operator_recipe wraps the same packet and command plan as a
bounded three-step operator recipe: review required local inputs, inspect the
command plan, then invoke the target CLI separately only after review. It always
repeats the selected review_input_packet, operator_execution_gate, and
recommended_request_target, reports safe_for_unattended_execution=false, and
execution_boundary=metadata_only_operator_recipe_no_execution.
coverage_queue_resume_packet is a compact AI/controller handoff view over the
selected queue item. It repeats the selected queue_item_id, current queue
snapshot digest, expected digest, digest match state, target argv, command-plan
status, preflight decision, blocker/warning IDs, output_contracts,
output_contract_names, output_contract_count,
output_contract_summary_fields, output_contract_summary_field_count,
review_input_packet, operator_execution_gate,
recommended_request_target, and the exact values to reuse as
--queue-item-id and
--expected-queue-snapshot-sha256 on a later metadata call. It is still
metadata only:
execution_boundary=metadata_only_queue_resume_packet_no_execution.
coverage_operator_queue_preview extends that no-execution view to a bounded
set of queue items. By default it previews the first three items; operators can
pass --queue-preview-limit <1..10> to preview, build, or status to
request a larger or smaller bounded preview. It lists each item's
queue_item_id, route, required inputs, review_input_packet,
operator_execution_gate, compact recommended_request_target, rendered argv,
preflight decision, and
safe_for_unattended_execution=false, with
truncated=true when additional queue items exist. Each item also carries
compact command-plan diagnostics:
command_plan_status, blocking_count, blocking_ids, warning_count, and
warning_ids, plus compact output-contract routing metadata:
output_contracts, output_contract_names, output_contract_count,
output_contract_summary_fields, and
output_contract_summary_field_count. These fields make blocked preview items
routeable without copying diagnostic messages or requiring a separate
command-catalog lookup. The preview object also includes
preview_output_contract_names, preview_output_contract_counts,
preview_output_contract_count, preview_output_contract_summary_fields,
preview_output_contract_summary_field_counts, and
preview_output_contract_summary_field_count, which summarize output-contract
routes and summary fields across the bounded preview prefix. It also includes
preview_operator_route_counts, preview_next_input_class_counts,
preview_command_plan_status_counts, preview_command_plan_decision_counts,
preview_execution_gate_status_counts, preview_blocking_item_count,
preview_blocking_item_ids,
preview_warning_item_count, and preview_warning_item_ids, so controllers can
route the preview prefix without expanding every item first. It includes
queue_snapshot_sha256, a deterministic
digest of the current coverage action queue metadata, and preview_item_ids,
the item IDs included in the bounded preview. Controllers can compare the
digest before resuming a previously inspected queue. Passing --queue-item-id
or --queue-operator-route selects the current
packet, command plan, recipe, and current_coverage_action_queue_item, but it
does not change this bounded preview prefix. It is a routing preview, not a
queue runner.
coverage_operator_route_summary is the full queue's route-level counterpart:
it groups records by route and keeps compact first-item and target metadata so
an AI/controller can decide which review surface to handle next without
scanning every queue row.
coverage_controller_packet is the shortest combined handoff: it lists
available decision surfaces, queue, route-batch, and operator-chain statuses,
current command targets, snapshot match booleans, and ordered
controller_step_candidates in one object while preserving the same
no-execution boundaries. Each controller candidate repeats only compact source,
target argv, digest guard, blocking, warning, and route_context metadata from
the queue, route-batch, or operator-chain handoff; it is not execution
authority. The route context carries operator-route / next-input-class metadata
or provider route groups when available, plus a
first_controller_step_route_context convenience copy. Queue-derived controller
fields also include coverage_queue_next_input_package, route-batch controller
fields include the first provider key and first target argv, and the first
candidate is copied to first_controller_step_next_input_package, so
controllers can read the next local input schema and artifact without expanding
candidate internals.
The packet also exposes
controller_status, controller_decision,
and aggregate blocker/warning IDs so controllers can fail closed without
expanding every candidate. Its nested controller_digest_guard_summary
collects queue and operator-chain snapshot fingerprints plus mismatch sources
so resume automation can reject stale controller context before rendering or
executing any command. That digest summary is also repeated by
coverage_controller_resume_packet, which provides the first candidate's
resume selector, expected snapshot digest, command target, route context, and
required-before-resume checklist without authorizing dispatch.
coverage_controller_step_summary provides the same candidates as a bounded
table-like summary for dashboards and parent controllers that only need triage
metadata.
coverage_controller_preflight_handoff_packet provides a preflight-specific
handoff for the first candidate, including target_argv_json, the exact
metadata-only preflight_argv, and a required_before_preflight checklist;
target_command_execution_authorized is always false.
coverage_parent_controller_packet is the one-object parent/AI/server
envelope over the controller surfaces. It names the recommended next surface
(coverage_controller_preflight_handoff_packet when available, otherwise the
provider/external coverage_handoff_next_step_packet), repeats the selected
argv, carries a required_before_action checklist, includes server-validation
result contract/template status fields for parent agents, and keeps
recommended_execution_mode=operator_review_required unless no action remains.
It is not a dispatcher and does not authorize target command execution.
coverage_controller_inspection_summary is the companion inspection index for
parent processes that need to validate which handoff surfaces are present
before choosing one to expand. It reports available, blocking, and warning
surface names plus a fixed surfaces list, but it remains
metadata_only_controller_inspection_no_execution.
coverage_controller_runbook_packet is the companion ordered checklist for
parent processes. It repeats the recommended surface and argv, lists the
metadata-only steps to inspect and preflight it, and carries explicit stop
conditions. The runbook is not a dispatcher and does not authorize target
command execution.
Opportunity summary rows and queue rows also carry recommended_request, the
same structured request draft used by commands render and commands plan;
controllers must still run normal planning or preflight before executing any
rendered argv.
The payload also exposes primary_next_action_group,
primary_action_required_inputs, primary_action_recommended_request,
primary_action_recommended_request_target, and
primary_action_recommended_next_command as convenience copies from the first
sorted action group.
operator_chain_stages is a bounded AI/operator checklist for the same local
chain. Each row reports stage, artifact, available, record_count,
recommended_request_target, recommended_next_command, and boundary; it is
metadata only and does not discover files outside the explicit pipeline inputs
or output directory. coverage-pipeline <preview|build|status> --stage <operator_chain_stage> selects one row by exact stage name and emits a matching
selected_operator_chain_stage_command_plan using that row's structured
recommended_request. This stage selection is metadata-only: it does not
dispatch the rendered command, write outputs, contact providers, download
genomes, mutate manifests, or grant completion credit.
The external-genomes draft recommendation points to the explicit local handoff
step after provider-request validation, and the install-plan recommendation
points to the local planning step before registration dry-run. The separate
external_genomes_registration_dry_run_recommended_request and matching next
command point to a later dry-run --register-external-genomes review. The
coverage-pipeline external-genomes validate, install-plan, and registration
dry-run requests use
provider_request_external_genomes/external_genomes.tsv, the explicit child
artifact path from the same isolated pipeline directory. The structured
requests are compatible with commands render / commands plan, but rendering
them remains planning metadata only. None of these requests are automatic
registration or download execution. preview never writes files.
build --validate-provider-request runs the same local provider-request
validation guards on the generated draft. It only checks local TSV fields and
optional local FASTA paths; it does not contact providers, download genomes, or
copy FASTA. With --write, the validation audit pair is written under
provider_request_validation/ inside the isolated pipeline directory, so
coverage-pipeline status can inspect the next stage without a separate
adapter run. build --curated-provider-request-tsv <provider_request.tsv>
instead validates the explicit curator-completed provider request TSV and, when
all rows pass, writes provider_request_external_genomes/ as the local draft
for later external-genomes validate / external-genomes install-plan. It
still writes the generated provider_request/ draft for traceability, and it
does not treat that draft as curator-completed. Repeated
--provider-key <provider-key-or-alias> values filter the curated provider
request validation and external-genomes draft to the same provider-specific
local subset; they do not contact providers or download genomes.
build --external-genomes-install-target-outdir <dir> can then write
external_genomes_install_plan/ from the same validated external-genomes draft
inside the isolated pipeline directory. The target directory is used only to
compute future installed paths; the pipeline does not create it, copy FASTA, or
register genomes. build --write writes only
isolated acquisition_worklist/, coverage_plan/, provider_handoff/,
provider_request/, optional provider_request_validation/, optional
provider_request_external_genomes/, optional
external_genomes_install_plan/,
server_validation/coverage_handoff_server_validation_result_template.json,
and coverage_pipeline_summary.json members under the explicitly supplied
directory. Existing output directories are
refused by default; --force replaces only an owned coverage-pipeline
directory with matching schemas.
When --archive-candidates-tsv points at a complete archive-candidates audit
TSV, build --write also publishes the standard archive_candidates/ triplet
inside the isolated coverage-pipeline directory so later
--coverage-pipeline-dir handoffs can see it without an extra path. If the
archive audit can render manual-review skeleton rows, the same directory also
keeps archive_candidates/manual_review.tsv; that template is incomplete and
does not represent a completed review decision. status exposes that template
as the archive_candidates stage required_inputs and recommends
manual-review validate --input archive_candidates/manual_review.tsv. If the
archive audit instead renders rows whose next local step is public accession or
metadata repair, the same directory keeps
archive_candidates/archive_candidates_input_template.tsv; status exposes
that editable archive-candidate input template and recommends rerunning
archive-candidates build --input-tsv archive_candidates/archive_candidates_input_template.tsv after local edits.
When --stage archive_candidates selects that stage, the
selected_operator_chain_stage_route_context also carries the same
input_template_* request and command fields so controllers do not need to
parse nested stage summaries.
If explicit or conventional manual_review_import/ or strict_gating/
directories are present, status adds read-only operator stages for those
audit triplets. These stages report accepted decision, strict-gate, blocker,
and audit-only counts without invoking manual-review import,
strict-gating evaluate, or any workflow mutation.
status reads only the explicitly supplied isolated coverage-pipeline summary,
conventional downstream child directories under that same explicit pipeline
directory, and optional downstream directory overrides. When
archive_candidates/ exists under the explicit coverage-pipeline directory or
--archive-candidates-dir <dir> is supplied, it may add a passive
archive_candidates operator-chain stage from the existing
archive_candidates.tsv, archive_candidates_summary.json, and
archive_candidates_diagnostics.tsv triplet. The stage carries bounded counts
only, including archive source, coverage-priority route, accession kind, and
review input class counts; it also preserves the bounded
coverage_priority_route_summary from the child summary. It does not query
public archives, download genomes, create external_genomes.tsv, or change
strict evidence. It then re-emits
operator_chain_stages, the current unavailable stage, the compact
recommended_request_target, and the recommended next command as compact JSON.
It also preserves top-level provider automation counts from
coverage_pipeline_summary.json as
provider_automation_level_counts and
provider_request_automation_level_counts, and preserves
coverage_opportunity_summary for routing. It also emits
coverage_handoff_readiness_summary, a compact provider/external-genomes chain
view with handoff stage names, available/unavailable stage counts, the next
local stage, required inputs, recommended request target, record counts by
stage, and explicit no-provider/no-download safety fields. Each stage row and the derived next_stage
include required_inputs, a bounded list of local artifact paths or
curator-supplied input categories needed before that stage can be treated as
available. Stage rows also include recommended_request, a structured
commands render/commands plan request object when a deterministic next CLI
request exists; otherwise the value is null. The compact
recommended_request_target repeats the command/subcommand target, or an empty
string when no structured request exists. These request objects are metadata
only and must still pass commands plan or commands preflight before an
operator runs the rendered argv. The same commands emit
coverage_handoff_next_step_packet, which renders the next provider/external
handoff request into a metadata-only command plan with target argv,
preflight decision, blocker/warning IDs, and provider/download/registration
guards. It is a local handoff planning packet only; it does not contact
providers, register external genomes, copy FASTA files, or authorize execution.
coverage_handoff_input_readiness_packet classifies the next handoff stage's
required inputs as pipeline artifacts, operator-supplied context, curator or
local evidence, or workflow target outdir placeholders. It does not read the
filesystem; it gives parent/server controllers a stable no-execution checklist
for deciding whether bounded local validation is possible or operator input is
still required. When the next stage is a blocked external-genomes install-plan
with a local repair queue, coverage_handoff_readiness_summary,
coverage_handoff_next_step_packet, and
coverage_handoff_input_readiness_packet all expose the bounded
next_stage_repair_queue plus an external-genomes repair-template
recommendation for producing an isolated editable repair TSV from the explicit
external_genomes.tsv input.
coverage_handoff_runbook_packet is the ordered metadata-only checklist for
that provider/external handoff. It starts by inspecting
coverage_handoff_readiness_summary, then the input-readiness packet, then the
next-step packet, and only then points at the commands plan or commands preflight metadata gate. Its stop conditions require fail-closed behavior for
a complete chain, unavailable next stage, missing local input, blocked metadata
gate, missing operator approval, or any target command that would contact
providers or download genomes.
coverage_handoff_server_validation_packet combines the handoff next-step,
input-readiness, and runbook packets for parent/server controllers. It reports
whether the handoff is blocked, still needs operator input, or is ready for
bounded local validation, and lists only metadata-gate actions. It does not
probe the filesystem, validate artifacts, execute the target command, contact
providers, download genomes, or authorize strict deliverables.
coverage_handoff_server_validation_runbook_packet converts that server-facing
summary into a short ordered checklist: inspect the server-validation packet,
inspect the handoff runbook, and, only when argv exists, run a commands plan
or commands preflight metadata gate. It remains metadata-only and still
stops before filesystem artifact validation, provider contact, downloads, or
target command execution.
coverage_handoff_server_validation_result_contract_packet declares the
expected bounded-validation result shape for a parent/server handoff. It lists
required result fields, checked surfaces, accepted status labels, and boundary
confirmations, but it does not write a result, validate artifacts, dispatch the
target command, or authorize server execution.
coverage_handoff_server_validation_result_template_packet adds a
schema-shaped, fail-closed coverage_handoff_server_validation_result.json
template for that result contract. The embedded template defaults to
status=blocked and repeats the no-execution boundary confirmations so a
server agent can fill an authorized bounded-validation result without guessing
field names. It also carries result_validation_recommended_request,
result_validation_recommended_argv, and
result_validation_expected_output_schema_version for the local
coverage-pipeline server-validation-result validate shape validator. It
also includes optional observed external-registration realization fields
(external_genomes_registration_realized,
external_genomes_registration_manifest_available,
external_genomes_registration_manifest_record_count,
external_genomes_registration_external_manifest_record_count, and
external_genomes_registration_install_succeeded_count) so an explicitly
authorized bounded server inspection can report whether the target workflow run
already contains external registered manifest rows. These are result-observation
fields only; external_genomes_registration_applied remains a no-execution
boundary confirmation and must stay false. The template remains metadata-only
and does not validate artifacts, write files, dispatch target commands, contact
providers, or download genomes.
coverage-pipeline status also emits top-level external-registration
realization fields and keeps top-level external_genomes_registration_applied
fixed to false, so compact status readers can distinguish observed local
registration from applying a scientific or workflow gate.
When coverage-pipeline status is pointed at an isolated build directory, it
also emits coverage_handoff_server_validation_result_template_artifact_packet
for the written
server_validation/coverage_handoff_server_validation_result_template.json
member when present. That packet reports the artifact path, relative path,
size, SHA-256, result schema/status, whether the file still matches the
currently computed embedded template, and an argv-ready validator command for
the explicit JSON path. Missing or stale template artifacts are reported inside
that packet; status inspection does not execute the target command, perform
server validation, contact providers, download genomes, or mutate workflow
outputs.
The server-validation packet, runbook, result contract, and result template also
mirror the structured recommended_request from the handoff next-step packet
when one exists, so commands render and commands plan can inspect or
preflight the same request without parsing argv or executing it.
They also carry by-stage provider-status and provider automation-level count
maps from the handoff chain. These fields are route context for bounded server
validation only; they are not completion metrics, strict deliverable evidence,
or authorization to contact providers.
coverage-pipeline server-validation-result validate --input <json> is the
matching local result-shape validator for a filled
coverage_handoff_server_validation_result.json. It reads only that explicit
JSON file, checks required fields, accepted statuses, checked surfaces, and
no-execution boundary confirmations, and emits one compact JSON object. It
returns exit 0 for a contract-valid result, exit 2 for usage, input,
schema, or boundary validation problems, and exit 1 for unexpected internal
errors. The command contract exposes stable summary fields for validation
status, result status, checked-surface count, boundary confirmation status,
diagnostic count, optional source commit, TypeTreeFlow version, runtime Python,
evidence run path, check count, failed count, optional observed
external-registration realization fields, optional bounded download-smoke
inspection observation fields, and no-execution boundary flags. The optional
download-smoke fields use the download_smoke_inspection_ prefix and can carry
the explicit server-side inspection summary SHA-256, realized/ready booleans,
the active inspection quality_profile, whether fragmented-FASTA and
FASTA-header keyword blockers were enabled,
selected row and ZIP/FASTA presence counts, and the bounded FASTA quality-gate
hit counts for N50, record count, total bases, longest record, fragmentation
signals, FASTA header keyword rows, and installable genome FASTA ready/not-ready
counts. It may also carry controlled installable genome FASTA fragmentation
signal counts, installable FASTA header keyword row counts, installable genome
FASTA not-ready reason counts, quality-gate passed/blocked row counts, a
controlled blocker-count map, high-quality assembly-metadata local FASTA
readiness and blocker counts, controlled quality-gate recommendation
labels/reasons, and controlled bounded-smoke next-action labels/reasons.
It also emits download_smoke_next_action,
download_smoke_next_action_reasons, and download_smoke_next_action_source
as controlled AI/operator routing hints derived from the validated result
itself. Those fields may ask the operator to fix the result, run a bounded
download-smoke inspection, review local FASTA quality blockers, or review
validated bounded-smoke outputs. It does not carry local recommended
quality-gate command paths.
When high-quality assembly metadata rows are blocked by local FASTA quality
gates, it also emits download_smoke_review_queue,
download_smoke_review_queue_count, and
download_smoke_review_queue_preview_truncated. The queue is derived only from
the bounded-smoke blocked preview and contains at most five rows with record
ID, accession, assembly metadata, row status, controlled blocker codes, and
recommended_action=review_local_fasta_quality_blockers. It does not include
ZIP paths, raw FASTA headers, sequence text, provider payloads, or any
authorization to rerun downloads.
coverage-pipeline server-validation-result review-queue is the matching
offline export adapter for that queue. It accepts exactly one source:
--input <coverage_handoff_server_validation_result.json> or
--download-smoke-inspection-dir <bounded_download_smoke_inspection_dir>. The
inspection-dir path reads only bounded_download_smoke_inspection_summary.json
from that explicit directory and derives the same queue fields. By default the
command emits compact JSON and writes nothing. With --write --out <tsv>, it
writes a single explicit TSV using fields record_id, assembly_accession,
assembly_level, refseq_category, quality_tier, status,
fasta_quality_gate_blockers, and recommended_action; valid inputs with no
queued rows write a header-only file. The command validates the source first,
returns exit 2 without writing when that source is invalid, returns exit 1
for output-path or write failures, and only allows --force to replace an
existing TSV whose header matches this schema. It remains a local handoff
export and does not inspect ZIP files, execute downloads, contact providers,
mutate workflow outputs, install genomes, or change strict scientific status.
When the queue TSV is written successfully, stdout also includes
triage_queue_recommended_request_target,
triage_queue_recommended_request, and a renderable
triage_queue_recommended_next_command for the matching local triage step.
coverage-pipeline server-validation-result triage-queue --input <tsv> is the
matching offline adapter for the exported review queue TSV. By default it emits
compact JSON and writes nothing. With --write --out <tsv>, it writes a single
explicit TSV using the review queue fields plus triage_status,
triage_reason, recommended_next_step, and strict_upgrade_applied. Valid
empty queues write a header-only file. Every generated row uses
triage_status=local_fasta_quality_review_required; triage_reason echoes the
controlled blocker codes, and recommended_next_step is a controlled
AI/operator routing hint such as review_fragmentation_signal,
review_fasta_header_fragment_keywords, or
review_fragmentation_and_header_keywords. The command returns exit 2
without writing for invalid queue TSV input, returns exit 1 for output-path
or write failures, and only allows --force to replace an existing TSV whose
header matches this schema. When the triage TSV is written successfully, stdout
also includes quality_review_template_recommended_request_target,
quality_review_template_recommended_request, and a renderable
quality_review_template_recommended_next_command for the optional template
step. It remains local triage visibility only: it does not inspect ZIP files,
read FASTA payloads, execute downloads, contact providers, mutate workflow
outputs, install genomes, accept genomes for final use, or change strict
scientific status.
coverage-pipeline server-validation-result quality-review-template --triage <tsv> is the optional offline adapter for creating a decision TSV skeleton
from that triage file. By default it emits compact JSON and writes nothing.
With --write --out <tsv>, it writes only the explicit TSV path using fields
record_id, assembly_accession, quality_review_decision,
decision_reason_code, reviewer_id, and reviewed_at. Decision fields are
intentionally blank; this file is a template, not a completed review. It does
not accept rows for bounded smoke, final use, strict status, manifest mutation,
downloads, provider access, or workflow output changes. Output write failures
return exit 1; --force may replace only an existing TSV with the same
decision-template header. When the template is written successfully, stdout
also includes quality_review_recommended_request_target,
quality_review_recommended_request, and a renderable
quality_review_recommended_next_command for the later completed review import.
coverage-pipeline server-validation-result quality-review --triage <tsv> --decisions <tsv> is the matching offline import adapter for completed
FASTA-quality review decisions. The triage TSV must use the
download_smoke_review_queue_triage.tsv schema. The decisions TSV must use
fields record_id, assembly_accession, quality_review_decision,
decision_reason_code, reviewer_id, and reviewed_at. Allowed decisions are
bounded_smoke_quality_accepted, bounded_smoke_quality_rejected,
needs_manual_fasta_quality_review, and needs_bounded_smoke_rerun. Allowed
reason codes are header_keywords_false_positive,
fragmentation_signal_false_positive, fragmented_or_scaffold_like_fasta,
insufficient_quality_evidence, and rerun_required. The command requires
one exact linked decision for every triage row, rejects duplicate or unlinked
decisions, requires controlled reviewer identifiers and YYYY-MM-DD review
dates, and returns exit 2 without writing for validation failures. By default
it emits compact JSON and writes nothing. With --write --outdir <dir>, it
writes download_smoke_quality_review.tsv,
download_smoke_quality_review_summary.json, and
download_smoke_quality_review_diagnostics.tsv under only that explicit
isolated directory. Output write failures return exit 1; --force may
replace only an existing schema-matching quality-review triplet. A
successful write also emits report_only_recommended_request,
report_only_recommended_request_target,
report_only_recommended_next_command, package_results_recommended_request,
package_results_recommended_request_target, and
package_results_recommended_next_command so AI controllers can surface the
explicit audit triplet through report-only or package-results without guessing
the handoff flags. Dry-run and failed validation leave those recommendation
fields empty. A
bounded_smoke_quality_accepted decision means the local bounded-smoke quality
review accepted that row for bounded-smoke follow-up only. It does not accept a
genome for final use, install FASTA files, mutate workflow outputs, change
completion or strict status, authorize downloads, or promote strict scientific
deliverables.
Passing this validator does not execute the target command, validate
filesystem artifacts, contact providers, download genomes, mutate manifests,
register external genomes, or promote strict scientific deliverables.
coverage-pipeline status --server-validation-result <json> can attach that
same explicit result JSON to the pipeline status payload as
coverage_handoff_server_validation_result_artifact_packet. The packet reports
the result path, SHA-256, schema/status, checked-surface count, boundary count,
optional source commit, TypeTreeFlow version, runtime Python, evidence run
path, check count, failed count, optional observed external-registration
realization fields, optional bounded download-smoke inspection observation
fields including the active inspection quality profile and quality-gate blocker
switches, high-quality assembly-metadata FASTA blocker summaries, bounded
smoke next-action labels/reasons, safe high-quality blocked preview rows, the
derived high-quality FASTA-quality review queue, and validation diagnostics.
Invalid explicit results make status fail
closed; omitting the option leaves the packet at status=no_action.
The parent controller also exposes
handoff_server_validation_download_smoke_next_action,
handoff_server_validation_download_smoke_next_action_reasons, and
handoff_server_validation_download_smoke_next_action_source as controlled
AI/operator routing hints derived from the explicit server-validation result.
When present,
handoff_server_validation_download_smoke_review_queue,
handoff_server_validation_download_smoke_review_queue_count, and
handoff_server_validation_download_smoke_review_queue_preview_truncated mirror
the validator's audit-only review queue so an AI/controller can route bounded
FASTA-quality review without parsing preview rows.
These fields may point to fixing or providing the result, running a bounded
download-smoke inspection, reviewing local FASTA quality blockers, or reviewing
validated bounded-smoke outputs; they do not authorize downloads, provider
access, manifest mutation, installation, or strict deliverable changes.
This is still a local result-shape/status read and does not execute the target
command, contact providers, download genomes, mutate manifests, or register
external genomes.
preview, build, and status also emit
coverage_next_command_plan from the stored pipeline summary so a controller
can see the current packet's rendered argv and preflight decision without
executing the target command, plus coverage_next_operator_recipe for the same
metadata-only next-step recipe and coverage_operator_queue_preview for the
bounded queue preview. operator_chain_next_step_packet similarly renders and
preflights the current operator-chain next_stage.recommended_request into a
single metadata-only packet with recommended_request_target, target argv,
decision, blocker/warning IDs, and the stage boundary. It also repeats
operator_chain_snapshot_sha256, a
deterministic digest of the current operator-chain stage rows, so controllers
can bind a proposed next local step to the exact checklist state they inspected.
The packet also exposes resume_with_stage and
resume_with_expected_operator_chain_snapshot_sha256, which are direct copies
of the stage name and digest to carry into a later guarded metadata call; it is
a planning handoff and does not dispatch the command.
operator_chain_resume_packet repeats the compact resume fields from the same
next-step packet, including target argv, decisions, blocker/warning IDs, stage,
artifact, and digest guard, so controllers can persist a smaller handoff object
without losing the fail-closed snapshot binding.
The payload also includes
required_inputs and recommended_request as convenience copies from the
current next_stage, plus stage_status_counts, available_stage_names, and
unavailable_stage_names so AI/operator controllers can route without
re-parsing every stage row. It also includes
coverage_stage_readiness_summary, a compact AI-facing summary of the stage
chain, first unavailable stage, next recommended target, command-plan decision,
preflight decision, blocker/warning IDs, blocked-stage required inputs, and
blocked-stage command-plan previews.
When an explicit or conventional
child stage
summary is present, the matching operator_chain_stages row also carries
bounded summary_* fields such as summary_status, summary_ready_count,
summary_blocked_count, summary_exported_count, or
summary_install_planned_count; bounded count dictionaries such as
summary_blocker_counts, summary_provider_counts, and
summary_install_plan_status_counts may also be included. External-genomes
child stages may also carry summary_operator_route_counts,
summary_provider_status_counts, summary_provider_automation_level_counts,
summary_next_input_class_counts, and summary_automation_boundary_counts
when controlled route metadata is available. Registration dry-run stages may
also carry summary_valid_count, summary_invalid_count,
summary_registration_status_counts, summary_provider_status_counts, and
summary_provider_automation_level_counts from
external_genome_registration_results.tsv. When
external_genome_install_results.tsv is present in the supplied registration
run directory, the same stage row also carries summary_install_result_count,
summary_install_succeeded_count, and
summary_install_result_status_counts. If that explicit run directory also
contains a valid manifest.tsv, the stage row carries
summary_manifest_available=true, summary_manifest_record_count, and
summary_external_registered_manifest_record_count for controller visibility
only; it does not change completion metrics or strict evidence. The top-level
status payload mirrors this local-coverage realization as
external_genomes_registration_realized,
external_genomes_registration_manifest_available,
external_genomes_registration_manifest_record_count,
external_genomes_registration_external_manifest_record_count, and
external_genomes_registration_install_succeeded_count so controllers can
distinguish a reviewed dry-run plan from a workflow run that already has local
external registered genomes in manifest.tsv. Provider-request validation and
external-genomes handoff child summaries can also contribute
summary_provider_request_readiness_packet; external-genomes install-plan
summaries can contribute summary_external_genomes_readiness_packet and, for
blocked local inputs, summary_external_genomes_repair_queue.
operator_chain_readiness_packets collects those bounded packets by stage so
an AI/operator controller can inspect child-stage readiness without opening the
child summary files. Ready readiness packets include compact
recommended_request_target labels. A ready external-genomes install-plan
readiness packet also carries the concrete register-external-genomes dry-run
request using the reviewed external-genomes TSV path and target workflow
outdir recorded by the install-plan step. Provider-request readiness packets can
also include install_plan_recommended_request_target when the child summary
exposes a downstream install-plan companion; these are routing hints only and
do not change the available gate. It also includes
completion_gate with passed, required, blocking_stage_count,
blocking_stage_names, and blocking_diagnostic_code. By default, an
incomplete chain remains a readable status result. Add --require-complete to
make incomplete chains fail closed with exit code 2 and
diagnostic_code=chain_incomplete. It never discovers workflow output
directories, writes files, contacts providers, downloads genomes, copies FASTA,
mutates manifests, or changes completion metrics.
Missing, unreadable, or empty inputs block with exit code 2; successful
previews/builds exit 0; unexpected internal or write failures exit 1. The
pipeline is an AI/operator planning shortcut only: it does not contact
providers, authenticate, accept terms, download genomes, mutate manifests,
change completion metrics, or promote strict scientific deliverables.
Expanded discovery and manual-supplement inputs remain explicit local TSV
handoffs. Supplying them only changes review lanes, review-signal counts, and
downstream planning pressure; it does not execute discovery or make candidates
download-ready.
The written pipeline directory can be supplied later as one explicit
read-only handoff with --coverage-pipeline-dir <dir> for --report-only or
package-results --include reports|all. TypeTreeFlow derives only
acquisition_worklist/, coverage_plan/, coverage_next/, provider_handoff/,
provider_request/, provider_request_validation/,
provider_request_external_genomes/, external_genomes_install_plan/,
archive_candidates/, manual_review_import/, and strict_gating/ under that
directory and then applies the same audit-only report/package contracts as the
individual component directory options. Explicit component directories take
precedence over the derived pipeline subdirectories.
Valid coverage_next/next_input_package.json members are package-only
audit handoffs for the next AI/operator input. They are omitted when missing or
invalid and never authorize command dispatch, provider contact, downloads,
workflow mutation, or strict deliverable promotion.
When archive_candidates/manual_review.tsv is still the generated incomplete
template, package-results --coverage-pipeline-dir preserves it under
archive_candidates/ for next-input handoff. Completed manual-review input TSVs
are not package members; publish sanitized review decisions through
manual-review import --write and package the resulting manual_review_import/
triplet instead.
The generated provider_request/ member is an offline draft for
local provider-request validate; report/package inclusion means draft
availability only and does not authorize provider contact, validation,
downloads, or registration.
For offline readiness, pass --offline-readiness-dir <dir> with
--report-only to display compact audit status from a previously generated
readiness pair, or with package-results --include reports|all to copy the
validated pair into a delivery package.
Manual supplement actions: review_matched_candidates,
review_species_identity_mismatch, manual_search_required,
provide_curator_accession, provide_external_genome_fasta,
retry_network_or_use_cache.
Live provider and Entrez request timeout contract: guarded live LPSN, NCBI
Assembly, NCBI BioSample, NCBI Taxonomy, and Entrez 16S lookup requests use a
bounded per-request timeout. The default is 30 seconds and can be overridden
with --provider-timeout-seconds or TYPETREEFLOW_PROVIDER_TIMEOUT_SECONDS.
Timeouts are transient provider failures, not no_result, HTTP 404, taxonomy
failure, or type-strain evidence. Retry diagnostics include
stage, provider, action, attempt, timeout_seconds, and
exception_category=provider_timeout; workflow status and failed-handoff
outputs preserve the failure for review instead of waiting indefinitely.
provider/proposed_external_genomes.tsv rows remain review-only.
proposed_external_genomes.tsv is always a review-only handoff table and its
rows are always external_genome_manual_review_required.
external-genomes validate --input <external_genomes.tsv> is a no-write
preflight for reviewed or proposed external-genome rows. It reads only the
explicit TSV and referenced local FASTA files, emits one compact JSON object,
and returns 0 when all rows validate or 2 for schema, input, checksum,
missing-file, or manual-review diagnostics. The payload includes record_count,
valid_count, invalid_count, status_counts, bounded row previews, and the
stable boundary fields dry_run=true, writes_outputs=false,
writes_workflow_outputs=false, downloads_triggered=0,
providers_contacted=0, network_access=false, external_tools=false,
manifest_mutated=false, and strict_scientific_deliverable=false.
When reviewed rows carry controlled route metadata in notes, the payload also
includes provider_status_counts, provider_automation_level_counts,
operator_route_counts, provider_route_groups, next_input_class_counts,
and automation_boundary_counts for AI/operator handoff context only. It also
includes local packet-readiness maps: external_source_counts,
checksum_input_counts, type_material_counts, and
manual_review_flag_counts. These compact counts describe the supplied
external_genomes.tsv packet and do not validate provider terms, query
providers, install FASTA, or mark strict completion. The payload also includes
external_genomes_action_summary, which groups validation statuses into local
repair or next-step actions with bounded species previews and fixed
safe_for_unattended_execution=false.
Blocked validate payloads also include external_genomes_repair_queue, a
bounded row-level queue with input row numbers, local fields or files to fix,
recommended local repair actions, a bounded repair_template_row shaped like
external_genomes.tsv, and no-download/no-provider safety fields.
The queue is only a repair guide for the reviewed external_genomes.tsv input;
it is not installation permission, provider authorization, registration, or
completion credit. When that queue is non-empty, the blocked validate payload
also carries a bounded repair_template_recommended_request and command string
for writing an isolated editable repair TSV; the recommendation is still
no-write until the operator explicitly runs external-genomes repair-template --write.
external-genomes repair-template --input <external_genomes.tsv> renders those
invalid-row templates as compact JSON. With --write --out <external_genomes_repair_template.tsv>, it writes only that isolated editable
TSV using the exact external_genomes.tsv schema; existing outputs require
--force, and the output path may not replace the input. Its next recommended
step is external-genomes repair-merge --input <external_genomes.tsv> --repair-template <external_genomes_repair_template.tsv> --write --out <external_genomes_repaired.tsv>, which preserves originally valid rows and
replaces the invalid rows in order with the edited repair-template rows. The
merge requires the repair-template row count to match the original invalid-row
count and the species/strain/type-strain/source/genome-id identity fields to
match the original invalid rows, writes only the isolated repaired TSV, rebases
relative FASTA paths to remain valid from the repaired TSV's directory, and
still requires a fresh external-genomes validate pass before install
planning. Valid commands exit
0; input or usage errors exit 2; output write failures exit 1. Neither
command validates provider terms, contacts providers, downloads data, registers
genomes, mutates manifests, or creates strict scientific deliverables.
The validate payload also includes external_genomes_readiness_packet. When
every row is valid, that packet reports status=ready_for_next_stage,
next_stage=external_genomes_install_plan, and a structured request for
external-genomes install-plan using the explicit --input path supplied to
validation; otherwise it reports the blocked count and does not emit a next
request, target label, or command. The packet also carries provider_route_groups
when controlled route metadata is present. The packet is metadata only and
always keeps safe_for_unattended_execution=false. Ready packets include
recommended_request_target, recommended_next_command, and
recommended_command_plan, a no-dispatch companion that renders and preflights
the next structured request for AI/operator routing. The top-level validate
payload mirrors the same concrete required_inputs, recommended_request,
recommended_request_target, and recommended_next_command fields for
controllers that do not inspect nested packets. Ready validate payloads also
include install_plan_recommended_request,
install_plan_recommended_request_target,
install_plan_recommended_next_command, and
install_plan_recommended_command_plan for the optional isolated
external-genomes install-plan --write --outdir <dir> audit triplet. This
write-oriented plan remains blocked until an operator or controller explicitly
allows writes; it is still an isolated audit output, not workflow mutation.
external-genomes install-plan --input <external_genomes.tsv> --target-outdir <run> is the AI/operator handoff between validation and workflow
registration. It validates the same explicit TSV and referenced local FASTA
files, computes the future genomes/references/*.fna install paths for
<run>, and emits a compact JSON plan without copying FASTA, writing the
target run, installing manifest rows, contacting providers, or downloading
data. Optional --write --outdir <dir> [--force] writes only an isolated
external_genome_registration_results.tsv,
external_genome_install_plan.tsv, and
external_genome_install_plan_summary.json; the target run remains read-only
for this command. The JSON and summary also include required_inputs plus a
structured recommended_request for a later dry-run
register-external-genomes command. The recommended request uses the explicit
--input path supplied to external-genomes install-plan, so AI/operator
controllers can render the registration dry-run without reconstructing the TSV
path from earlier handoffs. The payload also includes
recommended_request_target and recommended_next_command for that later dry
run. It carries the same controlled route count fields, including provider
status and automation-level counts, plus packet-readiness count fields when
present. Its
external_genomes_readiness_packet reports
next_stage=external_genomes_registration_dry_run only when all install-plan
rows are planned; otherwise it remains blocked and omits the next request.
The install-plan payload also includes external_genomes_action_summary,
grouping planned, skipped-existing, and skipped-invalid rows into local review
actions without changing install or registration behavior. It also carries
external_genomes_repair_queue when validation found local TSV/FASTA inputs to
fix before a registration dry-run can be reviewed.
Ready packets include a recommended_command_plan for the registration dry-run
request; because registration dry-run still declares isolated output writes,
the companion remains blocked until explicit write allowance is supplied.
Valid plans exit 0; schema, input, checksum, missing-file, or manual-review
diagnostics exit 2; output-path or write failures exit 1.
--register-external-genomes <external_genomes.tsv> emits one compact JSON
object on stdout. The payload reports registration-result, valid/invalid,
install-plan, install-result, and manifest record counts plus the stable
boundary fields downloads_triggered=0, providers_contacted=0,
network_access=false, external_tools=false, and
strict_scientific_deliverable=false. In --dry-run mode,
manifest_mutated=false; in non-dry-run mode it becomes true only when
manifest/name-map records are actually written. Controlled route count fields,
when present, remain handoff context and do not affect validation, installation,
completion metrics, or strict evidence. When a dry-run registration passes with
no invalid rows, stdout includes required_inputs, a structured
recommended_request, recommended_request_target=register-external-genomes,
and a renderable recommended_next_command for the corresponding non-dry-run
local apply step. Warning, blocked, failed, and already non-dry-run payloads
leave those next-step fields empty so AI/operator controllers fail closed until
rows are reviewed.
Provider planning rows are review-only. They do not count toward completion,
do not write name_map.tsv, do not create manifest.tsv, do not create
external_genomes.tsv, and do not write cache/ncbi/download_plan.tsv.
External registered genomes must not change this boundary. Provider-native IDs remain external identifiers. They must not be written to NCBI assembly_accession.
The default provider registry includes static fail-closed entries for ATCC
Genome Portal; culture collections DSMZ, JCM, NCTC, CGMCC, NBRC/NITE, KCTC,
KACC, ACCC, IMSNU, MAFF, NCFB, KCCM, NCCP, VKM, MCCC, GDMCC, CCTCC, CECT,
CIP, CCUG, CCM, BCCM/LMG, NCIMB/NCIBM, NCIB, NRRL, NCAIM, HAMBI, KMM, GTC, PAGU,
BCRC, CCRC, NCCB, CSUR/Marseille, TBRC, TISTR, CCOS, CCAM, CICC, IFO, IAM, and FERM;
public archives ENA, DDBJ, INSDC, GenBank, and NCBI RefSeq; NCBI Assembly and
NCBI BioSample metadata; BV-BRC/PATRIC; and IMG/JGI; and BacDive.
Culture-collection and IMG/JGI entries are planning_only; public archive,
NCBI Assembly/BioSample, BV-BRC/PATRIC, and BacDive entries are metadata_only.
Coverage action planning may use explicit
provider_keys, candidate_provider_keys, preferred_provider_keys, or
provider_key hints from local rows and normalizes known aliases to canonical
provider keys. Provider hint fields may also contain recognizable standalone
culture-collection tokens such as ATCC, DSMZ, NITE, KCTC, KACC,
ACCC, IMSNU, MAFF, NCFB, KCCM, NCCP, IAM, FERM, or VKM,
plus public portal or metadata labels such as BV-BRC, PATRIC, BacDive,
IMG/M, or JGI IMG;
these are still normalized only as review hints. These statuses and hints describe review
guidance only and do not enable provider network access, automatic downloads,
credentials, terms acceptance, or strict type-strain confirmation.
Acquisition worklist rows with BacDive accession/id fields, including
matched_bacdive_accessions, carry the canonical bacdive metadata-review
provider key even when no separate source label is present.
For external_fasta_required rows without explicit provider hints, coverage
planning uses the registry's planning_only entries as the default provider
handoff key set; metadata_only public archives remain excluded from that
default handoff set.
likely_type_material, representative_only, provider proposals, and local
query records are not strict confirmed type strains. Strict wording requires
evidence tying the genome record to the species type-strain equivalence set.
Generated handoff_index.md files are delivery-package navigation indexes and
status summaries. They are not a new scientific decision source, not a cache
mirror, and not a substitute for authoritative tables.
This is the handoff contract for generated delivery packages. Each generated handoff is a delivery-package navigation index and status summary.
authoritative scientific and audit interpretation remains with manifest.tsv,
source_audit/sequence_source_audit.tsv, source_audit/completion_audit.tsv,
completion/*.tsv, report/summary.md, and report/run_review.md.
Successful packages may be called successful completion handoff only when the
run has packageable completion evidence. A failed-run review package is a
failed-run handoff package and not a successful completion package. Their next
action and warning fields are operational guidance, not scientific conclusions.
Failed-run review packages are not successful completion handoffs.