Skip to content

feat(cli): route table as data, sectioned help, cost labels, data schema (#94 A1) - #284

Open
napetrov wants to merge 13 commits into
intel:mainfrom
napetrov:feat/cli-routes-table
Open

napetrov wants to merge 13 commits into
intel:mainfrom
napetrov:feat/cli-routes-table

Conversation

@napetrov

Copy link
Copy Markdown
Contributor

Summary

The top-level route list now comes from a table (dokimi/cli_routes.py) instead of being
spread across the parsers. Each root sits in one section, and every route's help line ends in
[free] or [paid]. paid means the route can make a model call in some flag combination.
A root is paid when any leaf under it is. This is item A1 of the CLI API v2 plan (#94 §5).

dokimi --help
  The loop           evaluate, baseline, report, answers, benchmark, dashboard,
                     arms, subjects, tasks, explore
  Subjects           run, compare, library (product), catalog, novelty, repo
  Evals              personas, questions, eval
  Analysis and data  dataset, ingest, tools, context, data (new)

dokimi/cli_routes.py       route table: sections, roots, leaves, cost, tombstones
dokimi/cli.py              sectioned top-level help; [free]/[paid] on every route
dokimi/commands/data.py    data schema list | show KIND   (show cli_routes = the table as JSON)
  • Handler-neutral. No command moves, renames, or changes its flags or exit codes. Each root
    sits in the section of the operation it will hold once the CLI API: the evaluation loop at the top level, subject and eval groups below, one enforced flag vocabulary (proposal v2.1) #94 §4 renames land.
  • Tombstones. An old argv prefix can be listed as moved. It prints moved: dokimi <new command>
    and exits 2 without running anything. No command has moved yet, so the table is empty. The test
    covers the mechanism with a test-only entry. The check treats a group, alias, or root as a live
    route, so a tombstone cannot shadow the commands under it.
  • data is a new root with schema list and schema show KIND. M2 adds export, import and models.
  • Route help text stays with each parser. Only run and compare, which have no parser help, take
    a one-line help from the table.
  • Changelog fragment: dokimi/changelog.d/20261028_120000_napetrov_cli-routes-table.md.

Evidence

Before (tests written against the route table, behaviour not yet implemented):

8 failed, 2 passed in 1.69s
FAILED tests/test_cli_routes.py::test_help_lists_each_root_under_its_section
FAILED tests/test_cli_routes.py::test_every_route_help_line_ends_in_its_cost_label
FAILED tests/test_cli_routes.py::test_run_and_compare_have_a_one_line_help_in_the_top_level_list
FAILED tests/test_cli_routes.py::test_route_table_matches_the_parser_leaves_and_roots
FAILED tests/test_cli_routes.py::test_a_tombstone_rewrites_the_argv_and_exits_2
FAILED tests/test_cli_routes.py::test_an_argv_that_no_tombstone_matches_is_parsed_as_before
FAILED tests/test_cli_routes.py::test_data_schema_show_prints_the_route_table_as_json
FAILED tests/test_cli_routes.py::test_data_schema_list_names_the_kinds

After:

tests/test_cli_routes.py                 11 passed
pytest -q (full suite)                   9730 passed, 6 skipped in 405.57s
ci_local.py --jobs static                0 failed, 10 passed, 3 skipped
                                         (pre-commit, gitleaks, commit scan need network)
ci_local.py --jobs typecheck             0 failed, 2 passed (mypy, deptry)
scripts/cli_surface.py diff              only the added data command group:
                                         data, data schema, data schema list, data schema show

Self-review fixes cf5166bc, a654a8b9 and 08ac435f: each adds tests that fail before
the fix and pass after it (the alias case in 08ac435f, for example, fails on a654a8b9);
the full suite was re-run after each fix.

Help diff

User-visible: yes. The top-level dokimi --help is regrouped into four sections, every route
line ends in [free] or [paid], run and compare get a help line, and data is new. The same
labels also show in each parent's own subcommand list (for example dokimi baseline --help). A
command's own --help text does not change.

--- intel/main: dokimi --help
+++ this PR: dokimi --help
@@ -1,38 +1,47 @@
 usage: dokimi [-h] [--version]
-              {run,evaluate,compare,baseline,report,personas,questions,answers,eval,library,product,benchmark,dashboard,arms,subjects,tasks,catalog,explore,dataset,ingest,novelty,repo,tools,context} ...
+              {run,evaluate,compare,baseline,report,personas,questions,answers,eval,library,product,benchmark,dashboard,arms,subjects,tasks,catalog,explore,dataset,ingest,novelty,repo,tools,context,data} ...
 
-positional arguments:
-  {run,evaluate,compare,baseline,report,personas,questions,answers,eval,library,product,benchmark,dashboard,arms,subjects,tasks,catalog,explore,dataset,ingest,novelty,repo,tools,context}
-    evaluate            Run full evaluation pipeline (one command)
-    baseline            Save and compare eval baselines
-    report              Generate analysis reports
-    personas            Persona discovery and management
-    questions           Question generation
-    answers             Answer generation
-    eval                Evaluate answers
-    library (product)   Product registry management
-    benchmark           Run context benchmark for one or more registered
-                        targets
-    dashboard           Generate dashboard from evaluation results
-    arms                Compare context-augmentation treatments (docs, MCP,
-                        skills, agent profiles)
-    subjects            Run evaluation subjects (artifact + suite) into
-                        scorecards
-    tasks               Run executable coding tasks through Codex, Claude
-                        Code, or terminal-bench harnesses
-    catalog             Scan an external skill/task catalog (e.g. a local
-                        uxlfoundation/skills or intel/skills checkout)
-    explore             Run exploration-only localization tasks (ExploreBench)
-    dataset             Export artifacts to shareable datasets
-    ingest              Materialize Markdown from other formats
-    novelty             Measure what an artifact's content adds to a model
-    repo                Repositories as evaluation subjects: validate repo-
-                        eval.yaml, L0 scan, fetch sources, reach probe,
-                        budget, task self-check, agent runs and their report
-    tools               How a model chooses among the tools it is offered
-    context             What an agent's context window held during a run, read
-                        from its trace. No LLM call.
+The loop:
+  evaluate           Run full evaluation pipeline (one command) [paid]
+  baseline           Save and compare eval baselines [free]
+  report             Generate analysis reports [free]
+  answers            Answer generation [paid]
+  benchmark          Run context benchmark for one or more registered targets
+                     [paid]
+  dashboard          Generate dashboard from evaluation results [free]
+  arms               Compare context-augmentation treatments (docs, MCP,
+                     skills, agent profiles) [paid]
+  subjects           Run evaluation subjects (artifact + suite) into
+                     scorecards [paid]
+  tasks              Run executable coding tasks through Codex, Claude Code,
+                     or terminal-bench harnesses [paid]
+  explore            Run exploration-only localization tasks (ExploreBench)
+                     [paid]
+
+Subjects:
+  run                Run the static benchmark spec and save a snapshot [free]
+  compare            Compare two saved benchmark snapshots [free]
+  library (product)  Product registry management [free]
+  catalog            Scan an external skill/task catalog (e.g. a local
+                     uxlfoundation/skills or intel/skills checkout) [paid]
+  novelty            Measure what an artifact's content adds to a model [paid]
+  repo               Repositories as evaluation subjects: validate repo-
+                     eval.yaml, L0 scan, fetch sources, reach probe, budget,
+                     task self-check, agent runs and their report [paid]
+
+Evals:
+  personas           Persona discovery and management [paid]
+  questions          Question generation [paid]
+  eval               Evaluate answers [paid]
+
+Analysis and data:
+  dataset            Export artifacts to shareable datasets [free]
+  ingest             Materialize Markdown from other formats [free]
+  tools              How a model chooses among the tools it is offered [paid]
+  context            What an agent's context window held during a run, read
+                     from its trace. No LLM call. [free]
+  data               Schemas of the artifacts and the CLI routes [free]
 
 options:
-  -h, --help            show this help message and exit
-  --version             show program's version number and exit
+  -h, --help         show this help message and exit
+  --version          show program's version number and exit

Merge Danger

Door: two-way. The help layout and labels revert with one commit. The JSON printed by
data schema show cli_routes (schema_version: cli_routes.v1) becomes a public shape once released,
so a later change to it should bump the version.

Blast radius: every dokimi --help and every parent's subcommand list. No handler, flag, or exit
code changes; the tombstone path has no entries.

Overlaps:

Open questions

  1. Cost rule: is a subscription backend such as the claude-cli provider (feat(llm): claude-cli provider: run the Q&A track on a logged-in Claude Code CLI #255) paid? The rule
    used here is "paid if any model call is possible on some path".
  2. Root label: "paid if any leaf is paid", or a third "mixed" label?
  3. Sections: do run and compare belong in Subjects? Done here, per CLI API: the evaluation loop at the top level, subject and eval groups below, one enforced flag vocabulary (proposal v2.1) #94 §4.
  4. data schema scope: only cli_routes now. Do artifact schemas under dokimi/schemas/ come in
    F2 or M2?
  5. Tombstone --json error code: deferred to F2.

Refs #94 (A1), #276.

🤖 Generated with Claude Code

The top-level route list now comes from dokimi/cli_routes.py: each root sits
in one of four sections (The loop, Subjects, Evals, Analysis and data), and
every route's help line ends in [free] or [paid]. A route is paid when any
model call is possible in some flag combination; a root is paid if any leaf is.

`dokimi data schema list|show KIND` prints a schema as JSON; cli_routes is the
first kind. The table also carries tombstones (an old argv prefix that moved
prints "moved: dokimi ..." and exits 2, never runs). The table is empty for
now, and the test covers the mechanism with a test-only entry.

Handler-neutral: no command moves or renames. Route help text stays with each
parser, except run and compare, which get a one-line help from the table.

Refs intel#94 (A1), intel#276

Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
moved_argv matches by argv prefix, but tombstone_problems compared paths to
the leaf list only. A tombstone on a group (repo tasks) therefore passed the
check and shadowed live routes under it, and a root or alias destination
(library) was wrongly reported as not a route. A path now counts as a route
when it names a root or alias, or a group or leaf under one.

Self-review of the A1 commit (blocking).

Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
…bels

A tombstone whose old path extends a live leaf (compare x, where compare
takes files) shadows that leaf's invocations, so tombstone_problems now
reports it. The tombstone check resolves aliases through one helper.

A route with neither parser help nor a table summary gets its label without
a leading space.

Self-review round 2 (no blocking; these two nits and the test count fixed).

Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
…path

moved_argv compared raw argv, so `product old` skipped a tombstone on
`library old`. It now compares canonical paths (an alias is replaced by its
root's name on both sides). An empty old path matched every argv, and an
option (--version) is not a command; tombstone_problems reports both.

Self-review round 3 (2 blocking, both fixed; the alias-ownership check is new).

Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
@codecov-commenter

codecov-commenter commented Oct 29, 2026 •

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.49%. Comparing base (f0f95a2) to head (eb5e612).
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@           Coverage Diff            @@
##             main     #284    +/-   ##
========================================
  Coverage   93.48%   93.49%            
========================================
  Files         272      274     +2     
  Lines       35363    35512   +149     
  Branches     6001     6025    +24     
========================================
+ Hits        33060    33201   +141     
- Misses       1489     1494     +5     
- Partials      814      817     +3     
Files with missing lines Coverage Δ
dokimi/dokimi/artifacts.py 95.12% <ø> (ø)
dokimi/dokimi/cli_routes.py 100.00% <100.00%> (ø)
dokimi/dokimi/commands/data.py 100.00% <100.00%> (ø)

... and 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions github-actions Bot added the cli-interface-change Changes dokimi's user-facing CLI surface label Oct 29, 2026
@github-actions

Copy link
Copy Markdown

CLI interface change detected

This PR changes dokimi's user-facing CLI surface (commands and/or options):

+ added command `dokimi data`
    + option `--help/-h`
+ added command `dokimi data schema`
    + option `--help/-h`
+ added command `dokimi data schema list`
    + option `--help/-h`
+ added command `dokimi data schema show`
    + argument `kind`
    + option `--help/-h`

Updated on every push; the cli-interface-change label is on while the diff is non-empty.

@vlad-perevezentsev vlad-perevezentsev left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review at 08ac435. The route table, the sectioned help and the tombstone check do what #94 A1 asks, and the cost labels match what the commands do. What is left is small and is in the line comments.

What I ran, at 08ac435:

  • make ci-local --offline: 9,681 passed, 0 failed, 57 skipped; every static step passed (the network-only ones were skipped).
  • dokimi --help, dokimi repo --help, dokimi novelty --help and dokimi data schema show cli_routes: four sections, every root and leaf ends in [free] or [paid], library (product) keeps its alias.
  • Each free leaf's handler, looked up from the parser: none of them makes a model call. The ones that take --model/--provider/--harness (benchmark preflight, repo budget, repo compare) use them only to check keys, pick a profile or filter rows.

Checked, no issues

  • Unknown routes: cost_of returns None for a route the table does not know, so a missing entry shows no label rather than [free], and test_route_table_matches_the_parser_leaves_and_roots fails on it.
  • Tombstones: the check runs before argparse, rewrites an alias argv to the new path, and tombstone_problems rejects an empty or option old path, a live route, a path under a live leaf and a target that is not a route. The table is empty, so no user-visible change yet.
  • Changelog: the fragment says what changed in --help and that data schema has one kind for now.

Comment thread dokimi/dokimi/cli_routes.py
Comment thread dokimi/dokimi/commands/data.py Outdated
Comment thread dokimi/dokimi/cli.py Outdated

@antonwolfy antonwolfy left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review at 08ac435. The route table, the sectioned help and the tombstone check do what #94 A1 asks, and the cost labels hold up against the handlers. One thing is worth fixing before merge: the tests do not pin the costs the PR promises.

I agree with @vlad-perevezentsev's points on the missing cli_routes.v1 schema file and on the data help text and the routed flag.

What I ran, on a Linux review host at 08ac435:

  • make ci-local: 26 passed, 2 failed. Full suite 9,730 passed; changed-line coverage step passed.
  • pip-audit fails on filelock advisories in the lock files, which this PR does not touch.
  • Run tests failed on test_unbalanced_quote_in_hook_completes_quickly (took 1.44 s, limit 1 s), test_a_cell_finished_with_another_execution_is_not_reused_... and two 60 s timeouts in test_audit_test_quality.py. None touches the CLI. All 764 tests in those three files pass when re-run alone at the same commit.
  • Mutation run on test_cli_routes.py: 51 mutants, 24 of which pass the file. The ones that matter are in the inline comment.

Checked, no issues

  • Cost labels: I read the handler of every free leaf (benchmark preflight, repo tasks check, repo budget, eval grounding, ingest docling, novelty items|view, ...). None reaches an LLM, embeddings or harness call. The paid leaves with a no-model flag (--dry-run, --lexical-only) do call a model by default.
  • Table against parser: LEAVES and ROOTS match the parser tree exactly, including repo tasks check, data schema list|show and the product alias.
  • Help output: a recursive help dump against the base differs only by the sections, the labels and the data subtree. Repeated build_parser() calls do not label twice.
  • Commits: all four are signed off.

Comment thread dokimi/tests/test_cli_routes.py Outdated
@vchamarthi

vchamarthi commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

🔍 OpenCodeReview found 1 issue(s) in this PR.

By severity: 1 medium

Severity Category Location Finding
medium test test_cli_routes.py:141-142 This test depends on the host terminal width.
Review details
  • Commit reviewed: eb5e612 against merge base f0f95a2
  • Coverage: 8 files in 3 groups
  • Engine: OpenCodeReview v1.13.3, us.anthropic.claude-sonnet-5-5
  • Usage: 224k tokens (128k from cache), 38s
  • Tool calls: 16 (9 code_search, 4 file_read, 2 file_read_diff, 1 code_comment)
  • CLI routes table feature: implementation, schema, command wiring, and artifacts: 5 files
  • Tests for CLI routes and import architecture: 2 files
  • Changelog entry: 1 file

Comment thread dokimi/tests/test_cli_routes.py Outdated
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
After merging main, `repo tasks replay` and `context consistency` are parser
leaves the table did not list, so test_route_table_matches_the_parser_leaves_and_roots
and the cost-label test failed on the merged tree. Both are free: replay reads a
recorded threads file and writes tasks (no LLM, no GitHub), consistency reads local
trace files.

Sync with main for PR 284; not a review item.

Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
dokimi data schema show cli_routes printed a document stamped cli_routes.v1 that no
schema defined, so schema_compat could not catch a renamed leaves[].path or a dropped
roots[].cost. Add schemas/cli_routes.v1.json, its fixture, register the kind, and test
that document() validates and that a drifted shape is rejected.

Thread: PRRT_kwDOVBg7g86xg7_0
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
`dokimi data --help` promised "Schemas of the artifacts and the CLI routes" and
`data schema` "an artifact or route schema", but cli_routes is the only kind: `data
schema show eval` is an invalid choice. Say what is there; widen the text when artifact
kinds are added (the test pins the pairing).

Thread: PRRT_kwDOVBg7g86xg7_2
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
…ntParser

add_subparsers builds its children with type(self), so every `dokimi <cmd>` parser was
a _RoutedParser that relied on the class default routed = False. Pass
parser_class=argparse.ArgumentParser instead and remove the flag; only the top-level
parser lists its commands by section.

Thread: PRRT_kwDOVBg7g86xg7_4
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
…rewrite to literals

The cost-label, section and `data schema show` tests compared the output to cli_routes
itself, so a wrong `[free]` passed. Mutations, each applied alone to cli_routes.py, all
survived tests/test_cli_routes.py: evaluate and tools preference flipped to free,
repo tasks check to paid, document() reporting every root free, no sections or no
aliases, and moved_argv slicing by len(tomb.new). Now: the paid leaf paths are a literal
set (the help labels are checked against it too), one root's section/aliases/cost and the
sections are asserted from literals, and a tombstone whose old and new paths differ in
length (old starting with `product`) is rewritten. All seven mutants now fail the file.

Thread: PRRT_kwDOVBg7g86xh56h
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
… lines

The cost-label test guarded with `checked >= len(LEAVES)`, but the walk also counts the
root and group entries, which make up for a missing leaf; and a leaf parser added without
help= is absent from _choices_actions, so it was skipped. Removing help= from
`baseline save` left the file green (and `save` vanished from `dokimi baseline --help`).
Compare the set of checked paths with the leaf paths instead; `run` and `compare`, whose
help comes from the table's summary, are the exempt ones.

Thread: PRRT_kwDOVBg7g86xlZDa
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
Codecov listed line 190 of cli_routes.py (the empty-argv return in _canonical) as the
patch lines without coverage. An empty argv matches no tombstone and argparse still asks
for a command.

Comment: IC_kwDOVBg7g88AAAABgsGHDA
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
…r line comments

Review bodies and the OpenCodeReview summary carry no claim of their own; their points are
the line-comment threads fixed in the commits above (schema, data help, routed flag, test
pins, help-less leaf), plus the Codecov line.

Review: PRR_kwDOVBg7g88AAAABU4jUUQ
Review: PRR_kwDOVBg7g88AAAABU5Daiw
Review: PRR_kwDOVBg7g88AAAABU66xpw
Comment: IC_kwDOVBg7g88AAAABg1oaiw
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
@napetrov

Copy link
Copy Markdown
Contributor Author

Thanks for the run. The three line comments are fixed: schema in 55601ae, data help in 1f26a76, routed flag in f97bb3e. Merging main brought two routes the table did not list (repo tasks replay, context consistency, both free); added in 3bbfc63.

@napetrov

Copy link
Copy Markdown
Contributor Author

The three points you share with the first review are fixed in 55601ae, 1f26a76 and f97bb3e; the mutation findings in 49df9a8 (thread answered there). The CI failures you list (timing test, cell reuse, two audit timeouts, pip-audit filelock) are not in files this PR touches, and Tests py3.11 and py3.14 passed on 08ac435.

@napetrov

Copy link
Copy Markdown
Contributor Author

Its one inline finding (the guard that counts instead of naming leaves) is fixed in fe1c6a7; answered in that thread.

@napetrov

Copy link
Copy Markdown
Contributor Author

Line 190 of cli_routes.py (the empty-argv return in _canonical) was the uncovered line. Covered in c8d0eba by test_an_empty_argv_matches_no_tombstone; the file is at 100% line and branch coverage on a local run of tests/test_cli_routes.py.

@napetrov

Copy link
Copy Markdown
Contributor Author

Informational: the diff lists exactly the new data group (data, data schema, list, show KIND) that this PR adds on purpose. No change needed.

@napetrov

Copy link
Copy Markdown
Contributor Author

The one finding it posted inline is thread PRRT_kwDOVBg7g86xlZDa, fixed in fe1c6a7.

Comment on lines +141 to +142
def test_run_and_compare_have_a_one_line_help_in_the_top_level_list():
text = build_parser().format_help()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test · medium
This test depends on the host terminal width. argparse sizes help from COLUMNS or the terminal, and falls back to 80. At 80 columns the help column is about 54 wide. "Run the static benchmark spec and save a snapshot [free]" is 56 characters, so [free] wraps onto a continuation line and the $-anchored regex fails. In a wide terminal the same test passes. A correct label can fail on a narrow host, and a label that is only on a wrapped line cannot be told apart from a missing one. Pin the width, for example monkeypatch.setenv("COLUMNS", "200") before format_help(). Do the same in test_help_lists_each_root_under_its_section, which also reads format_help() output.

Suggestion:

Suggested change
def test_run_and_compare_have_a_one_line_help_in_the_top_level_list():
text = build_parser().format_help()
def test_run_and_compare_have_a_one_line_help_in_the_top_level_list(monkeypatch):
monkeypatch.setenv("COLUMNS", "200") # keep argparse from wrapping the cost label
text = build_parser().format_help()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed, with one correction: the test passes at 80 columns and fails from 77 down.

At eb5e612, COLUMNS=79 and COLUMNS=80 pytest tests/test_cli_routes.py pass; COLUMNS=76, 74, 70 and 60 fail test_run_and_compare_have_a_one_line_help_in_the_top_level_list, because [free] wraps onto the next line of run. argparse reads the width from COLUMNS or the real terminal, so CI is fine and a narrow local terminal is not. test_help_lists_each_root_under_its_section still passes at 60 columns, so that one does not need the pin.

Suggestion: monkeypatch.setenv("COLUMNS", "200") in this test, as proposed above.

@vlad-perevezentsev vlad-perevezentsev left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review at eb5e612. This is a re-check, and all three points from the first round are fixed. cli_routes.v1 now has a JSON Schema and a fixture, and its kind is registered in SCHEMA_VERSIONS. The schemas help no longer promises artifact schemas. The routed flag is gone. The PR looks good to merge once the open line comment is settled.

What I ran, at eb5e612:

  • make ci-local --offline: 17 passed, 0 failed, 13 skipped; pytest 10,497 passed, 57 skipped; schema_compat green. I did not run the smoke CI, because the PR does not touch harnesses, process or repos.
  • I ran tests/test_cli_routes.py with COLUMNS set to 80, 79, 76, 74, 70 and 60 to find where the help output starts to wrap.

Checked, no issues

  • Route table schema: the new tests validate document() against schemas/cli_routes.v1.json and reject a changed document shape.
  • Help text: the schemas help now says it covers the CLI route table today, and a test pins that text.
  • Parser: parser_class=argparse.ArgumentParser replaces the routed flag. Only the top-level help is printed by section, and repo --help looks as before.
  • Price labels: the paid leaves are now an explicit list in the test, not taken from the table under test. The tombstone case uses old and new of different lengths. The leaf test compares the set of paths instead of counting help lines.
  • Routes from main: repo tasks replay and context consistency are correctly marked [free]. The first reads the recorded threads file with no LLM or GitHub call. The second reads stream-json traces.
  • SCHEMA_VERSIONS readers: artifacts and datasets_export look entries up by kind, so the added cli_routes kind does not affect them.
  • Other PRs: #255 conflicts in dokimi/dokimi/cli.py. #281 and #279 conflict in dokimi/dokimi/artifacts.py, where each PR adds a line at the end of SCHEMA_VERSIONS, so the conflict is trivial. #285 and #254 share tests/test_import_architecture.py and merge cleanly.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli-interface-change Changes dokimi's user-facing CLI surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants