Conversation
| "context": counts.context, | ||
| "bin": counts.bin, | ||
| "sops_skipped": sops_skipped, | ||
| "sops": counts.sops, |
There was a problem hiding this comment.
This removes sops_skipped from install --json output and adds a new sops key, in a patch release (1.0.4). The doc comment on format_install_summary_json says the break is intentional ("so a machine consumer … sees a clear break"). That is a breaking change to a published machine contract, and the CHANGELOG doesn't mention it.
Do not drop the existing key in a patch. Keep sops_skipped (it can be 0 on every path now, which is accurate) and add sops alongside it. If the key really needs to go, it belongs in a release that calls out the removal under ### Removed in the CHANGELOG.
Also note that #28 changes this same JSON block in the opposite direction: it keeps sops_skipped and adds sops_converted_to_skills. Please align with that PR on one contract before either merges (see the top-level comment).
| [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Entries are consolidated per release, | ||
| not per individual commit. | ||
|
|
||
| ## [1.0.4] - 2026-10-01 |
There was a problem hiding this comment.
Technically konductor init was a documented, public command through 1.0.3. It had its own guide page (tasks/initialize-a-project.md) and appeared in the quick-start. After this change, anyone following those docs or calling it from a script gets exit 64.
QQs:
- Should this be a minor bump (
1.1.0) instead of1.0.4? - Additionally/Alternatively, should it at least be listed under
### Removedrather than### Changed?
Let me know your thoughts.
| /// current working directory and writes a starter | ||
| /// `.konductor/config.yml` derived from the CLI's preset defaults. | ||
| /// | ||
| /// Temporarily hidden from normal --help and from normal dispatch (see |
There was a problem hiding this comment.
clap uses /// doc comments as the subcommand's long help, so this maintainer note is printed to users verbatim:
$ konductor init --help
Initialize a new Konductor project: ...
Temporarily hidden from normal --help and from normal dispatch (see dispatch.rs's `Commands::Init` arm, which returns `EXIT_USAGE_ERROR` ... Re-enable by removing `#[command(hide = true)]` here and the gating check at the top of dispatch.rs's `Commands::Init` arm.
Please move the maintainer part to a plain // comment above #[command(hide = true)], so only the first paragraph stays in ///. Config already has the same leak on main (konductor config --help), and so does Metrics ("Hidden from normal --help since…"). Would be good to fix all three here, since this PR is establishing the pattern for them.
| | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| | `init` | Create `.konductor/config.yml` in the current directory from a preset (`solo`, `team`, or `org`). | | ||
| | `install` | Install Konductor into a target directory from a `--from <repo-root>` source. `--from` (source) and `--target` (destination) are distinct flags — don't conflate them. | | ||
| | `init` | Create `.konductor/config.yml` in the current directory from a preset (`solo`, `team`, or `org`). Hidden from `--help` and gated behind its own escape hatch. | |
There was a problem hiding this comment.
This skill ships to every install and is what the agent reads when a user asks "how do I use Konductor". The rest of the PR withdraws init/config/metrics from the documented surface, but this table now lists all three and tells the agent there is an escape hatch. That works against the withdrawal: an agent reading this will offer init to users or go looking for the env var. Can these three rows be removed, matching reference.md?
Two more things in this file:
- The
updaterow (line 173) still says "No diffing, no--forceflag". Both are no longer true after the no---fromversion check and--force. - The
installrow still describes--from <repo-root>as the source, but the quick install path is now the default.
Also, this file isn't mentioned in the PR description, and most of its diff is em-dash → colon/comma rewrites. Was that intended for this PR? It makes the substantive changes harder to find. check-guide-facts.py's withdrawn-command scan doesn't cover skills/, which is why this passes the checker.
| [[package]] | ||
| name = "synstructure" | ||
| version = "0.13.2" | ||
| version = "0.14.0" |
There was a problem hiding this comment.
nit: A cargo update ran alongside the version bump? If not intended, please limit the lockfile change to the konductor entry.
If the dependency refresh is wanted, ideally those would go in its own change with clear intention to do so.
| dispatch_config(&cwd, action, color) | ||
| } | ||
| Commands::Metrics { since } => { | ||
| if !metrics_dispatch_allowed() { |
There was a problem hiding this comment.
Why keep metrics at all? It's a stub with no logic, and it's now hidden, gated, and has an escape hatch that (per its own doc comment) "has no current consumer". We're carrying a command, a gate, an env var, five tests and a notes.md section for something that does nothing. Deleting Commands::Metrics would be simpler, and when the real implementation exists it can arrive as a new command. Is there something I'm missing that needs the stub to exist now? Let me know your thoughts.
| /// tests can exercise every input value without mutating the real | ||
| /// process-global `KONDUCTOR_ALLOW_INIT` env var (which would race | ||
| /// against other tests reading process env concurrently). | ||
| fn init_dispatch_allowed_for(value: Option<String>) -> bool { |
There was a problem hiding this comment.
nit:config_dispatch_allowed_for, init_dispatch_allowed_for and metrics_dispatch_allowed_for are identical, and so are their wrappers and their three exact-value tests. Consolodate?.
| # are real, complete, tested code paths, just hidden from --help and gated at dispatch. | ||
| # `metrics` is withheld too, but for a different reason: it is a genuine stub with no | ||
| # real logic behind it yet, not something withheld despite being finished. | ||
| # `.konductor/config.yml` itself stays documented, since `init` writes it and `doctor` |
There was a problem hiding this comment.
This comment no longer holds after this PR: init is withdrawn and doctor no longer validates the file. That's why these verbose comment blocks are not helpful. Really stale-ing up the repo with misinformation quickly
| **Adding or removing a name in `WITHDRAWN_COMMANDS` is a product decision, not a way to quiet | ||
| the checker.** | ||
|
|
||
| ### `konductor init` is hidden, not deleted |
There was a problem hiding this comment.
The config, init and metrics sections each repeat the same two-paragraph WITHDRAWN_COMMANDS explanation word for word, and the config and init sections also repeat the config.yml paragraph. Could the shared text live once, under a single "Withdrawn commands" heading, with one short line per command saying why it's withdrawn? That way the next withdrawal is a one-line edit.
Also on this page: line 26 ("Documented version") still says Cargo.toml is 0.1.1 and to "bump the source before launch". That's no longer true at 1.0.4, and the page's own header says to remove entries once they're fixed. Was pinning the guide at 1.0.0 meant to outlive launch? Right now the quick-start --version checkpoint shows konductor 1.0.0 while users see 1.0.3. Dropping the version from the sample output would avoid this. Not blocking.
|
|
||
| `make link` symlinks the binary into `~/.local/bin`. If that is not on your `PATH`, add it — | ||
| or pick any directory that already is. No administrator privileges are needed. | ||
| This fetches the published `konductor` release for your platform. The script downloads the small bootstrap script, verifies it against |
There was a problem hiding this comment.
nit: the piped script is the bootstrap script. What it downloads and verifies is scripts/konductor-install.sh. Suggest: "The bootstrap script downloads konductor-install.sh, verifies it against the checksum GitHub's Contents API reports for that file, and runs it. It needs curl, jq and git on your PATH." It does check for all three up front, and the "What you need" line above no longer mentions git.
ihmaws
left a comment
There was a problem hiding this comment.
Thanks for the changes! Some top-level feedback:
-
Size and scope. I'd recommend splitting this one, at +1,780/−934 across 34 files. It mixes CLI gating, an install-summary rework, a doctor change, a quick-start/update-page rewrite, guide tooling fixes, an agent-skill rewrite and a release bump. Probably could have gone in as individual changes or leveraging GitHubs new stacked PRs feature
-
Overlap with #28. #28 also rewrites the install summary's SOP clause and the
sops_skippedJSON field, but goes the other way: it counts SOP conversions inside skills and addssops_converted_to_skills. Whichever merges second will conflict and also has to make the contract decision. Can you two agree on one model first? -
Comment volume. Many doc comments are much longer than the code they describe.
format_install_summaryhas ~45 lines over oneformat!, and a lot of the text narrates the fix ("pre-fix bug", "now-removed", "the fix this test guards"), which goes stale as soon as this merges. Would recommend trimming comments to what the code does and why, and leaving the history to the commit messages. -
Top-level
README.md. Its command table (around line 272) still listskonductor initandkonductor config. Not in this diff, but it should go with the withdrawal. -
In my mind, I'd like to see these release bumps on their own once everything lands into main. I don't love the idea of this PR being what controls when we cut the new release.
cli/konductor-rs/src/cli.rs:215 — Same kind of stale --help text as the --from fix in this PR: konductor update --help prints "There is no --force flag" and then lists --force a few lines below. Since you're already correcting cli.rs doc comments, could this one be updated too? Not blocking.
4e44696 to
7f1c915
Compare
Hides init and metrics behind #[command(hide = true)] plus dispatch gating, matching the existing config pattern. Removes doctor's dormant config check from the live checks vector, matching the check_gitignore precedent. Fixes a stale remediation string in doctor.rs that recommended two now-hidden commands. Updates cli/README.md's command list, status blurb, check table, and Current-state section to match.
The `update` flag table in reference.md's flag reference never gained rows for --cli, --version <v>, and --force. All three trace to the initial v1.0.0 release (git log -S confirms each flag's introduction at 1f3f66c), predating every commit in this branch's range, and no later commit in this history ever added the missing rows -- reference.md has only ever been touched by 7223c96 (original authoring, outside this branch's range) and 359f7cc (command-table/config-section wording, leaving this flag table alone). tasks/update.md already documents all three flags in full (see its '--version <v> and --force' section and 'Update the CLI itself' section); this brings the flag reference table into sync with that existing, correct content.
The "all six checks above" line in the --all section predates every commit in this branch -- it was written at the 1.0.0 initial release and never updated when the check count changed to 8 (cli_version and content_version added outside run_checks(), telemetry_state renamed from an earlier removed check). git blame confirms no later commit touched these lines, so this is a standalone fix rather than a correction folded into any prior commit's history.
The `install` command's `--from` flag doc comment said installing from a published release was not yet available and so `--from` was currently required. That stopped being true once the no-`--from` GitHub-release / main-branch-dist fallback chain shipped (documented in cli/README.md and in `update`'s own doc comment on this same file). Replaces the stale claim with the real fallback chain description, mirroring `update`'s existing accurate wording.
init and metrics are now hidden from --help and gated at dispatch, so the guide should not document them as part of the customer-visible command surface. Removes the dedicated 'Initialize a project' task page and every reference to it, corrects the doctor check count and remediation text wherever config/init/metrics were still named, and adds init/metrics to check-guide-facts.py's WITHDRAWN_COMMANDS so the checker enforces their absence the same way it already does for config. Resyncs both HTML bundles to match. notes.md's 'config is withheld' section gains sibling 'init is hidden' and 'metrics is hidden' sections explaining each withdrawal's own rationale -- init is complete but withheld, metrics is a genuine stub. The note about cli.rs's --from doc comment contradicting cli/README.md is also corrected now that the doc comment itself is fixed. Also minimizes the overall init/config/metrics documentation footprint across notes.md, SKILL.md, cli/README.md, and the root README.md, folded in here since it is a direct follow-up trim of the same documentation this commit introduced.
tasks/update.md still described doctor as running six checks (including the now-removed config check) and claimed update has no version awareness at all. Both predate this session's doctor check-count fix (9 -> 8) and the cli_version/content_version additions. Corrected to describe the real two checks and scope the no-version-awareness claim to the --from <repo-root> path specifically, where it still holds. tasks/diagnose-problems.md's healthy-installation sample output listed only 5 of doctor's 8 checks, missing cli_version, telemetry_state, and content_version.
9ba2779 to
8ee34d1
Compare
reference.md's Configuration file section documented a full schema, precedence table, and error-message table for a file no live command reads or writes, contradicting its own opening sentence. Shrunk it to one short paragraph naming the file path and its fields without the unused-loader detail. Removed the two config.yml rows from uninstall.md's and reference.md's own artifact tables, since nothing creates that file today. Changed uninstall.md's backup example to back up the whole .konductor/ directory instead of a file nothing writes. Fixed notes.md's now-stale pointer at the removed reference.md schema. Resynced both HTML bundles to match, keeping them byte-identical.
init/metrics behind the existing gate pattern, withdraw them from the user guide, correct doctor's checks
Description
CLI:
konductor initandkonductor metricsfrom--helpand gated them at dispatch behindKONDUCTOR_ALLOW_INIT=1/KONDUCTOR_ALLOW_METRICS=1— matches the existingkonductor configpattern exactly. All three stay functionally present (not deleted):init/configare complete, tested commands withheld from the v1 customer-visible surface;metricsis additionally a genuine stub with no logic behind its gate. Keeping them present rather than removing them avoids a breaking change for anything that already calls them directly.*_dispatch_allowed_forgate helpers (config,init,metrics) into one genericcommand_dispatch_allowed_for(value, allow_value), with each command's own thin wrapper calling it. One parameterized test replaces three near-duplicate test bodies.doctor'sconfigcheck from the live checks vector (run_checks) — matches the existingcheck_gitignoredormant-check precedent. Traced every consumer of the resolved config values and confirmed none acts on them for a real decision; the check was validating decorative output. Function and its unit tests stay intact, just not wired into live dispatch.doctornow runs 8 checks instead of 9.doctor's dormant config-load-failure remediation string (incheck_config_with_home, unit-tested but never called from live dispatch): it described a backup/hand-edit/delete-to-fallback recovery workflow forconfig.yml. Since nothing reads or writes this file through any live command today, there's nothing to remediate against; the string now says so plainly.cli.rs's--fromdoc comment on bothinstallandupdate, which claimed installing from a published release was unavailable and thatupdate --forcedoesn't exist — both false since v1.0.0 shipped. Now describes the real GitHub-release/main-dist fallback chain and--force's actual effect.cli/README.md's--allsection, which still said "all six checks above" after the live check count had already moved to 8 — predates this branch, never updated.updateflags (--cli,--version <v>,--force) toreference.md's flag table — present since the v1.0.0 release but never documented there.cli/README.mdbrought in line with all of the above, and trimmed to the minimum needed to stateinit/config/metricsexist but are hidden — most of the detailed status callout and repeated "(hidden; see the status note above)" cross-references were removed as redundant, since the one bare command-name line is all the guide's own drift checker actually requires.Docs:
docs/user-guide/tasks/initialize-a-project.mdand removed every teaching reference toinit/metricsfromreference.md,concepts.md,glossary.md,faq.md— consistent with both being withdrawn from the documented command surface. Reworded every remediation step that used to recommend runninginitso it gives a manual alternative instead of a command that will now fail.init/config/metrics's overall documentation footprint rather than just correcting it: collapsednotes.md's three separately-repeated withdrawal explanations into one short shared section, trimmedskills/about-konductor/SKILL.md's rows to bare facts without escape-hatch mechanics, and droppedinit/configentirely from the rootREADME.md's command table — these three commands aren't meant to be used right now, so the documentation about them is deliberately minimal rather than thorough.reference.md's.konductor/config.ymlsection from a full schema/precedence/error-message writeup down to one short paragraph: the file isn't read by any live command today, so documenting its load errors and merge precedence in detail was describing a path that can't currently be exercised. Removed the matching misleading rows fromuninstall.md's andreference.md's own artifact tables (both said "you, by hand" for a file nothing creates), and fixeduninstall.md's backup example to back up the whole.konductor/directory instead of a file nothing writes.tasks/update.mdandtasks/diagnose-problems.md's doctor check-count claims (still said six checks, including the removedconfigcheck) andupdate.md's unqualified "no version awareness" claim, which contradicted the file's own correct description of the no---fromversion-skip behavior a few lines earlier.initialize-a-project.mddeletion (prev/next links, ToC entries, a mermaid diagram), and a stale "no release has been published yet" claim inprerequisites.md.docs/index.htmlanddocs/site/user-guide.htmlto match every markdown change above, via the deterministichtmlbundle.pyedit mechanism — confirmed byte-identical to each other throughout, independently verified by decoding both and diffing against current markdown rather than only trusting the automated checker's narrower fact-based checks.Build tooling:
init/metricstocheck-guide-facts.py'sWITHDRAWN_COMMANDS, so the checker enforces their absence from the guide the same way it already did forconfig.Fixes # (issue)
Type of Change
cli/) change — Rust or PythonTesting
cli/changed:cd cli && make testpasses (Rust + Python + conformance suites) — full suite green, including the consolidated dispatch-allowed gate testskonductor --help,konductor init/metrics/config(gated, exit 64, "not currently available"), and each with its escape hatch set (real behavior confirmed —initwrote real files to a scratch target,metricsreached its stub)Checklist
cargo fmt --checkandcargo build --releaseboth clean; the onecargo clippy -D warningsfinding in this tree (a handful of pre-existing lints in telemetry code) predates this branch and belongs to the PR that introduced it, not this oneinit/metricsmirroring the existingconfigtest pattern, then consolidated the three into one parameterized test; updated one test whose assertion no longer held onceconfig's doctor check was removedNotes for Reviewers
dev/simonkrol/install_summary_sop_counts,dev/simonkrol/quickstart_update_restructure) since they're orthogonal to hidinginit/metrics— the SOP/skill-count work in particular was also directly conflicting with feat: publish Konductor as a Claude Code plugin marketplace #28's own install-summary changes on the same JSON fields, so splitting it out resolves that conflict at the root instead of requiring cross-PR coordination.metricsstays, deliberately. It's a stub with no consumer today, which is a real argument for deleting it outright — but keeping it hidden-and-gated (the same treatment asinit/config) rather than removed keeps this PR's behavior change softer: nothing that already callsmetricsdirectly loses the ability to, it just needs the same escape hatchinit/configalready use.doctor'sconfigcheck was removed because no code currently acts on.konductor/config.yml's resolved values — they're parsed and echoed but never drive a real decision. If that's intentional groundwork for a near-term feature rather than genuinely dead, this removal should be revisited before it ships.## [Unreleased]with no version number assigned, since withdrawing a previously-documented, scriptable command (init) is a real behavior change that should get its own minor-version decision at release-cut time, not one bundled into this diff.