jfox-cli 1.16.1__tar.gz → 1.16.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (535) hide show
  1. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/CHANGELOG.md +22 -0
  2. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/PKG-INFO +1 -1
  3. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/json-schemas.md +1 -1
  4. jfox_cli-1.16.3/docs/superpowers/plans/2026-09-24-issue-549-twin-files.md +305 -0
  5. jfox_cli-1.16.3/docs/superpowers/plans/2026-09-29-issue-561-backlinks-snapshot-overwrite.md +674 -0
  6. jfox_cli-1.16.3/docs/superpowers/plans/2026-10-09-index-status-persist.md +598 -0
  7. jfox_cli-1.16.3/docs/superpowers/plans/2026-10-09-nightly-embed-env.md +539 -0
  8. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-28-nightly-fulltest-design.md +2 -2
  9. jfox_cli-1.16.3/docs/superpowers/specs/2026-09-24-issue-549-twin-files-design.md +121 -0
  10. jfox_cli-1.16.3/docs/superpowers/specs/2026-09-29-issue-561-backlinks-snapshot-overwrite-design.md +141 -0
  11. jfox_cli-1.16.3/docs/superpowers/specs/2026-10-09-index-status-persist-design.md +127 -0
  12. jfox_cli-1.16.3/docs/superpowers/specs/2026-10-09-nightly-embed-env-design.md +284 -0
  13. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/__init__.py +1 -1
  14. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/cli.py +66 -35
  15. jfox_cli-1.16.3/jfox/index_state.py +60 -0
  16. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/moc/cli.py +3 -3
  17. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/models.py +32 -4
  18. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/note.py +113 -8
  19. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/redirect.py +3 -2
  20. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/pyproject.toml +1 -1
  21. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/nightly_test.sh +25 -6
  22. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/nightly_test_helpers.py +29 -1
  23. jfox_cli-1.16.3/tests/integration/test_index_status_persist.py +100 -0
  24. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_moc_member_commands.py +3 -2
  25. jfox_cli-1.16.3/tests/integration/test_stale_name_single_file.py +306 -0
  26. jfox_cli-1.16.3/tests/unit/test_apply_backlinks.py +240 -0
  27. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_index_kb_param.py +2 -1
  28. jfox_cli-1.16.3/tests/unit/test_index_state.py +54 -0
  29. jfox_cli-1.16.3/tests/unit/test_index_status_payload.py +25 -0
  30. jfox_cli-1.16.3/tests/unit/test_json_schema_contract_doc.py +16 -0
  31. jfox_cli-1.16.3/tests/unit/test_nightly_script_env.py +82 -0
  32. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_nightly_test_helpers.py +58 -0
  33. jfox_cli-1.16.3/tests/unit/test_note_path_rules.py +111 -0
  34. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_rebuild_backlinks_impl.py +103 -29
  35. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/uv.lock +1 -1
  36. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/ci/SKILL.md +0 -0
  37. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/release/SKILL.md +0 -0
  38. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/release/release_helper.py +0 -0
  39. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/release-all/SKILL.md +0 -0
  40. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/release-all/release_all_helper.py +0 -0
  41. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/release-cc-plugin/SKILL.md +0 -0
  42. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/release-cc-plugin/release_cc_plugin_helper.py +0 -0
  43. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/release-kimi-plugin/SKILL.md +0 -0
  44. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude/skills/release-kimi-plugin/release_kimi_plugin_helper.py +0 -0
  45. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.claude-plugin/marketplace.json +0 -0
  46. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.githooks/pre-push +0 -0
  47. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  48. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  49. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.github/ISSUE_TEMPLATE/docs_improvement.yml +0 -0
  50. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  51. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  52. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.github/workflows/integration-test.yml +0 -0
  53. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.github/workflows/publish.yml +0 -0
  54. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.gitignore +0 -0
  55. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.markdownlint-cli2.jsonc +0 -0
  56. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.pi-lens.json +0 -0
  57. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/.python-version +0 -0
  58. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/AGENTS.md +0 -0
  59. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/CLAUDE.md +0 -0
  60. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/DEVELOPMENT_PLAN.md +0 -0
  61. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/README.md +0 -0
  62. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/SESSION.md +0 -0
  63. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/SESSION_SUMMARY.md +0 -0
  64. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/claude-code-plugin-guide.md +0 -0
  65. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/cli-descriptions.yaml +0 -0
  66. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/cli-reference.md +0 -0
  67. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/installation.md +0 -0
  68. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/nightly-test.md +0 -0
  69. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/plugin-inventory.md +0 -0
  70. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-11-bulk-import-bm25-fix.md +0 -0
  71. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-11-edit-command.md +0 -0
  72. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-11-unify-format-option.md +0 -0
  73. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-12-ci-coverage-optimization.md +0 -0
  74. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-12-edit-content-file.md +0 -0
  75. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-12-fix-index-rebuild-clear.md +0 -0
  76. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-12-fix-index-verify-id-mismatch.md +0 -0
  77. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-12-fix-jfox-health-skill-kb-param.md +0 -0
  78. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-12-index-kb-param.md +0 -0
  79. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-12-lazy-import-perf.md +0 -0
  80. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-12-skill-redesign.md +0 -0
  81. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-13-add-content-file.md +0 -0
  82. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-13-bulk-import-vectorstore-init.md +0 -0
  83. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-13-ingest-log-command.md +0 -0
  84. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-13-ingest-skill-sync.md +0 -0
  85. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-13-suppress-third-party-logging.md +0 -0
  86. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-13-sync-skills-with-cli.md +0 -0
  87. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-14-sync-docs-daemon-show.md +0 -0
  88. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-15-gpu-embedding.md +0 -0
  89. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-15-make-daemon-deps-required.md +0 -0
  90. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-15-session-summary-confirmation.md +0 -0
  91. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-16-fix-windows-daemon-console-window.md +0 -0
  92. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-18-daemon-timeout-and-index-rebuild.md +0 -0
  93. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-22-release-skill.md +0 -0
  94. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-26-fix-daemon-deprecation-warnings.md +0 -0
  95. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-27-intranet-model-download.md +0 -0
  96. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-28-tag-filtering.md +0 -0
  97. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-04-29-daemon-stop-fix.md +0 -0
  98. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-03-jfox-check.md +0 -0
  99. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-03-list-notes-skip-summary.md +0 -0
  100. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-03-log-level-fix.md +0 -0
  101. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-04-list-notes-index.md +0 -0
  102. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-06-atomic-write.md +0 -0
  103. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-09-session-note-type.md +0 -0
  104. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-10-jfox-plugin.md +0 -0
  105. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-19-fix-last-used-never.md +0 -0
  106. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-05-20-modelscope-migration.md +0 -0
  107. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-06-02-todo-note-type.md +0 -0
  108. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-06-16-kimi-code-auto-summary.md +0 -0
  109. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-06-17-index-rebuild-backlinks.md +0 -0
  110. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-06-17-using-jfox-skill.md +0 -0
  111. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-06-18-self-update-command.md +0 -0
  112. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-06-21-fragment-capture.md +0 -0
  113. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-06-21-gem-synthesis.md +0 -0
  114. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-06-25-gem-synth-throttle-ledger.md +0 -0
  115. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-08-auto-summary-schedule-window.md +0 -0
  116. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-08-candidate-promote.md +0 -0
  117. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-12-gem-synth-dedup.md +0 -0
  118. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-12-release-cc-plugin-skill.md +0 -0
  119. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-12-session-summary-streamline.md +0 -0
  120. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-12-show-json.md +0 -0
  121. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-17-fix-candidate-dual-h1.md +0 -0
  122. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-18-dedup-lifecycle-decouple.md +0 -0
  123. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-19-promote-skill-three-modes.md +0 -0
  124. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-25-bookshelf.md +0 -0
  125. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-25-gem-synth-dedup-incremental-merge.md +0 -0
  126. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-26-kb-backup-restore.md +0 -0
  127. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-26-promote-skill-clear-reports-rewrite.md +0 -0
  128. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-27-release-all.md +0 -0
  129. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-28-bookshelf-flat-bundle.md +0 -0
  130. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-07-28-nightly-fulltest.md +0 -0
  131. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-07-session-to-permanent-cc-kimi.md +0 -0
  132. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-11-permanent-note-template.md +0 -0
  133. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-12-noteindex-frontmatter-limit-drop.md +0 -0
  134. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-15-delete-backlinks-cleanup.md +0 -0
  135. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-16-bm25-concurrent-write-race.md +0 -0
  136. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-21-index-verify-legacy-filenames.md +0 -0
  137. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-21-moc-density-diagnose.md +0 -0
  138. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-22-bm25-type-debt-cleanup.md +0 -0
  139. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-22-issue-392-cr-leftovers.md +0 -0
  140. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-22-jfox-moc-skill.md +0 -0
  141. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-22-markdownlint-adoption.md +0 -0
  142. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-22-moc-create-update.md +0 -0
  143. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-25-moc-create-update-json-shorthand.md +0 -0
  144. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-27-issue-436-organize-archive.md +0 -0
  145. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-28-cpu-default-model-bge-small-zh.md +0 -0
  146. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-29-english-readme-baseline.md +0 -0
  147. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-29-issue-383-add-permanent-dedup.md +0 -0
  148. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-29-louvain-moc-clustering.md +0 -0
  149. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-30-gem-synth-prompt-judgment.md +0 -0
  150. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-30-test-config-isolation.md +0 -0
  151. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-08-31-deterministic-cli-reference.md +0 -0
  152. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-01-ci-docs-drift-gate.md +0 -0
  153. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-02-plugin-inventory-enum-checks.md +0 -0
  154. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-03-jfox-moc-batch-quality-chapter.md +0 -0
  155. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-03-moc-member-management.md +0 -0
  156. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-04-chromadb-dim-migration-ndarray.md +0 -0
  157. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-05-moc-diagnose-archived-orphan.md +0 -0
  158. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-07-bm25-fresh-kb-logging.md +0 -0
  159. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-07-pi-prompt-capture.md +0 -0
  160. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-09-from-dict-non-dict-guard.md +0 -0
  161. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-09-nightly-test-failures.md +0 -0
  162. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-10-skill-sync-399-overview-jfox-judge.md +0 -0
  163. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-14-json-schema-unify.md +0 -0
  164. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-14-lightweight-install.md +0 -0
  165. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-14-wiki-link-self-link.md +0 -0
  166. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-23-h1-strip-normalization.md +0 -0
  167. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/plans/2026-09-24-adjacent-backticks-swallow-wiki-links.md +0 -0
  168. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-03-bugfixes-design.md +0 -0
  169. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-12-skill-redesign-design.md +0 -0
  170. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-13-pr-auto-code-review-design.md +0 -0
  171. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-14-show-command-design.md +0 -0
  172. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-15-gpu-embedding-design.md +0 -0
  173. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-15-session-summary-confirmation-design.md +0 -0
  174. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-21-release-skill-design.md +0 -0
  175. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-26-fix-daemon-deprecation-warnings-design.md +0 -0
  176. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-27-intranet-model-download-design.md +0 -0
  177. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-28-tag-filtering-design.md +0 -0
  178. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-29-daemon-stop-fix-design.md +0 -0
  179. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-04-30-jfox-kb-env-var-design.md +0 -0
  180. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-05-03-jfox-check-design.md +0 -0
  181. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-05-03-list-notes-skip-summary-design.md +0 -0
  182. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-05-03-log-level-fix-design.md +0 -0
  183. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-05-04-list-notes-index-design.md +0 -0
  184. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-05-06-atomic-write-design.md +0 -0
  185. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-05-09-jfox-plugin-design.md +0 -0
  186. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-05-09-session-note-type-design.md +0 -0
  187. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-05-20-modelscope-migration-design.md +0 -0
  188. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-02-todo-note-type-design.md +0 -0
  189. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-16-kimi-code-auto-summary-design.md +0 -0
  190. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-17-index-rebuild-backlinks-design.md +0 -0
  191. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-17-using-jfox-skill-design.md +0 -0
  192. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-18-archive-soft-delete-design.md +0 -0
  193. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-18-self-update-command-design.md +0 -0
  194. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-21-fragment-capture-design.md +0 -0
  195. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-21-gem-synthesis-design.md +0 -0
  196. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-06-25-gem-synth-throttle-ledger-design.md +0 -0
  197. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-08-candidate-promote-design.md +0 -0
  198. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-12-gem-synth-dedup-design.md +0 -0
  199. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-12-release-cc-plugin-skill-design.md +0 -0
  200. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-12-session-summary-streamline-design.md +0 -0
  201. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-12-show-json-design.md +0 -0
  202. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-18-dedup-lifecycle-decouple-design.md +0 -0
  203. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-19-promote-skill-three-modes-design.md +0 -0
  204. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-25-bookshelf-design.md +0 -0
  205. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-25-gem-synth-dedup-incremental-merge-design.md +0 -0
  206. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-26-kb-backup-restore-design.md +0 -0
  207. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-26-promote-skill-clear-reports-rewrite-design.md +0 -0
  208. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-27-release-all-orchestration-design.md +0 -0
  209. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-07-28-bookshelf-flat-bundle-design.md +0 -0
  210. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-07-session-to-permanent-cc-kimi-design.md +0 -0
  211. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-11-permanent-note-template-design.md +0 -0
  212. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-12-noteindex-frontmatter-limit-drop-design.md +0 -0
  213. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-15-delete-backlinks-cleanup-design.md +0 -0
  214. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-16-bm25-concurrent-write-race-design.md +0 -0
  215. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-20-bm25-clear-orphan-followup-design.md +0 -0
  216. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-21-index-verify-legacy-filenames-design.md +0 -0
  217. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-21-moc-density-diagnose-design.md +0 -0
  218. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-22-bm25-type-debt-cleanup-design.md +0 -0
  219. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-22-issue-392-cr-leftovers-design.md +0 -0
  220. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-22-jfox-moc-skill-design.md +0 -0
  221. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-22-markdownlint-adoption-design.md +0 -0
  222. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-22-moc-create-update-design.md +0 -0
  223. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-25-moc-create-update-json-shorthand-design.md +0 -0
  224. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-27-issue-436-organize-archive-design.md +0 -0
  225. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-27-redirect-and-delete-guard.md +0 -0
  226. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-28-cpu-default-model-bge-small-zh-design.md +0 -0
  227. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-29-english-readme-baseline-design.md +0 -0
  228. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-29-issue-383-add-permanent-dedup-design.md +0 -0
  229. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-29-louvain-moc-clustering-design.md +0 -0
  230. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-30-gem-synth-prompt-judgment-design.md +0 -0
  231. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-30-test-config-isolation-design.md +0 -0
  232. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-08-31-deterministic-cli-reference-design.md +0 -0
  233. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-01-ci-docs-drift-gate-design.md +0 -0
  234. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-02-plugin-inventory-enum-checks-design.md +0 -0
  235. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-03-jfox-moc-batch-quality-chapter-design.md +0 -0
  236. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-03-moc-member-management-design.md +0 -0
  237. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-04-chromadb-dim-migration-ndarray-design.md +0 -0
  238. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-05-moc-diagnose-archived-orphan-design.md +0 -0
  239. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-07-bm25-fresh-kb-logging-design.md +0 -0
  240. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-07-pi-prompt-capture-design.md +0 -0
  241. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-09-from-dict-non-dict-guard-design.md +0 -0
  242. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-09-nightly-test-failures-design.md +0 -0
  243. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-10-lightweight-install-embed-extra-design.md +0 -0
  244. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-10-skill-sync-399-overview-jfox-judge-design.md +0 -0
  245. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-14-json-schema-unify-design.md +0 -0
  246. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-14-wiki-link-self-link-design.md +0 -0
  247. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-23-h1-strip-normalization-design.md +0 -0
  248. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/superpowers/specs/2026-09-24-adjacent-backticks-swallow-wiki-links-design.md +0 -0
  249. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/docs/troubleshooting.md +0 -0
  250. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jessica-jones-static-cable.md +0 -0
  251. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/__main__.py +0 -0
  252. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/add_dedup.py +0 -0
  253. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/__init__.py +0 -0
  254. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/cli.py +0 -0
  255. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/extractor.py +0 -0
  256. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/kimi_source.py +0 -0
  257. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/ledger.py +0 -0
  258. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/loop.py +0 -0
  259. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/runner.py +0 -0
  260. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/scanner.py +0 -0
  261. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/schedule.py +0 -0
  262. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/auto_summary/sources.py +0 -0
  263. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/backup/__init__.py +0 -0
  264. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/backup/cli.py +0 -0
  265. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/backup/loop.py +0 -0
  266. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/backup/manager.py +0 -0
  267. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/backup/schedule.py +0 -0
  268. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/bm25_index.py +0 -0
  269. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/bookshelf/__init__.py +0 -0
  270. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/bookshelf/cli.py +0 -0
  271. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/bookshelf/meta.py +0 -0
  272. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/bookshelf/store.py +0 -0
  273. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/candidates/__init__.py +0 -0
  274. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/candidates/cli.py +0 -0
  275. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/candidates/service.py +0 -0
  276. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/config.py +0 -0
  277. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/daemon/__init__.py +0 -0
  278. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/daemon/__main__.py +0 -0
  279. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/daemon/client.py +0 -0
  280. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/daemon/process.py +0 -0
  281. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/daemon/server.py +0 -0
  282. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/dedup.py +0 -0
  283. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/dedup_lifecycle.py +0 -0
  284. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/embedding_backend.py +0 -0
  285. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/embedding_migration.py +0 -0
  286. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/formatters.py +0 -0
  287. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/fragment/__init__.py +0 -0
  288. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/fragment/cli.py +0 -0
  289. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/fragment/internal_sources.py +0 -0
  290. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/fragment/service.py +0 -0
  291. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/fragment/store.py +0 -0
  292. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/git_extractor.py +0 -0
  293. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/global_config.py +0 -0
  294. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/graph.py +0 -0
  295. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/indexer.py +0 -0
  296. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/kb_manager.py +0 -0
  297. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/moc/__init__.py +0 -0
  298. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/moc/cluster.py +0 -0
  299. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/moc/draft.py +0 -0
  300. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/moc/generate.py +0 -0
  301. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/model_downloader.py +0 -0
  302. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/note_index.py +0 -0
  303. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/performance.py +0 -0
  304. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/__init__.py +0 -0
  305. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/actions.py +0 -0
  306. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/cli.py +0 -0
  307. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/grounding.py +0 -0
  308. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/judge.py +0 -0
  309. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/lifecycle.py +0 -0
  310. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/runner.py +0 -0
  311. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/service.py +0 -0
  312. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/store.py +0 -0
  313. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/prompts/transcript.py +0 -0
  314. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/search_engine.py +0 -0
  315. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/template.py +0 -0
  316. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/template_cli.py +0 -0
  317. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/utils.py +0 -0
  318. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/jfox/vector_store.py +0 -0
  319. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/package.json +0 -0
  320. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/.claude-plugin/plugin.json +0 -0
  321. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/hooks/fragment-capture.sh +0 -0
  322. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/hooks/hooks.json +0 -0
  323. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/bookshelf/SKILL.md +0 -0
  324. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/ingest/SKILL.md +0 -0
  325. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/manage/SKILL.md +0 -0
  326. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/organize/SKILL.md +0 -0
  327. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/promote/SKILL.md +0 -0
  328. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/search/SKILL.md +0 -0
  329. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/session-summary/SKILL.md +0 -0
  330. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/session-to-permanent/SKILL.md +0 -0
  331. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/cc-plugin/skills/using-jfox/SKILL.md +0 -0
  332. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/README.md +0 -0
  333. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/kimi.plugin.json +0 -0
  334. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-admin/SKILL.md +0 -0
  335. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-auto-summary/SKILL.md +0 -0
  336. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-ingest/SKILL.md +0 -0
  337. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-manage/SKILL.md +0 -0
  338. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-organize/SKILL.md +0 -0
  339. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-promote/SKILL.md +0 -0
  340. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-search/SKILL.md +0 -0
  341. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-session-summary/SKILL.md +0 -0
  342. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-session-to-permanent/SKILL.md +0 -0
  343. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/jfox-template/SKILL.md +0 -0
  344. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/kimi-plugin/skills/using-jfox/SKILL.md +0 -0
  345. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/pi-plugin/README.md +0 -0
  346. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/pi-plugin/extensions/jfox-prompt-capture.ts +0 -0
  347. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/packages/pi-plugin/test/run-tests.ts +0 -0
  348. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/pytest.ini +0 -0
  349. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/run_full_test.ps1 +0 -0
  350. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/LOUVAIN_VERIFY.md +0 -0
  351. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/download-model-intranet.sh +0 -0
  352. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/enum_coverage.py +0 -0
  353. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/generate_docs.py +0 -0
  354. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/louvain_verify.py +0 -0
  355. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/plugin_inventory.py +0 -0
  356. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/scripts/verify_lightweight_install.sh +0 -0
  357. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/README.md +0 -0
  358. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/kimi-cli/jfox-common/SKILL.md +0 -0
  359. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/kimi-cli/jfox-ingest/SKILL.md +0 -0
  360. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/kimi-cli/jfox-organize/SKILL.md +0 -0
  361. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/kimi-cli/jfox-search/SKILL.md +0 -0
  362. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/kimi-cli/jfox-session-summary/SKILL.md +0 -0
  363. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-bookshelf/SKILL.md +0 -0
  364. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-ci/SKILL.md +0 -0
  365. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-common/SKILL.md +0 -0
  366. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-ingest/SKILL.md +0 -0
  367. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-judge/SKILL.md +0 -0
  368. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-moc/SKILL.md +0 -0
  369. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-organize/SKILL.md +0 -0
  370. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-overview/SKILL.md +0 -0
  371. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-promote/SKILL.md +0 -0
  372. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-release/SKILL.md +0 -0
  373. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-release-all/SKILL.md +0 -0
  374. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-release-cc-plugin/SKILL.md +0 -0
  375. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-release-kimi-plugin/SKILL.md +0 -0
  376. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-search/SKILL.md +0 -0
  377. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-session-summary/SKILL.md +0 -0
  378. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/skills-recommend/pi/jfox-session-to-permanent/SKILL.md +0 -0
  379. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/COVERAGE_PLAN.md +0 -0
  380. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/MIGRATION.md +0 -0
  381. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/TESTS.md +0 -0
  382. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/conftest.py +0 -0
  383. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/fixtures/bulk_import_notes.json +0 -0
  384. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/__init__.py +0 -0
  385. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_auto_summary_kimi.py +0 -0
  386. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_backlinks.py +0 -0
  387. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_candidate_promote_flow.py +0 -0
  388. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_cli_reference_generation.py +0 -0
  389. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_edit_roundtrip.py +0 -0
  390. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_fragment_capture_flow.py +0 -0
  391. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_index_rebuild_backlinks.py +0 -0
  392. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_links_edit_add.py +0 -0
  393. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_model_download.py +0 -0
  394. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_no_embed_degradation.py +0 -0
  395. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_plugin_inventory.py +0 -0
  396. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/integration/test_tag_filter_cli.py +0 -0
  397. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/performance/__init__.py +0 -0
  398. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/performance/test_performance.py +0 -0
  399. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_add_dedup_cli.py +0 -0
  400. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_advanced_features.py +0 -0
  401. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_cli_format.py +0 -0
  402. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_config_set_unit.py +0 -0
  403. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_config_unit.py +0 -0
  404. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_core_workflow.py +0 -0
  405. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_embedding_device.py +0 -0
  406. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_hybrid_search.py +0 -0
  407. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_integration.py +0 -0
  408. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_json_schema_contract.py +0 -0
  409. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_kb_current.py +0 -0
  410. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/test_suggest_links.py +0 -0
  411. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/__init__.py +0 -0
  412. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/bookshelf/__init__.py +0 -0
  413. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/bookshelf/conftest.py +0 -0
  414. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/bookshelf/test_cli.py +0 -0
  415. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/bookshelf/test_meta.py +0 -0
  416. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/bookshelf/test_store.py +0 -0
  417. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/conftest.py +0 -0
  418. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_add_backfill_links.py +0 -0
  419. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_add_dedup.py +0 -0
  420. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_archive.py +0 -0
  421. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_atomic_write.py +0 -0
  422. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_cli.py +0 -0
  423. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_config_sources.py +0 -0
  424. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_defaults.py +0 -0
  425. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_extractor.py +0 -0
  426. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_ledger.py +0 -0
  427. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_loop.py +0 -0
  428. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_runner.py +0 -0
  429. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_scanner.py +0 -0
  430. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_schedule.py +0 -0
  431. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_auto_summary_status.py +0 -0
  432. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_backup.py +0 -0
  433. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_bm25_batch.py +0 -0
  434. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_bm25_concurrency.py +0 -0
  435. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_bm25_fresh_kb_logging.py +0 -0
  436. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_candidates_migrated_cli.py +0 -0
  437. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_check.py +0 -0
  438. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_conftest_mock.py +0 -0
  439. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_content_file.py +0 -0
  440. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_daemon_cli.py +0 -0
  441. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_daemon_process.py +0 -0
  442. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_dedup_lifecycle.py +0 -0
  443. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_default_model_switch.py +0 -0
  444. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_delete_backlink_cleanup.py +0 -0
  445. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_delete_guard.py +0 -0
  446. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_edit.py +0 -0
  447. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_embed_availability.py +0 -0
  448. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_embedding_backend_daemon_only.py +0 -0
  449. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_embedding_local_load.py +0 -0
  450. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_embedding_migration.py +0 -0
  451. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_enum_coverage.py +0 -0
  452. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_format_unify.py +0 -0
  453. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_formatters.py +0 -0
  454. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_fragment_cli.py +0 -0
  455. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_fragment_config.py +0 -0
  456. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_fragment_hook.py +0 -0
  457. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_fragment_internal_sources.py +0 -0
  458. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_fragment_service.py +0 -0
  459. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_fragment_store.py +0 -0
  460. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_generate_docs.py +0 -0
  461. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_git_extractor.py +0 -0
  462. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_global_config.py +0 -0
  463. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_indexer_clear_before_rebuild.py +0 -0
  464. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_indexer_verify.py +0 -0
  465. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_json_mode.py +0 -0
  466. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_kb_manager.py +0 -0
  467. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_kimi_extractor.py +0 -0
  468. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_kimi_plugin_skills.py +0 -0
  469. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_kimi_scanner.py +0 -0
  470. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_lazy_import.py +0 -0
  471. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_ledger_migration.py +0 -0
  472. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_list_notes_skip.py +0 -0
  473. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_logging_config.py +0 -0
  474. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_cli.py +0 -0
  475. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_cluster.py +0 -0
  476. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_create_cli.py +0 -0
  477. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_draft.py +0 -0
  478. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_generate.py +0 -0
  479. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_integration.py +0 -0
  480. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_member_cli.py +0 -0
  481. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_skill_docs.py +0 -0
  482. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_moc_update_cli.py +0 -0
  483. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_model_downloader.py +0 -0
  484. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_add_config.py +0 -0
  485. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_candidate_fields.py +0 -0
  486. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_candidate_filename.py +0 -0
  487. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_generator.py +0 -0
  488. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_index.py +0 -0
  489. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_lifecycle_hooks.py +0 -0
  490. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_promote.py +0 -0
  491. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_type_candidate.py +0 -0
  492. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_note_type_structure.py +0 -0
  493. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_plugin_inventory.py +0 -0
  494. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_actions.py +0 -0
  495. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_backfill.py +0 -0
  496. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_candidate.py +0 -0
  497. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_capture.py +0 -0
  498. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_cli.py +0 -0
  499. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_grounding.py +0 -0
  500. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_judge.py +0 -0
  501. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_retirement.py +0 -0
  502. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_runner.py +0 -0
  503. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_store.py +0 -0
  504. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_prompt_transcript.py +0 -0
  505. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_pyproject_embed_extra.py +0 -0
  506. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_redirect.py +0 -0
  507. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_release_all_helper.py +0 -0
  508. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_release_cc_plugin_helper.py +0 -0
  509. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_release_helper.py +0 -0
  510. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_release_helper_verify.py +0 -0
  511. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_release_kimi_plugin_helper.py +0 -0
  512. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_runner_multi_source.py +0 -0
  513. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_scanner_list.py +0 -0
  514. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_search_engine_embed_warning.py +0 -0
  515. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_session_file_source.py +0 -0
  516. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_session_note.py +0 -0
  517. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_session_source.py +0 -0
  518. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_show.py +0 -0
  519. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_system_prompt_sections.py +0 -0
  520. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_tag_filter.py +0 -0
  521. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_template.py +0 -0
  522. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_template_cli.py +0 -0
  523. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_update.py +0 -0
  524. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_use_kb_env_var.py +0 -0
  525. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_using_jfox_skill.py +0 -0
  526. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_vector_store_clear.py +0 -0
  527. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_vector_store_dimension_warning.py +0 -0
  528. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_vector_store_embed_guard.py +0 -0
  529. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_vector_store_embeddings.py +0 -0
  530. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/unit/test_wiki_link_resolution.py +0 -0
  531. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/utils/__init__.py +0 -0
  532. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/utils/assertions.py +0 -0
  533. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/utils/jfox_cli.py +0 -0
  534. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/utils/note_generator.py +0 -0
  535. {jfox_cli-1.16.1 → jfox_cli-1.16.3}/tests/utils/temp_kb.py +0 -0
@@ -2,6 +2,24 @@
2
2
 
3
3
  All notable changes to jfox-cli will be documented in this file.
4
4
 
5
+ ## [1.16.3] - 2026-10-10
6
+
7
+ ### Fixes
8
+
9
+ - **index**: status shows only persistent real state — drop watcher counters, add bm25_indexed/last_rebuild (#539) (#567)
10
+ - **nightly**: install [embed] extra, fail-fast env guard, --ref debug mode (#559) (#565)
11
+ - **index**: rebuild --backlinks 写回改重读+分歧检测窄写,修复并发 edit 正文被静默覆盖 (#561) (#562)
12
+
13
+ [1.16.3]: https://github.com/zhuxixi/jfox/compare/v1.16.2...v1.16.3
14
+
15
+ ## [1.16.2] - 2026-09-25
16
+
17
+ ### Fixes
18
+
19
+ - **note**: 加载笔记钉住真实磁盘路径,update_note 规范化写——消除同 ID 双文件 (#549) (#553)
20
+
21
+ [1.16.2]: https://github.com/zhuxixi/jfox/compare/v1.16.1...v1.16.2
22
+
5
23
  ## [1.16.1] - 2026-09-24
6
24
 
7
25
  ### Fixes
@@ -18,8 +36,12 @@ All notable changes to jfox-cli will be documented in this file.
18
36
 
19
37
  ### Fixes
20
38
 
39
+ - **note**: 加载的笔记钉住真实磁盘路径——文件名与当前字段分家时,补 backlink / rebuild --backlinks / MOC 成员回填不再写出同 ID 双文件,`show`/`delete` 也能正确读写该笔记;`update_note` 改为显式规范化写并在成功后重钉路径 (#549)
40
+
21
41
  - **note_index**: 剥离改单遍合并正则——反引号包 HTML 注释不再吞后续 wiki link (#548) (#550)
22
42
 
43
+ - **index**: `index rebuild --backlinks` 写回改为「重读→分歧检测→原子写」:检测到并发修改或文件缺失的笔记本轮跳过(计入新 JSON 字段 `backlinks_skipped`,下轮重建自愈),并发 `edit` 的正文不再被旧快照静默覆盖 (#561)
44
+
23
45
  ## [1.16.0] - 2026-09-23
24
46
 
25
47
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: jfox-cli
3
- Version: 1.16.1
3
+ Version: 1.16.3
4
4
  Summary: JFox - Zettelkasten 知识管理 CLI 工具
5
5
  Project-URL: Homepage, https://github.com/zhuxixi/jfox
6
6
  Project-URL: Repository, https://github.com/zhuxixi/jfox
@@ -54,7 +54,7 @@ else:
54
54
  | `daily` | `success, date, total, notes[]` | 列表 `notes` | `{success, error}` |
55
55
  | `inbox` | `success, total, notes[]` | 列表 `notes` | `{success, error}` |
56
56
  | `suggest-links` | `success, content, total_suggestions, threshold, suggestions[]` + 可选 `warnings[]`(#519 降级为关键词匹配时) | 列表 `suggestions` | `{success, error}` |
57
- | `index <action>` | `rebuild`:`success, indexed, semantic_skipped, bm25_rebuilt, bm25_indexed[, backlinks_*]` + 可选 `warnings[]`(#519 无语义服务时 `semantic_skipped:true`、仅重建 BM25);`rebuild-bm25`:`success, indexed`;`status`:`success, total_indexed, last_indexed, pending_changes, vector_store`;`bm25-status`:`success, bm25_index{...}`;`verify`:`success`(语义见特殊语义说明)+ 透传字段 | 平铺 | `{success, error}`(错误分支需显式 `--json` 开启,见特殊语义说明) |
57
+ | `index <action>` | `rebuild`:`success, indexed, semantic_skipped, bm25_rebuilt, bm25_indexed[, backlinks_*]` + 可选 `warnings[]`(#519 无语义服务时 `semantic_skipped:true`、仅重建 BM25);`rebuild-bm25`:`success, indexed`;`status`:`success, vector_store, bm25_indexed, last_rebuild`;`bm25-status`:`success, bm25_index{...}`;`verify`:`success`(语义见特殊语义说明)+ 透传字段 | 平铺 | `{success, error}`(错误分支需显式 `--json` 开启,见特殊语义说明) |
58
58
  | `kb <action>` | `list`:`success, current, knowledge_bases[]`;`create/switch/use/remove/delete/rename`:`success, message`;`current/info`:`success, name, path, total_notes, by_type, created, last_used, description, is_current` | 平铺实体 | `{success, error}`(错误分支需显式 `--json` 开启,见特殊语义说明) |
59
59
  | `ingest-log` | `success, repo_path, commits_extracted, imported, failed, total`(空仓库带 `message`) | 平铺计数 | `{success, error}`;缺语义组件拒绝:`{success, code:"embed_dependency_missing", error}`(#519) |
60
60
  | `bulk-import` | `success, imported, failed, total`(`--json` 默认开启) | 平铺计数 | `{success, error}`;缺语义组件拒绝:`{success, code:"embed_dependency_missing", error}`(#519) |
@@ -0,0 +1,305 @@
1
+ # #549 同 ID 双文件修复 实现计划
2
+
3
+ > **For agentic workers:** Steps use checkbox (`- [ ]`) syntax to track progress. Follow instructions exactly.
4
+
5
+ **Spec:** `docs/superpowers/specs/2026-09-24-issue-549-twin-files-design.md`(commit 47b236c)
6
+
7
+ **Work from:** `/home/elling/git-repo/github/jfox/.pi/worktrees/issue-549-stale-name-twin-files`(所有路径以此为根;禁止碰主 checkout)
8
+
9
+ **技术摘要:** 路径语义两分法——`from_markdown` 钉住真实路径(`save_note` 就地写)+ `update_note` 写盘目标改用 `expected_filepath`(规范化写 + 成功后重钉 pin)。
10
+
11
+ ## 验收归属(spec 矩阵 → 任务)
12
+
13
+ | 验收 ID | 归属 |
14
+ |---------|------|
15
+ | A1/A2(路径纯函数 + 钉路径) | Task 1 |
16
+ | A3(update_note 自愈 + 重钉 pin) | Task 1 |
17
+ | A9(护栏:改名/移目录保持绿) | Task 1 |
18
+ | A4–A8(CLI 症状层) | Task 2 |
19
+ | CHANGELOG/注释交付物 | Task 3 |
20
+ | U1(真实库受控演练) | 合并后单独人工项,非代码任务 |
21
+
22
+ ## 前置事实(实现者必读,违反即返工)
23
+
24
+ 1. **原子性约束**:`models.py` 的钉路径与 `note.py` 的 `update_note` 调整**必须同任务同 commit 落地**。中间态(只钉路径)会让 `tests/unit/test_edit.py:72-82`(改标题→改名)与 `:373-390`(改 type→跨目录)挂掉(E2b 已实证)。
25
+ 2. **契约边界**:改 title/topic/type 的意图只走 `update_note`;`save_note` 是就地写。不要给 `save_note` 加任何「找旧文件/改名」逻辑——本修复不靠它。
26
+ 3. **改动面**:只允许碰 `jfox/models.py`、`jfox/note.py`、两个测试文件、`CHANGELOG.md`。不碰 `moc/`、`redirect.py`、其余 save_note 站点(钉路径后它们自动受益)。
27
+ 4. **测试命名**:文件/用例名避开子串 `search|semantic|embedding|vector|query|suggest`;用例标题全局唯一(#483 闸门)。本计划的文件名已满足:`test_note_path_rules.py`、`test_stale_name_single_file.py`。
28
+ 5. **夹具手法**:发散名 = 只 rename 文件(保留 id 前缀),不改 frontmatter——`cli_fast` 每条命令独立子进程,索引按盘重建,发散笔记可被正常发现/解析。
29
+ 6. **#483 之后 add permanent 有 dedup 闸门**:测试标题彼此差异要大,别用近似标题。
30
+
31
+ ---
32
+
33
+ ## Task 1: 路径语义核心(models.py + note.py + A1/A2/A3/A9)
34
+
35
+ **Files:**
36
+
37
+ - Create: `tests/unit/test_note_path_rules.py`
38
+ - Create: `tests/integration/test_stale_name_single_file.py`(先只放 A3 两个用例)
39
+ - Modify: `jfox/models.py`
40
+ - Modify: `jfox/note.py`
41
+
42
+ - [ ] **Step 1: 写失败测试**
43
+
44
+ `tests/unit/test_note_path_rules.py`(A1/A2,纯函数层,无需 KB 写入):
45
+
46
+ ```python
47
+ class TestExpectedFilepath:
48
+ def test_permanent_uses_title_slug(self) # A1:expected == config.notes_dir/"permanent"/filename
49
+ def test_session_uses_topic(self) # A1
50
+ def test_session_without_topic_falls_back_to_title(self) # A1
51
+ def test_fleeting_uses_dash_form(self) # A1:{id[:8]}-{id[8:]}.md
52
+ def test_expected_filepath_ignores_pin(self) # A1:set_filepath 后 expected 不变、filepath 变
53
+
54
+ class TestFromMarkdownPin:
55
+ def test_with_filepath_pins_it(self) # A2:note.filepath == 传入路径
56
+ def test_without_filepath_stays_unpinned(self) # A2:note.filepath == expected_filepath
57
+ ```
58
+
59
+ `tests/integration/test_stale_name_single_file.py`(A3,先行两个用例;发散名 helper 共用):
60
+
61
+ ```python
62
+ def _diverge(filepath: str) -> Path:
63
+ """只 rename 文件制造发散名(保留 id 前缀),模拟外部改标题未同步改名"""
64
+ p = Path(filepath)
65
+ d = p.with_name(f"{p.stem}-diverged.md")
66
+ p.rename(d)
67
+ return d
68
+
69
+
70
+ def _files_for(dir_path: Path, nid: str) -> list:
71
+ return sorted(dir_path.glob(f"{nid}*.md"))
72
+
73
+
74
+ class TestUpdateSelfHeal:
75
+ def test_edit_title_on_diverged_name_canonicalizes(self, cli_fast):
76
+ """A3:发散名笔记经 edit --title 后规范化为规则名,全程单文件"""
77
+ # add permanent → 从 add 的 JSON 取 note.filepath → _diverge →
78
+ # cli_fast.edit(id, title="全新标题X") →
79
+ # 断言 _files_for 单文件、文件名含新标题 slug、旧发散名不存在
80
+
81
+ def test_second_save_after_update_no_resurrect(self, temp_kb_registered):
82
+ """A3:同对象 update_note 后再 save_note,不复活旧路径(重钉 pin 契约)"""
83
+ # 复用 test_delete_backlink_cleanup.py 的 temp_kb_registered + use_kb 模式:
84
+ # load → note.update_note(改标题)→ 对同对象 note.save_note →
85
+ # 断言旧路径文件未被重新创建,且规则名文件唯一
86
+ ```
87
+
88
+ (`temp_kb_registered` 参照 `tests/unit/test_delete_backlink_cleanup.py` 的用法;若该 fixture 名不匹配,用 conftest 中已有的等价临时 KB 上下文。)
89
+
90
+ - [ ] **Step 2: 运行确认失败**
91
+
92
+ ```bash
93
+ uv run pytest tests/unit/test_note_path_rules.py tests/integration/test_stale_name_single_file.py -x -q
94
+ ```
95
+
96
+ 预期:`expected_filepath` 不存在(AttributeError)/ 钉路径未生效 → FAIL。只确认 RED,不修。
97
+
98
+ - [ ] **Step 3: 实现 `jfox/models.py`**
99
+
100
+ ① 新增 property(放 `filepath` 旁,注释为交付物):
101
+
102
+ ```python
103
+ @property
104
+ def expected_filepath(self) -> Path:
105
+ """按当前字段现算的规则路径(type 目录 + filename),不看 _filepath pin。
106
+
107
+ #549 两分法的另一半:update_note(规范化写)以本属性为写盘目标;
108
+ filepath 在笔记从磁盘加载时被钉住为真实路径(就地写)。
109
+ 用 note_obj.filepath 代替本属性的已知后果:钉路径后改名判据
110
+ `old != note.filepath` 恒假,edit --title / 改 type 不再改名移动
111
+ (tests/unit/test_edit.py:72-82、:373-390 必挂)。
112
+ """
113
+ from .config import config
114
+
115
+ return config.notes_dir / self.type.value / self.filename
116
+ ```
117
+
118
+ ② `from_markdown`:把 `return cls(...)` 改为先存变量再钉路径(注释为交付物):
119
+
120
+ ```python
121
+ note = cls(
122
+ ... # 现有参数不动
123
+ )
124
+ # #549:钉住加载来源的真实磁盘路径。此后 note.filepath 返回真实路径,
125
+ # save_note(就地写)写回原文件——文件名与当前字段分家时也不会在规则名上
126
+ # 另写同 id 双文件。需要「按当前字段重新定址」的操作(改标题/改 type)
127
+ # 请走 note.update_note,其写盘目标用 expected_filepath。
128
+ if filepath is not None:
129
+ note._filepath = Path(filepath)
130
+ return note
131
+ ```
132
+
133
+ ③ `filepath` property 的 docstring 补一句「加载的笔记此处返回真实磁盘路径;规则路径请用 expected_filepath」。
134
+
135
+ - [ ] **Step 4: 实现 `jfox/note.py`**
136
+
137
+ ① `update_note` 写盘段(原 `_atomic_write(note_obj.filepath, ...)` 处):
138
+
139
+ ```python
140
+ # 规范化写(#549):目标路径按当前字段现算,不看加载 pin。
141
+ target = note_obj.expected_filepath
142
+ _atomic_write(target, note_obj.to_markdown())
143
+
144
+ if old_filepath != target and old_filepath.exists():
145
+ old_filepath.unlink()
146
+ logger.info(f"Renamed note file: {old_filepath} -> {target}")
147
+
148
+ # #549:写盘成功后把 pin 重钉到刚写入的路径——否则同一对象随后的
149
+ # save_note(就地写)会按陈旧 pin 写回旧路径、复活同 id 双文件。
150
+ note_obj.set_filepath(target)
151
+ ```
152
+
153
+ ② `save_note` docstring 补契约边界(交付物):
154
+
155
+ ```
156
+ 注意(#549):写盘目标是 note.filepath——对从磁盘加载的笔记即「就地写回
157
+ 加载路径」;就地写不保证文件名随字段变化。改 title/topic/type 的意图请用
158
+ update_note(规范化写:按当前字段现算目标并删除旧文件)。
159
+ ```
160
+
161
+ - [ ] **Step 5: 运行确认通过**
162
+
163
+ ```bash
164
+ uv run pytest tests/unit/test_note_path_rules.py tests/integration/test_stale_name_single_file.py -q
165
+ ```
166
+
167
+ 预期全绿。
168
+
169
+ - [ ] **Step 6: 护栏回归(A9)**
170
+
171
+ ```bash
172
+ uv run pytest tests/unit/test_edit.py -q
173
+ ```
174
+
175
+ 预期全绿(改标题改名、改 type 跨目录不受影响)。
176
+
177
+ - [ ] **Step 7: 快速回归**
178
+
179
+ ```bash
180
+ uv run pytest tests/unit -m "not embedding and not slow" -q
181
+ ```
182
+
183
+ - [ ] **Step 8: commit**
184
+
185
+ ```bash
186
+ git add jfox/models.py jfox/note.py tests/unit/test_note_path_rules.py tests/integration/test_stale_name_single_file.py
187
+ git commit -m "fix(note): 加载笔记钉住真实路径,update_note 规范化写+重钉 pin——消除同 ID 双文件(#549 A1-A3/A9)"
188
+ ```
189
+
190
+ ---
191
+
192
+ ## Task 2: CLI 症状层集成测试(A4–A8)
193
+
194
+ **Files:**
195
+
196
+ - Modify: `tests/integration/test_stale_name_single_file.py`
197
+
198
+ - [ ] **Step 1: 补五个测试类(TDD:先写先跑,应在 Task 1 的实现上直接转绿——若红说明 Task 1 有漏)**
199
+
200
+ ```python
201
+ class TestAddBackfill:
202
+ def test_add_link_to_diverged_target_keeps_single_file(self, cli_fast):
203
+ """A4:add 链接发散名目标 → 单文件 + backlinks 落真实文件"""
204
+ # A = add permanent(标题「回填目标甲」)→ _diverge →
205
+ # B = add「链向 [[回填目标甲]]」→
206
+ # 断言 _files_for(A) 单文件(发散名那份)、A 文件 backlinks 含 B.id
207
+
208
+ class TestEditBackfill:
209
+ def test_edit_add_link_diverged_target_keeps_single_file(self, cli_fast):
210
+ """A5:edit 新增链接 → 单文件 + backlinks 落位"""
211
+ def test_edit_remove_link_diverged_target_keeps_single_file(self, cli_fast):
212
+ """A5:edit 移除链接 → backlinks 移除 + 仍单文件"""
213
+
214
+ class TestRebuildBacklinks:
215
+ def test_rebuild_touches_diverged_note_in_place(self, cli_fast):
216
+ """A6:rebuild --backlinks 触及发散名笔记时单文件"""
217
+ # 造 links/backlinks 必变化:直接改发散文件 frontmatter,给 backlinks 加一个假 id
218
+ # cli_fast.index_rebuild(backlinks=True) →
219
+ # 断言单文件、backlinks 被重算(假 id 消失)
220
+
221
+ class TestShowDelete:
222
+ def test_show_reads_diverged_note(self, cli_fast):
223
+ """A7:show 发散名笔记 success=true(此前报 Errno 2)"""
224
+ def test_delete_removes_real_file(self, cli_fast):
225
+ """A7:delete --force 删真实文件(无入链前置)→ glob 为空"""
226
+
227
+ class TestMocMemberBackfill:
228
+ def test_moc_backfill_diverged_member_keeps_single_file(self, temp_kb_registered):
229
+ """A8:moc 成员回填(python 级 backfill_moc_backlinks)→ 单文件"""
230
+ # 构造 structure Note(或 CLI add --type structure)+ 发散名成员
231
+ # 调 jfox.moc.generate.backfill_moc_backlinks(moc_note, [member_id], cfg)
232
+ # 断言单文件 + backlinks 含 moc.id
233
+ ```
234
+
235
+ - [ ] **Step 2: 运行该文件全量**
236
+
237
+ ```bash
238
+ uv run pytest tests/integration/test_stale_name_single_file.py -q
239
+ ```
240
+
241
+ - [ ] **Step 3: 相关既有集成测试回归**
242
+
243
+ ```bash
244
+ uv run pytest tests/integration/test_links_edit_add.py tests/integration/test_index_rebuild_backlinks.py tests/integration/test_edit_roundtrip.py tests/unit/test_delete_backlink_cleanup.py tests/unit/test_note_promote.py -q
245
+ ```
246
+
247
+ 预期全绿(同族回填/晋升链路未受影响)。
248
+
249
+ - [ ] **Step 4: commit**
250
+
251
+ ```bash
252
+ git add tests/integration/test_stale_name_single_file.py
253
+ git commit -m "test(links): 发散名笔记 CLI 症状层集成测试——add/edit/rebuild/show+delete/moc 均单文件(#549 A4-A8)"
254
+ ```
255
+
256
+ ---
257
+
258
+ ## Task 3: CHANGELOG + 注释交付物复核 + 全量回归
259
+
260
+ **Files:**
261
+
262
+ - Modify: `CHANGELOG.md`
263
+
264
+ - [ ] **Step 1: `## [Unreleased]` 的 `### Fixed` 下加条目**
265
+
266
+ ```markdown
267
+ - links: 加载的笔记钉住真实磁盘路径——文件名与当前字段分家时,补 backlink / rebuild --backlinks / MOC 成员回填不再写出同 ID 双文件,`show`/`delete` 也能正确读写该笔记;`update_note` 改为显式规范化写并在成功后重钉路径(#549)
268
+ ```
269
+
270
+ - [ ] **Step 2: 注释交付物复核(对照 spec §7)**:`filepath` property、`from_markdown`、`update_note` 三处注释齐(两分法、E2b 后果、重钉原因);不齐则补。
271
+
272
+ - [ ] **Step 3: markdownlint**
273
+
274
+ ```bash
275
+ npx --yes markdownlint-cli2@0.23.2 "CHANGELOG.md"
276
+ ```
277
+
278
+ - [ ] **Step 4: 全量快速回归(本地 CR 前置)**
279
+
280
+ ```bash
281
+ uv run pytest tests/ -m "not embedding and not slow" -q
282
+ ```
283
+
284
+ - [ ] **Step 5: commit**
285
+
286
+ ```bash
287
+ git add CHANGELOG.md
288
+ git commit -m "docs(changelog): #549 同 ID 双文件修复条目"
289
+ ```
290
+
291
+ ---
292
+
293
+ ## 完成标准
294
+
295
+ - A1–A9 全部有对应测试且全绿;U1 留待合并后用户点头执行(spec §5)。
296
+ - 快速套件 `tests/ -m "not embedding and not slow"` 全绿。
297
+ - 分支只含 4 个 commit(spec / 核心修复 / 症状层测试 / changelog),主 checkout 零改动。
298
+
299
+ ---
300
+
301
+ ## 执行偏差记录(终审补记)
302
+
303
+ 1. **测试文件名更名**:spec 中的 `tests/unit/test_note_path_semantics.py` 实际落地为 `test_note_path_rules.py`——#483 命名约束要求避开子串 `semantic`(spec 已同步修订)。
304
+ 2. **分支为 6 个 commit 而非 4 个**:Task 1 的 lint fix wave(ruff/black)amend 进核心 commit;第 5 个 commit `a5ed229` 为终审挂账的注释债清理(`redirect.py`、`moc/cli.py`、`test_moc_member_commands.py` 纯注释/docstring——reviewer 指出「from_markdown 不回填 `_filepath`」在修复后已成假命题),第 6 个为本修订。前置事实 3 的「不碰 moc/、redirect.py」原指行为代码,注释债清理经 reviewer 建议纳入。
305
+ 3. **plan 的用例骨架微调**:`temp_kb_registered` 实为 `tests/utils/temp_kb.py` 的 context manager(非 fixture),A3-2/A8 按计划备注改用 `use_kb(kb_name)` + python 级 note API 模式。