Crate canonic#

crate canonic#

canonic

Versioned markdown canned-response corpus for Jira support workflows.

The CLI is a thin front end. Library consumers can call the same engines:

Module

Role

config

canonic.toml / --prefix shared id prefix

corpus

Walk and load {prefix}-*.md responses

check

Quality gate (prefix, sop, closings)

convert

Pandoc markdown ↔ Jira wiki markup

index

Tantivy BM25 search and near-duplicate pairs

lint

Vale CLI + in-process Harper

doctor

Tooling probes

jira_import

Free REST probe, read import, explicit comment POST

scaffold

New templates and promote import → responses

tui

Interactive ratatui corpus browser (canonic tui)

Example

use canonic::{default_corpus_dir, walk_responses, check_responses, DEFAULT_PREFIX};

let dir = default_corpus_dir();
let responses = walk_responses(&dir).expect("read corpus");
let report = check_responses(&responses, DEFAULT_PREFIX);
assert!(report.ok() || !report.findings.is_empty());

Markdown under corpus/responses/ remains the source of truth. The shared id prefix is user-chosen in canonic.toml (optional --prefix CLI override; default resp). Jira settings live under [jira] in the same files (prefer canonic.local.toml for tokens). Jira is a publication surface: convert for paste-in, import only as drafts under corpus/imports/, then scaffold::promote_to_corpus after review.

Modules

Re-exports

  • :rust:any:canonic::check::CheckReport

  • :rust:any:canonic::check::check_corpus

  • :rust:any:canonic::check::check_responses

  • :rust:any:canonic::check::format_check_report

  • :rust:any:canonic::config::CanonicConfig

  • :rust:any:canonic::config::DEFAULT_PREFIX

  • :rust:any:canonic::config::JiraSettings

  • :rust:any:canonic::config::find_config_path

  • :rust:any:canonic::config::load_config

  • :rust:any:canonic::config::load_config_file

  • :rust:any:canonic::config::normalize_prefix

  • :rust:any:canonic::config::resolve_prefix

  • :rust:any:canonic::convert::convert_jira_to_markdown

  • :rust:any:canonic::convert::convert_markdown_to_jira

  • :rust:any:canonic::convert::convert_path_to_jira

  • :rust:any:canonic::convert::tool_available

  • :rust:any:canonic::corpus::CannedResponse

  • :rust:any:canonic::corpus::default_corpus_dir

  • :rust:any:canonic::corpus::load_response

  • :rust:any:canonic::corpus::walk_responses

  • :rust:any:canonic::doctor::ToolStatus

  • :rust:any:canonic::doctor::collect_statuses

  • :rust:any:canonic::doctor::critical_missing

  • :rust:any:canonic::doctor::format_doctor

  • :rust:any:canonic::index::DedupePair

  • :rust:any:canonic::index::IndexDoc

  • :rust:any:canonic::index::SearchHit

  • :rust:any:canonic::index::default_index_dir

  • :rust:any:canonic::index::find_duplicates

  • :rust:any:canonic::index::find_duplicates_jaccard

  • :rust:any:canonic::index::jaccard_similarity

  • :rust:any:canonic::index::reindex

  • :rust:any:canonic::index::search

  • :rust:any:canonic::index::self_query_for

  • :rust:any:canonic::index::tokenize

  • :rust:any:canonic::jira_import::CommentBodyFormat

  • :rust:any:canonic::jira_import::JiraAuth

  • :rust:any:canonic::jira_import::JiraConfig

  • :rust:any:canonic::jira_import::JiraProbe

  • :rust:any:canonic::jira_import::PostedComment

  • :rust:any:canonic::jira_import::comment_body_to_text

  • :rust:any:canonic::jira_import::default_import_dir

  • :rust:any:canonic::jira_import::format_probe

  • :rust:any:canonic::jira_import::import_jira

  • :rust:any:canonic::jira_import::is_cloud_host

  • :rust:any:canonic::jira_import::plain_text_to_adf

  • :rust:any:canonic::jira_import::post_comment_from_markdown

  • :rust:any:canonic::jira_import::post_comment_from_markdown_with_format

  • :rust:any:canonic::jira_import::post_issue_comment

  • :rust:any:canonic::jira_import::post_issue_comment_with_format

  • :rust:any:canonic::jira_import::probe_jira

  • :rust:any:canonic::lint::LintEngine

  • :rust:any:canonic::lint::LintFinding

  • :rust:any:canonic::lint::LintReport

  • :rust:any:canonic::lint::format_report

  • :rust:any:canonic::lint::lint_paths

  • :rust:any:canonic::lint::lint_text_harper_inprocess

  • :rust:any:canonic::scaffold::ScaffoldOptions

  • :rust:any:canonic::scaffold::TEAM_SIGN_OFF

  • :rust:any:canonic::scaffold::check_response_path

  • :rust:any:canonic::scaffold::promote_to_corpus

  • :rust:any:canonic::scaffold::resolve_response_id

  • :rust:any:canonic::scaffold::scaffold_markdown

  • :rust:any:canonic::scaffold::write_scaffold

  • :rust:any:canonic::tui::App

  • :rust:any:canonic::tui::run_tui

  • :rust:any:canonic::tui::run_tui_with_prefix