Files changed: - .gitignore - AGENTS.md - CHANGES.md - INSTALL.md - VERSION - docs/explanation/knowledge-and-commitment.md - docs/explanation/telemetry-and-evaluation.md - docs/explanation/why-gates-are-code.md - docs/how-to/run-the-weekly-review.md - docs/how-to/set-up-the-mcp-server.md - docs/how-to/trace-and-score-sessions.md - docs/how-to/troubleshoot.md - docs/reference/commands/README.md - docs/reference/commands/configuration.md - docs/reference/commands/finding-and-checking.md - docs/reference/commands/git.md - docs/reference/commands/instance-health.md - docs/reference/commands/pages.md - docs/reference/commands/raw-material-and-uploads.md - docs/reference/configuration.md - docs/reference/exit-codes.md - instructions/dev/doc-pull-through.md - instructions/dev/tracker-testing.md - instructions/gates.md - instructions/ingest-queue.md - instructions/mcp-read-server.md - instructions/migrate-corpus.md - instructions/migrations/10.0.0-settings-tiers.md - instructions/setup-instance.md - raw/CONTRACT.md - reports/CONTRACT.md - tools/CONTRACT.md - tools/README.md - tools/bugreport.py - tools/chemenu/cli_contract.py - tools/chemenu/commands/_util.py - tools/chemenu/commands/config_cmd.py - tools/chemenu/commands/docs_verify.py - tools/chemenu/commands/doctor.py - tools/chemenu/commands/export_cmd.py - tools/chemenu/commands/git_publish.py - tools/chemenu/commands/new_page.py - tools/chemenu/commands/review_cmd.py - tools/chemenu/commands/task_cmd.py - tools/chemenu/commands/upload_cmd.py - tools/chemenu/config.py - tools/chemenu/config_shapes.py - tools/chemenu/legacy_settings.py - tools/chemenu/mcp/__main__.py - tools/chemenu/mcp/server.py - tools/chemenu/reference_doc.py - tools/chemenu/review.py - tools/chemenu/settings.py - tools/chemenu/tasks/__init__.py - tools/chemenu/tasks/caldav.py - tools/chemenu/tasks/config.py - tools/chemenu/tasks/superproductivity.py - tools/chemenu/telemetry/policy.py - tools/chemenu/tests/conftest.py - tools/chemenu/tests/record_sp_fixtures.py - tools/chemenu/tests/test_bugreport.py - tools/chemenu/tests/test_caldav.py - tools/chemenu/tests/test_config_shapes.py - tools/chemenu/tests/test_doctor.py - tools/chemenu/tests/test_git_publish.py - tools/chemenu/tests/test_legacy_settings.py - tools/chemenu/tests/test_mcp_server.py - tools/chemenu/tests/test_new_page.py - tools/chemenu/tests/test_review.py - tools/chemenu/tests/test_settings.py - tools/chemenu/tests/test_sp_recorded.py - tools/chemenu/tests/test_superproductivity.py - tools/chemenu/tests/test_task_cmd.py - tools/chemenu/tests/test_tasks_config.py - tools/chemenu/tests/test_telemetry_policy.py - tools/chemenu/tests/test_tracker_live.py - tools/chemenu/tests/test_upload.py - tools/chemenu/tests/tracker_live.py - tools/chemenu/upload.py Co-Authored-By: Claude Code <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
5.5 KiB
type, name, description, manual, migrates_to, migration_kind, obligation
| type | name | description | manual | migrates_to | migration_kind | obligation |
|---|---|---|---|---|---|---|
| types/instruction.md | 10.0.0-settings-tiers | Move the settings of the four per-feature files .wikitool-telemetry.json, .wikitool-remotes.json, .wikitool-upload.json and .wikitool-tasks.json into the tiered settings with `wikitool config migrate` - run once per checkout; without it the Publish-Remote Gate and the upload limits are not in effect and the commands that need them exit 42. | true | 10.0.0 | mechanical | required |
Move the per-feature settings files into the tiered settings (10.0.0)
Until 10.0.0 four features kept their settings in a file of their own at the root of the
checkout: .wikitool-telemetry.json, .wikitool-remotes.json, .wikitool-upload.json and
.wikitool-tasks.json. 10.0.0 reads none of them. The same settings are now sections of the
tiered settings - telemetry,
remotes, upload, and tasks with superproductivity and caldav - and each field sits in
the file its tier names: wikitool.json (committed) for what is the same in every clone,
.wikitool-local.json for what is true of one checkout, and for a token or a password the
secrets file, with only a reference in wikitool.json.
A file that is left behind is not read, so the setting it held is not in effect: no
Publish-Remote Gate, no upload limits, no tracker. wikitool config migrate moves the content and
removes the old files. It is mechanical because nothing is decided per file: every setting keeps
its effective value, defaults included.
Contents
When to run
After installing 10.0.0 machinery over an instance on 9.x - step 12 of
upgrade-instance.md, once tools/wikitool migrate status names this
document - in every checkout of the instance that has one of the four files. The files are
per checkout and gitignored, so another clone does not see them and runs the step for itself.
Until it has run, tools/wikitool doctor reports each leftover as a FAIL, and publish
(with a .wikitool-remotes.json), task, review and new project (with a
.wikitool-tasks.json) and the MCP server (with a .wikitool-upload.json) exit 42 and name the
command below.
Steps
-
See what is there:
tools/wikitool doctorEach old file that is still present is one
legacy-settingsline. None, and the checkout has nothing to move: go to step 4. -
Move it:
tools/wikitool config migrateIt prints, per setting, which file the value went to - never the value. A secret's value goes into the secrets file in the user's configuration directory, and only a reference into
wikitool.json. It writes the new files first, reads them back and checks them, and only then removes the old ones; if anything fails, nothing is changed and the old files are as they were. A second run says there is nothing to move. -
Check it:
tools/wikitool doctor git status --shortdoctorshows nolegacy-settingsline, and the settings lines areOK.git statusshowswikitool.jsonas new or changed: it holds the instance-tier values and the references, and it is committed with the nextpublish..wikitool-local.jsondoes not appear, being ignored. -
Record it, once per instance - not once per checkout:
tools/wikitool migrate done 10.0.0 --pages 0--pages 0because nokb/page changes. The migration isrequired, so this advanceskb_version.
How to tell a migrated checkout from an unmigrated one
An unmigrated checkout has at least one of the four files at its root, and doctor names each.
A migrated one has none; .wikitool-tools.json is not among them and stays.
Decision points
config migratestops: a key already holds a different value? The target files already have the key, set by hand or byconfig set, and the old file says something else. It cannot know which one stands. Decide, remove the other from its file, and run it again.- A value was read before but only coerced - a number written as a string, say? It is carried over as the number it was read as. Anything an old file held that was never read (an unknown key, the section of a provider that is not chosen) is named in the output and not carried over.
- The old Publish-Remote allowlist or upload limits go where? Into
.wikitool-local.json: both affect a gate, soconfig setdoes not write them, and the migration is the one command that does. Later changes to them are the user's own edit. - A profile file
WIKITOOL_TASKS_CONFIGpoints at still holds a plain token? It is not touched byconfig migrate, and it is no longer read as the old format: a profile has the layout of.wikitool-local.jsonand holds references only (Profiles). Rewrite it by hand, with the value inWIKITOOL_SECRET_<NAME>or the secrets file.
Scope
The four files named above, in the checkout the command runs in. .wikitool-tools.json and the
two tiered settings files are not old files. The machinery - the readers, config migrate,
doctor's check - arrived with dist upgrade and needs nothing from this document.