Commit graph

40 commits

Author SHA1 Message Date
LLLin000
b41b4c88b7 fix: complete managed runtime cutover 2026-07-20 02:20:25 +08:00
LLLin000
c883d5fcc9 fix: share managed runtime and preserve credential state 2026-07-20 01:47:17 +08:00
LLLin000
0859652396 feat(#81): Release N+1 owner cutover — Python 3.11+ gate, fail-closed dispatch
- managed-runtime: collapse MIN_PYTHON_LEGACY/MIN_PYTHON_NEW → MIN_PYTHON (3.11)
- managed-runtime: remove PYTHON_310_DEPRECATED warning (3.10 now needs_repair)
- managed-runtime: single 3.11+ hard gate for all installations
- settings: cut getCachedPython fallback in _resolveRuntimeCommand → fail-closed
- settings: update Python version notices 3.10→3.11
- i18n: update user-facing Python version messages 3.10→3.11
- Python backend: checker.py, setup_wizard.py, status.py → 3.11 minimum
- Test updates: legacy fallback tests now verify fail-closed, 3.10 gating removed

Build: 264.4KB | Tests: 384/384 passed | Typecheck: clean
2026-07-19 14:32:12 +08:00
LLLin000
b4c0404542 feat: deliver actionable Maintenance inbox and privacy-safe issue drafts (#80)
Maintenance derives worst-constituent severity from Installation/
Library/OCR/Memory/Help with no independent probe/action. Items
route to constituent module actions; re-probe removes resolved
items. Accessible destructive confirmation (Tab trap, Escape,
inert bg, focus restore) plus editable locally redacted OCR
issue drafts with explicit GitHub open and no token storage.

Backend: probe_maintenance aggregation, quality_unacceptable
detection with scope_count, 78/78 gate.

Frontend: Maintenance tab, inbox rendering, PaperForgeConfirmModal,
PaperForgeIssueDraftModal with double-redaction, excluded-category
preview, _REAL_PROBE + strict envelope validation, container-query
responsive at 730/768px.

Verified: 78/78 backend, 384/385 plugin (1 known baseline),
typecheck clean, 264.9KB build, Obsidian 1.12.7 smoke.
2026-07-19 14:09:54 +08:00
LLLin000
c23d6b9a7f Merge branch 'feat/issue-78-capability-tracers' into feat/issue-80-maintenance
# Conflicts:
#	PROJECT-MANAGEMENT.md
#	paperforge/plugin/main.js
#	project/current/ocr-v2-active-queue.md
2026-07-19 10:26:47 +08:00
LLLin000
6bed0d7151 feat: migrate plugin credentials to SecretStorage (#79) 2026-07-19 01:00:41 +08:00
LLLin000
69a6223910 feat: expose library OCR and memory capability tracers (#78) 2026-07-18 18:13:08 +08:00
LLLin000
f8b85505c8 feat: add control center navigation, installation detail, and managed runtime dispatch 2026-07-16 02:55:33 +08:00
LLLin000
173a4e826e feat: add managed runtime service with version gating and slot retention 2026-07-16 02:55:23 +08:00
LLLin000
85a7ae30a2 feat: add OCR rebuild UX and capability tracer 2026-07-15 20:36:15 +08:00
LLLin000
d7b0a52780 closeout: record #69/#70 resolution, capability model, runtime architecture, maintenance regression fixes
- Update PROJECT-MANAGEMENT.md for #69/#70 resolved, #71/#72 as live frontier
- Add orthogonal capability/activity/attention model and managed-runtime immutable-slot
  architecture decisions to decision log and timeline
- Record OCR maintenance regression: canonical per-row action routing (display_action->verb),
  redo confirmation gate, cache manifest preservation (19/19 tests pass)
- Add research reports: docs/research/2026-07-14-capability-state-action-contract.md,
  docs/research/2026-07-14-managed-runtime-architecture.md
- Update project/current/ocr-v2-active-queue.md with resolved items and new frontier
2026-07-15 00:03:16 +08:00
LLLin000
3a516add86 fix: align OCR maintenance selection semantics 2026-07-14 18:27:53 +08:00
LLLin000
349d4f6dcb feat: add streaming OCR rebuild progress 2026-07-14 18:05:49 +08:00
LLLin000
b4ac277438 Merge branch 'feat/retrieval-recovery'
# Conflicts:
#	paperforge/commands/embed.py
2026-07-11 01:26:37 +08:00
LLLin000
6e4b446ca2 feat: add retrieval error code routing in classifyError
Maps 7 retrieval error codes (VECTOR_NOT_BUILT, VECTOR_CORRUPTED,
MODEL_CHANGED, BACKEND_UNAVAILABLE, TIMEOUT, INTERNAL_ERROR, NO_PYTHON)
to distinct UI states with type, message, recoverable flag, and action.

Adds 7 new test cases for the error classification routing.
2026-07-10 23:56:25 +08:00
LLLin000
1474c061a8 feat: surface drift state and invalidate maintenance cache 2026-07-05 16:52:17 +08:00
Research Assistant
48f486a434 Merge branch 'ocr-v2' 2026-06-29 02:03:23 +08:00
Research Assistant
fa814ec627 feat: redesign OCR maintenance tab for actionability 2026-06-19 18:01:06 +08:00
Research Assistant
a968ab14a7 feat: add OCR maintenance UI categorization 2026-06-19 17:54:00 +08:00
Research Assistant
b9885f369d feat: add Gemini CLI agent platform support (.gemini/skills) 2026-06-01 19:46:17 +08:00
Research Assistant
2ab524aecf feat: ocr reading-order fixes, single-source fulltext, redo closed-loop, release notes & manual 2026-06-01 18:12:31 +08:00
Research Assistant
18e90a4f6f feat: allow skipping OCR key during setup 2026-05-31 20:15:22 +08:00
Research Assistant
15bf3c6529 test: clean up brittle and low-value tests
- Remove 4 broken Python test files (ld_deep x3, path_normalization)
- Fix 2 vector_db tests to mock get_collection instead of chromadb.PersistentClient
- Remove 2 JS test files (settings-panels, vector-ready — trivial)
- Trim 3 buildRuntimeInstallCommand tests from errors.test.ts
- Narrow CI unit-tests to only run tests/unit/ (gate-level)
2026-05-24 20:00:47 +08:00
Research Assistant
3619fe264f Revert "test: clean up brittle and low-value tests"
This reverts commit 5ad9a54a66.
2026-05-24 19:59:24 +08:00
Research Assistant
5ad9a54a66 test: clean up brittle and low-value tests
- Remove 4 broken Python test files (ld_deep x3, path_normalization)
- Fix 2 vector_db tests to use correct mock target (get_collection)
- Remove 2 JS test files (settings-panels, vector-ready — trivial)
- Trim 3 buildRuntimeInstallCommand tests from errors.test.ts
- Narrow CI unit-tests to only run tests/unit/ (gate-level)
2026-05-24 19:59:14 +08:00
Research Assistant
3106e300ab test(plugin): migrate runtime test to TypeScript 2026-05-24 17:32:01 +08:00
Research Assistant
a448cc8295 test(plugin): migrate vector-ready test to TypeScript 2026-05-24 17:29:11 +08:00
Research Assistant
05288c9332 test(plugin): migrate settings-panels test to TypeScript 2026-05-24 17:29:11 +08:00
Research Assistant
11467b6893 test(plugin): migrate errors test to TypeScript 2026-05-24 17:29:10 +08:00
Research Assistant
bfed51e569 test(plugin): migrate commands test to TypeScript 2026-05-24 17:29:09 +08:00
Research Assistant
add220d93c feat(discussion): remove JSON output and markdown escaping 2026-05-18 21:09:54 +08:00
Research Assistant
2b552be9e6 feat: runtime contract hardening + skill/command truth alignment (Package A+B)
Atomic snapshots, canonical index mutation serialization, sync post-clean truth,
plugin path config-awareness, embed stop signal honesty, full snapshot bootstrap,
pf_ prefix unification, workflow command/lifecycle/path corrections,
mechanical/cognitive route separation with unknown-command guard.
2026-05-16 22:38:43 +08:00
Research Assistant
075c9107bf docs: add memory runtime health spec and regression helpers 2026-05-15 01:29:54 +08:00
Research Assistant
064644c7c6 test: update ACTIONS count from 6 to 4, remove copy-context test cases 2026-05-10 14:10:41 +08:00
Research Assistant
f885adae48 feat: skill auto-deploy in update + Copy Context as pure JS + shared skill_deploy service
- New services/skill_deploy.py: single source of truth for agent skill deployment
  - AGENT_CONFIGS with 9 platforms, all vault-local
  - deploy_skills() with install/update mode (overwrite flag)
  - Used by both setup wizard and update worker
- update.py: _deploy_all_skills() after pip/git/zip update
- setup_wizard.py: delegates skill deploy to shared service
- config.py: add agent_platform default
- main.js: Copy Context + Copy Collection Context now pure JS
  - Uses in-memory _cachedItems / _currentPaperEntry
  - No subprocess spawn, no timeout, no JSON parse errors
- testable.js: remove needsKey/needsFilter from context actions
- commands.test.mjs: update assertions for removed flags
2026-05-10 12:33:23 +08:00
Research Assistant
06c2ce5f9d fix(plugin): extract testable functions to src/testable.js, fix vitest imports
- Move resolvePythonExecutable, getPluginVersion, classifyError, ACTIONS, etc. to src/testable.js
- main.js now requires from ./src/testable.js instead of inline duplication
- Tests import from ../src/testable.js (no obsidian dependency)
- Remove vitest obsidian mock setup (no longer needed)
- Fixes L3 Plugin Tests that failed because main.js requires 'obsidian'
2026-05-10 11:03:31 +08:00
Research Assistant
71d2d05f41 fix(plugin): mock obsidian module for vitest — main.js requires it at top level 2026-05-10 10:52:21 +08:00
Research Assistant
aff3cfe622 fix(plugin): update Vitest imports after src/ inline refactor
- Add named exports for testable functions (resolvePythonExecutable, getPluginVersion, etc.)
- Update test imports from ../src/*.js to ../main.js
- Fix repair action test: disabled flag was removed when ACTIONS was inlined
2026-05-10 10:48:06 +08:00
Research Assistant
0d49b5d285 fix: pre-existing test issues blocking CI on non-Windows platforms
test_ocr_preflight: mock fitz.open (not builtins.open) + set needs_sanitize=True
  - Code uses fitz.open(), not builtins.open() — mock was targeting wrong function
  - fitz.open() only called when meta.needs_sanitize is true — mock returned {} which skipped it
  - These tests were always broken but CI never ran before v2.1

test_e2e_cli: guard against None stdout in doctor_verdict test on Windows CI

L3 runtime.test.mjs: use platform-agnostic path matching
  - path.join produces / on Linux but \\\\ on Windows — test used \\\\ only
2026-05-09 18:06:37 +08:00
Research Assistant
2cb223ddbb feat(53-001): extract src/ modules from main.js and add Vitest test infrastructure
- runtime.js: resolvePythonExecutable, getPluginVersion, checkRuntimeVersion
- errors.js: classifyError, buildRuntimeInstallCommand, parseRuntimeStatus
- commands.js: ACTIONS, buildCommandArgs, runSubprocess
- package.json with vitest + obsidian-test-mocks + jsdom
- vitest.config.ts with jsdom environment
- 42 Vitest tests across 3 test files
- Refactored main.js to import from src/ modules
2026-05-09 00:05:19 +08:00