From f3dbd9cb95b86c8d0b23028cb9eafbee41d30afa Mon Sep 17 00:00:00 2001 From: Jamie Pine Date: Tue, 2 Dec 2025 15:10:50 -0800 Subject: [PATCH] Add task tracking docs and interface tasks --- .tasks/Claude.md | 19 +- .tasks/{ => core}/ACT-000-action-system.md | 0 .../ACT-001-action-manager-registry.md | 0 .tasks/{ => core}/AI-000-ai-epic.md | 0 .tasks/{ => core}/AI-001-ai-agent.md | 0 .../AI-002-create-finetuning-dataset.md | 0 .../CLI-000-command-line-interface.md | 0 .../{ => core}/CLOUD-000-cloud-as-a-peer.md | 0 .../CLOUD-001-design-cloud-core-infra.md | 0 .tasks/{ => core}/CLOUD-002-relay-server.md | 0 .tasks/{ => core}/CLOUD-003-cloud-volume.md | 0 .tasks/{ => core}/CORE-000-vdfs-core.md | 0 .../CORE-001-entry-centric-model.md | 0 .../{ => core}/CORE-002-sdpath-addressing.md | 0 .../{ => core}/CORE-003-content-identity.md | 0 .tasks/{ => core}/CORE-004-closure-table.md | 0 .../{ => core}/CORE-005-file-type-system.md | 0 .../CORE-006-semantic-tagging-architecture.md | 0 .../CORE-008-virtual-sidecar-system.md | 0 .../CORE-009-user-managed-collections.md | 0 .../CORE-010-file-ingestion-workflow.md | 0 .../CORE-011-unified-event-system.md | 0 .../CORE-012-resource-type-registry-swift.md | 0 ...E-013-resource-type-registry-typescript.md | 0 .../CORE-014-specta-codegen-events.md | 0 .../CORE-015-normalized-cache-swift.md | 0 .../CORE-016-normalized-cache-typescript.md | 0 .../{ => core}/CORE-017-optimistic-updates.md | 0 .../DEV-000-development-validation.md | 0 .../DEV-001-multi-process-test-framework.md | 0 .tasks/{ => core}/FILE-000-file-operations.md | 0 .tasks/{ => core}/FILE-001-file-copy-job.md | 0 .../{ => core}/FILE-002-file-deletion-job.md | 0 .../FILE-003-cloud-volume-file-operations.md | 0 .../{ => core}/FSYNC-000-file-sync-system.md | 0 .../FSYNC-001-delete-strategy-pattern.md | 0 .../{ => core}/FSYNC-002-database-schema.md | 0 .../{ => core}/FSYNC-003-sync-service-core.md | 0 .../FSYNC-004-service-integration.md | 0 .../{ => core}/FSYNC-005-advanced-features.md | 0 .../INDEX-000-indexing-file-management.md | 0 .../INDEX-001-location-watcher-service.md | 0 ...NDEX-002-stale-file-detection-algorithm.md | 0 ...-003-watcher-device-ownership-violation.md | 0 .../INDEX-004-nested-locations-support.md | 0 .tasks/{ => core}/JOB-000-job-system.md | 0 .tasks/{ => core}/JOB-001-job-manager.md | 0 .tasks/{ => core}/JOB-002-job-logging.md | 0 .../JOB-003-parallel-task-execution.md | 0 .../{ => core}/LOC-000-location-operations.md | 0 .../LOC-001-location-management-actions.md | 0 ...l-locations-via-pure-hierarchical-model.md | 0 .tasks/{ => core}/LSYNC-000-library-sync.md | 0 .../LSYNC-001-design-library-sync-protocol.md | 0 .tasks/{ => core}/LSYNC-002-metadata-sync.md | 0 .../LSYNC-003-library-sync-setup.md | 0 .../LSYNC-006-transaction-manager-core.md | 0 .tasks/{ => core}/LSYNC-007-syncable-trait.md | 0 .../{ => core}/LSYNC-008-sync-log-schema.md | 0 .../LSYNC-009-hlc-implementation.md | 0 .tasks/{ => core}/LSYNC-010-sync-service.md | 0 .../LSYNC-011-conflict-resolution.md | 0 .../LSYNC-012-entry-sync-bulk-optimization.md | 0 .../LSYNC-013-sync-protocol-handler.md | 0 .../LSYNC-020-device-owned-deletion-sync.md | 0 .../LSYNC-021-unified-sync-config.md | 0 ...SYNC-022-sync-metrics-and-observability.md | 0 ...SYNC-023-rebuild-closure-tables-on-sync.md | 0 .tasks/{ => core}/NET-000-networking.md | 0 .tasks/{ => core}/NET-001-iroh-p2p-stack.md | 0 .tasks/{ => core}/NET-002-device-pairing.md | 0 .../{ => core}/NET-003-spacedrop-protocol.md | 0 .../{ => core}/PLUG-000-wasm-plugin-system.md | 0 .../PLUG-001-integrate-wasm-runtime.md | 0 .../PLUG-002-define-vdfs-plugin-api.md | 0 .../PLUG-003-develop-twitter-agent-poc.md | 0 .../{ => core}/RES-000-resource-management.md | 0 .../{ => core}/RES-001-adaptive-throttling.md | 0 .../SEARCH-000-temporal-semantic-search.md | 0 .../{ => core}/SEARCH-001-async-searchjob.md | 0 ...CH-002-two-stage-fts-semantic-reranking.md | 0 .../SEARCH-003-unified-vector-repositories.md | 0 .../SEC-000-security-and-privacy.md | 0 .../{ => core}/SEC-002-database-encryption.md | 0 .tasks/{ => core}/SEC-004-rbac-system.md | 0 .../SEC-005-secure-credential-vault.md | 0 .../{ => core}/SEC-006-certificate-pinning.md | 0 ...-encryption-policies-for-public-sharing.md | 0 .../{ => core}/VOL-000-volume-operations.md | 0 ...physicalclass-and-location-logicalclass.md | 0 ...VOL-002-automatic-volume-classification.md | 0 ...elligent-storage-tiering-warning-system.md | 0 ...004-remote-volume-indexing-with-opendal.md | 0 ...e-as-a-virtual-volume-for-direct-import.md | 0 .../{ => core}/VSS-001-sdpath-integration.md | 0 .../VSS-002-job-system-integration.md | 0 ...ference-sidecars-for-live-photo-support.md | 0 .../{ => core}/VSS-004-cross-device-sync.md | 0 .tasks/{ => core}/VSS-005-cli-integration.md | 0 .tasks/interface/EXPL-000-explorer-epic.md | 43 ++ .tasks/interface/EXPL-001-grid-view.md | 33 ++ .tasks/interface/EXPL-002-list-view.md | 32 + .tasks/interface/EXPL-003-file-operations.md | 34 ++ .tasks/interface/MEDIA-000-media-viewer.md | 44 ++ .../interface/NAV-000-multi-window-system.md | 32 + .tasks/interface/SETS-000-settings-epic.md | 45 ++ .tasks/interface/SRCH-000-search-interface.md | 45 ++ .tasks/interface/UI-000-interface-v2.md | 40 ++ .../interface/UI-001-component-primitives.md | 57 ++ apps/landing | 2 +- crates/task-validator/src/main.rs | 28 +- docs/core/task-tracking.mdx | 558 ++++++++++++++++++ docs/mint.json | 2 +- 113 files changed, 1004 insertions(+), 10 deletions(-) rename .tasks/{ => core}/ACT-000-action-system.md (100%) rename .tasks/{ => core}/ACT-001-action-manager-registry.md (100%) rename .tasks/{ => core}/AI-000-ai-epic.md (100%) rename .tasks/{ => core}/AI-001-ai-agent.md (100%) rename .tasks/{ => core}/AI-002-create-finetuning-dataset.md (100%) rename .tasks/{ => core}/CLI-000-command-line-interface.md (100%) rename .tasks/{ => core}/CLOUD-000-cloud-as-a-peer.md (100%) rename .tasks/{ => core}/CLOUD-001-design-cloud-core-infra.md (100%) rename .tasks/{ => core}/CLOUD-002-relay-server.md (100%) rename .tasks/{ => core}/CLOUD-003-cloud-volume.md (100%) rename .tasks/{ => core}/CORE-000-vdfs-core.md (100%) rename .tasks/{ => core}/CORE-001-entry-centric-model.md (100%) rename .tasks/{ => core}/CORE-002-sdpath-addressing.md (100%) rename .tasks/{ => core}/CORE-003-content-identity.md (100%) rename .tasks/{ => core}/CORE-004-closure-table.md (100%) rename .tasks/{ => core}/CORE-005-file-type-system.md (100%) rename .tasks/{ => core}/CORE-006-semantic-tagging-architecture.md (100%) rename .tasks/{ => core}/CORE-008-virtual-sidecar-system.md (100%) rename .tasks/{ => core}/CORE-009-user-managed-collections.md (100%) rename .tasks/{ => core}/CORE-010-file-ingestion-workflow.md (100%) rename .tasks/{ => core}/CORE-011-unified-event-system.md (100%) rename .tasks/{ => core}/CORE-012-resource-type-registry-swift.md (100%) rename .tasks/{ => core}/CORE-013-resource-type-registry-typescript.md (100%) rename .tasks/{ => core}/CORE-014-specta-codegen-events.md (100%) rename .tasks/{ => core}/CORE-015-normalized-cache-swift.md (100%) rename .tasks/{ => core}/CORE-016-normalized-cache-typescript.md (100%) rename .tasks/{ => core}/CORE-017-optimistic-updates.md (100%) rename .tasks/{ => core}/DEV-000-development-validation.md (100%) rename .tasks/{ => core}/DEV-001-multi-process-test-framework.md (100%) rename .tasks/{ => core}/FILE-000-file-operations.md (100%) rename .tasks/{ => core}/FILE-001-file-copy-job.md (100%) rename .tasks/{ => core}/FILE-002-file-deletion-job.md (100%) rename .tasks/{ => core}/FILE-003-cloud-volume-file-operations.md (100%) rename .tasks/{ => core}/FSYNC-000-file-sync-system.md (100%) rename .tasks/{ => core}/FSYNC-001-delete-strategy-pattern.md (100%) rename .tasks/{ => core}/FSYNC-002-database-schema.md (100%) rename .tasks/{ => core}/FSYNC-003-sync-service-core.md (100%) rename .tasks/{ => core}/FSYNC-004-service-integration.md (100%) rename .tasks/{ => core}/FSYNC-005-advanced-features.md (100%) rename .tasks/{ => core}/INDEX-000-indexing-file-management.md (100%) rename .tasks/{ => core}/INDEX-001-location-watcher-service.md (100%) rename .tasks/{ => core}/INDEX-002-stale-file-detection-algorithm.md (100%) rename .tasks/{ => core}/INDEX-003-watcher-device-ownership-violation.md (100%) rename .tasks/{ => core}/INDEX-004-nested-locations-support.md (100%) rename .tasks/{ => core}/JOB-000-job-system.md (100%) rename .tasks/{ => core}/JOB-001-job-manager.md (100%) rename .tasks/{ => core}/JOB-002-job-logging.md (100%) rename .tasks/{ => core}/JOB-003-parallel-task-execution.md (100%) rename .tasks/{ => core}/LOC-000-location-operations.md (100%) rename .tasks/{ => core}/LOC-001-location-management-actions.md (100%) rename .tasks/{ => core}/LOC-005-virtual-locations-via-pure-hierarchical-model.md (100%) rename .tasks/{ => core}/LSYNC-000-library-sync.md (100%) rename .tasks/{ => core}/LSYNC-001-design-library-sync-protocol.md (100%) rename .tasks/{ => core}/LSYNC-002-metadata-sync.md (100%) rename .tasks/{ => core}/LSYNC-003-library-sync-setup.md (100%) rename .tasks/{ => core}/LSYNC-006-transaction-manager-core.md (100%) rename .tasks/{ => core}/LSYNC-007-syncable-trait.md (100%) rename .tasks/{ => core}/LSYNC-008-sync-log-schema.md (100%) rename .tasks/{ => core}/LSYNC-009-hlc-implementation.md (100%) rename .tasks/{ => core}/LSYNC-010-sync-service.md (100%) rename .tasks/{ => core}/LSYNC-011-conflict-resolution.md (100%) rename .tasks/{ => core}/LSYNC-012-entry-sync-bulk-optimization.md (100%) rename .tasks/{ => core}/LSYNC-013-sync-protocol-handler.md (100%) rename .tasks/{ => core}/LSYNC-020-device-owned-deletion-sync.md (100%) rename .tasks/{ => core}/LSYNC-021-unified-sync-config.md (100%) rename .tasks/{ => core}/LSYNC-022-sync-metrics-and-observability.md (100%) rename .tasks/{ => core}/LSYNC-023-rebuild-closure-tables-on-sync.md (100%) rename .tasks/{ => core}/NET-000-networking.md (100%) rename .tasks/{ => core}/NET-001-iroh-p2p-stack.md (100%) rename .tasks/{ => core}/NET-002-device-pairing.md (100%) rename .tasks/{ => core}/NET-003-spacedrop-protocol.md (100%) rename .tasks/{ => core}/PLUG-000-wasm-plugin-system.md (100%) rename .tasks/{ => core}/PLUG-001-integrate-wasm-runtime.md (100%) rename .tasks/{ => core}/PLUG-002-define-vdfs-plugin-api.md (100%) rename .tasks/{ => core}/PLUG-003-develop-twitter-agent-poc.md (100%) rename .tasks/{ => core}/RES-000-resource-management.md (100%) rename .tasks/{ => core}/RES-001-adaptive-throttling.md (100%) rename .tasks/{ => core}/SEARCH-000-temporal-semantic-search.md (100%) rename .tasks/{ => core}/SEARCH-001-async-searchjob.md (100%) rename .tasks/{ => core}/SEARCH-002-two-stage-fts-semantic-reranking.md (100%) rename .tasks/{ => core}/SEARCH-003-unified-vector-repositories.md (100%) rename .tasks/{ => core}/SEC-000-security-and-privacy.md (100%) rename .tasks/{ => core}/SEC-002-database-encryption.md (100%) rename .tasks/{ => core}/SEC-004-rbac-system.md (100%) rename .tasks/{ => core}/SEC-005-secure-credential-vault.md (100%) rename .tasks/{ => core}/SEC-006-certificate-pinning.md (100%) rename .tasks/{ => core}/SEC-007-per-library-encryption-policies-for-public-sharing.md (100%) rename .tasks/{ => core}/VOL-000-volume-operations.md (100%) rename .tasks/{ => core}/VOL-001-volume-physicalclass-and-location-logicalclass.md (100%) rename .tasks/{ => core}/VOL-002-automatic-volume-classification.md (100%) rename .tasks/{ => core}/VOL-003-intelligent-storage-tiering-warning-system.md (100%) rename .tasks/{ => core}/VOL-004-remote-volume-indexing-with-opendal.md (100%) rename .tasks/{ => core}/VOL-005-treat-connected-iphone-as-a-virtual-volume-for-direct-import.md (100%) rename .tasks/{ => core}/VSS-001-sdpath-integration.md (100%) rename .tasks/{ => core}/VSS-002-job-system-integration.md (100%) rename .tasks/{ => core}/VSS-003-reference-sidecars-for-live-photo-support.md (100%) rename .tasks/{ => core}/VSS-004-cross-device-sync.md (100%) rename .tasks/{ => core}/VSS-005-cli-integration.md (100%) create mode 100644 .tasks/interface/EXPL-000-explorer-epic.md create mode 100644 .tasks/interface/EXPL-001-grid-view.md create mode 100644 .tasks/interface/EXPL-002-list-view.md create mode 100644 .tasks/interface/EXPL-003-file-operations.md create mode 100644 .tasks/interface/MEDIA-000-media-viewer.md create mode 100644 .tasks/interface/NAV-000-multi-window-system.md create mode 100644 .tasks/interface/SETS-000-settings-epic.md create mode 100644 .tasks/interface/SRCH-000-search-interface.md create mode 100644 .tasks/interface/UI-000-interface-v2.md create mode 100644 .tasks/interface/UI-001-component-primitives.md create mode 100644 docs/core/task-tracking.mdx diff --git a/.tasks/Claude.md b/.tasks/Claude.md index 92fba0017..11b0439b8 100644 --- a/.tasks/Claude.md +++ b/.tasks/Claude.md @@ -2,7 +2,12 @@ Hi Claude, Claude here. Your owner has pointed you here with absolutely no context. This document is your prompt. -This directory tracks the complete development of Spacedrive. Tasks are always kept up-to-date, though some may need updating based on recent work. Your job is to check git history for changes, validate completed tasks against the instructions below, and update their status accordingly. +This directory tracks the complete development of Spacedrive. Tasks are organized into subdirectories: +- `core/` - Backend/Rust tasks (CORE, JOB, INDEX, LSYNC, etc.) +- `interface/` - Frontend/React tasks (UI, EXPL, SETS, MEDIA, etc.) +- `mobile/` - Mobile-specific tasks (IOS, MACOS, AND) + +Tasks are always kept up-to-date, though some may need updating based on recent work. Your job is to check git history for changes, validate completed tasks against the instructions below, and update their status accordingly. ## Quick Start @@ -28,10 +33,14 @@ Look for feature implementations, major refactors, or completed work that might For each recent feature/change: -- **Read the task file** directly from `.tasks/TASK-ID-name.md` +- **Read the task file** directly from `.tasks/{subdirectory}/TASK-ID-name.md` + - Core/backend work: `.tasks/core/` + - Interface work: `.tasks/interface/` + - Mobile work: `.tasks/mobile/` - **Read the acceptance criteria** carefully - this is your checklist - **Read all implementation files** mentioned in the task (they're usually listed in an "Implementation Files" section) -- **Check core/tests/** for integration tests that validate the feature +- **Check core/tests/** for integration tests that validate the feature (for core tasks) +- **Check packages/interface/src/** for interface implementations (for interface tasks) - Verify each acceptance criterion is actually met in the code ### 4. Update Task Status @@ -147,8 +156,8 @@ git log --oneline -15 Now use the Read tool to thoroughly verify: ```` -# 4. Read the task file -Read .tasks/CLOUD-003-cloud-volume.md +# 4. Read the task file (note the subdirectory) +Read .tasks/core/CLOUD-003-cloud-volume.md # 5. Read every implementation file listed in the task Read core/src/volume/backend/mod.rs diff --git a/.tasks/ACT-000-action-system.md b/.tasks/core/ACT-000-action-system.md similarity index 100% rename from .tasks/ACT-000-action-system.md rename to .tasks/core/ACT-000-action-system.md diff --git a/.tasks/ACT-001-action-manager-registry.md b/.tasks/core/ACT-001-action-manager-registry.md similarity index 100% rename from .tasks/ACT-001-action-manager-registry.md rename to .tasks/core/ACT-001-action-manager-registry.md diff --git a/.tasks/AI-000-ai-epic.md b/.tasks/core/AI-000-ai-epic.md similarity index 100% rename from .tasks/AI-000-ai-epic.md rename to .tasks/core/AI-000-ai-epic.md diff --git a/.tasks/AI-001-ai-agent.md b/.tasks/core/AI-001-ai-agent.md similarity index 100% rename from .tasks/AI-001-ai-agent.md rename to .tasks/core/AI-001-ai-agent.md diff --git a/.tasks/AI-002-create-finetuning-dataset.md b/.tasks/core/AI-002-create-finetuning-dataset.md similarity index 100% rename from .tasks/AI-002-create-finetuning-dataset.md rename to .tasks/core/AI-002-create-finetuning-dataset.md diff --git a/.tasks/CLI-000-command-line-interface.md b/.tasks/core/CLI-000-command-line-interface.md similarity index 100% rename from .tasks/CLI-000-command-line-interface.md rename to .tasks/core/CLI-000-command-line-interface.md diff --git a/.tasks/CLOUD-000-cloud-as-a-peer.md b/.tasks/core/CLOUD-000-cloud-as-a-peer.md similarity index 100% rename from .tasks/CLOUD-000-cloud-as-a-peer.md rename to .tasks/core/CLOUD-000-cloud-as-a-peer.md diff --git a/.tasks/CLOUD-001-design-cloud-core-infra.md b/.tasks/core/CLOUD-001-design-cloud-core-infra.md similarity index 100% rename from .tasks/CLOUD-001-design-cloud-core-infra.md rename to .tasks/core/CLOUD-001-design-cloud-core-infra.md diff --git a/.tasks/CLOUD-002-relay-server.md b/.tasks/core/CLOUD-002-relay-server.md similarity index 100% rename from .tasks/CLOUD-002-relay-server.md rename to .tasks/core/CLOUD-002-relay-server.md diff --git a/.tasks/CLOUD-003-cloud-volume.md b/.tasks/core/CLOUD-003-cloud-volume.md similarity index 100% rename from .tasks/CLOUD-003-cloud-volume.md rename to .tasks/core/CLOUD-003-cloud-volume.md diff --git a/.tasks/CORE-000-vdfs-core.md b/.tasks/core/CORE-000-vdfs-core.md similarity index 100% rename from .tasks/CORE-000-vdfs-core.md rename to .tasks/core/CORE-000-vdfs-core.md diff --git a/.tasks/CORE-001-entry-centric-model.md b/.tasks/core/CORE-001-entry-centric-model.md similarity index 100% rename from .tasks/CORE-001-entry-centric-model.md rename to .tasks/core/CORE-001-entry-centric-model.md diff --git a/.tasks/CORE-002-sdpath-addressing.md b/.tasks/core/CORE-002-sdpath-addressing.md similarity index 100% rename from .tasks/CORE-002-sdpath-addressing.md rename to .tasks/core/CORE-002-sdpath-addressing.md diff --git a/.tasks/CORE-003-content-identity.md b/.tasks/core/CORE-003-content-identity.md similarity index 100% rename from .tasks/CORE-003-content-identity.md rename to .tasks/core/CORE-003-content-identity.md diff --git a/.tasks/CORE-004-closure-table.md b/.tasks/core/CORE-004-closure-table.md similarity index 100% rename from .tasks/CORE-004-closure-table.md rename to .tasks/core/CORE-004-closure-table.md diff --git a/.tasks/CORE-005-file-type-system.md b/.tasks/core/CORE-005-file-type-system.md similarity index 100% rename from .tasks/CORE-005-file-type-system.md rename to .tasks/core/CORE-005-file-type-system.md diff --git a/.tasks/CORE-006-semantic-tagging-architecture.md b/.tasks/core/CORE-006-semantic-tagging-architecture.md similarity index 100% rename from .tasks/CORE-006-semantic-tagging-architecture.md rename to .tasks/core/CORE-006-semantic-tagging-architecture.md diff --git a/.tasks/CORE-008-virtual-sidecar-system.md b/.tasks/core/CORE-008-virtual-sidecar-system.md similarity index 100% rename from .tasks/CORE-008-virtual-sidecar-system.md rename to .tasks/core/CORE-008-virtual-sidecar-system.md diff --git a/.tasks/CORE-009-user-managed-collections.md b/.tasks/core/CORE-009-user-managed-collections.md similarity index 100% rename from .tasks/CORE-009-user-managed-collections.md rename to .tasks/core/CORE-009-user-managed-collections.md diff --git a/.tasks/CORE-010-file-ingestion-workflow.md b/.tasks/core/CORE-010-file-ingestion-workflow.md similarity index 100% rename from .tasks/CORE-010-file-ingestion-workflow.md rename to .tasks/core/CORE-010-file-ingestion-workflow.md diff --git a/.tasks/CORE-011-unified-event-system.md b/.tasks/core/CORE-011-unified-event-system.md similarity index 100% rename from .tasks/CORE-011-unified-event-system.md rename to .tasks/core/CORE-011-unified-event-system.md diff --git a/.tasks/CORE-012-resource-type-registry-swift.md b/.tasks/core/CORE-012-resource-type-registry-swift.md similarity index 100% rename from .tasks/CORE-012-resource-type-registry-swift.md rename to .tasks/core/CORE-012-resource-type-registry-swift.md diff --git a/.tasks/CORE-013-resource-type-registry-typescript.md b/.tasks/core/CORE-013-resource-type-registry-typescript.md similarity index 100% rename from .tasks/CORE-013-resource-type-registry-typescript.md rename to .tasks/core/CORE-013-resource-type-registry-typescript.md diff --git a/.tasks/CORE-014-specta-codegen-events.md b/.tasks/core/CORE-014-specta-codegen-events.md similarity index 100% rename from .tasks/CORE-014-specta-codegen-events.md rename to .tasks/core/CORE-014-specta-codegen-events.md diff --git a/.tasks/CORE-015-normalized-cache-swift.md b/.tasks/core/CORE-015-normalized-cache-swift.md similarity index 100% rename from .tasks/CORE-015-normalized-cache-swift.md rename to .tasks/core/CORE-015-normalized-cache-swift.md diff --git a/.tasks/CORE-016-normalized-cache-typescript.md b/.tasks/core/CORE-016-normalized-cache-typescript.md similarity index 100% rename from .tasks/CORE-016-normalized-cache-typescript.md rename to .tasks/core/CORE-016-normalized-cache-typescript.md diff --git a/.tasks/CORE-017-optimistic-updates.md b/.tasks/core/CORE-017-optimistic-updates.md similarity index 100% rename from .tasks/CORE-017-optimistic-updates.md rename to .tasks/core/CORE-017-optimistic-updates.md diff --git a/.tasks/DEV-000-development-validation.md b/.tasks/core/DEV-000-development-validation.md similarity index 100% rename from .tasks/DEV-000-development-validation.md rename to .tasks/core/DEV-000-development-validation.md diff --git a/.tasks/DEV-001-multi-process-test-framework.md b/.tasks/core/DEV-001-multi-process-test-framework.md similarity index 100% rename from .tasks/DEV-001-multi-process-test-framework.md rename to .tasks/core/DEV-001-multi-process-test-framework.md diff --git a/.tasks/FILE-000-file-operations.md b/.tasks/core/FILE-000-file-operations.md similarity index 100% rename from .tasks/FILE-000-file-operations.md rename to .tasks/core/FILE-000-file-operations.md diff --git a/.tasks/FILE-001-file-copy-job.md b/.tasks/core/FILE-001-file-copy-job.md similarity index 100% rename from .tasks/FILE-001-file-copy-job.md rename to .tasks/core/FILE-001-file-copy-job.md diff --git a/.tasks/FILE-002-file-deletion-job.md b/.tasks/core/FILE-002-file-deletion-job.md similarity index 100% rename from .tasks/FILE-002-file-deletion-job.md rename to .tasks/core/FILE-002-file-deletion-job.md diff --git a/.tasks/FILE-003-cloud-volume-file-operations.md b/.tasks/core/FILE-003-cloud-volume-file-operations.md similarity index 100% rename from .tasks/FILE-003-cloud-volume-file-operations.md rename to .tasks/core/FILE-003-cloud-volume-file-operations.md diff --git a/.tasks/FSYNC-000-file-sync-system.md b/.tasks/core/FSYNC-000-file-sync-system.md similarity index 100% rename from .tasks/FSYNC-000-file-sync-system.md rename to .tasks/core/FSYNC-000-file-sync-system.md diff --git a/.tasks/FSYNC-001-delete-strategy-pattern.md b/.tasks/core/FSYNC-001-delete-strategy-pattern.md similarity index 100% rename from .tasks/FSYNC-001-delete-strategy-pattern.md rename to .tasks/core/FSYNC-001-delete-strategy-pattern.md diff --git a/.tasks/FSYNC-002-database-schema.md b/.tasks/core/FSYNC-002-database-schema.md similarity index 100% rename from .tasks/FSYNC-002-database-schema.md rename to .tasks/core/FSYNC-002-database-schema.md diff --git a/.tasks/FSYNC-003-sync-service-core.md b/.tasks/core/FSYNC-003-sync-service-core.md similarity index 100% rename from .tasks/FSYNC-003-sync-service-core.md rename to .tasks/core/FSYNC-003-sync-service-core.md diff --git a/.tasks/FSYNC-004-service-integration.md b/.tasks/core/FSYNC-004-service-integration.md similarity index 100% rename from .tasks/FSYNC-004-service-integration.md rename to .tasks/core/FSYNC-004-service-integration.md diff --git a/.tasks/FSYNC-005-advanced-features.md b/.tasks/core/FSYNC-005-advanced-features.md similarity index 100% rename from .tasks/FSYNC-005-advanced-features.md rename to .tasks/core/FSYNC-005-advanced-features.md diff --git a/.tasks/INDEX-000-indexing-file-management.md b/.tasks/core/INDEX-000-indexing-file-management.md similarity index 100% rename from .tasks/INDEX-000-indexing-file-management.md rename to .tasks/core/INDEX-000-indexing-file-management.md diff --git a/.tasks/INDEX-001-location-watcher-service.md b/.tasks/core/INDEX-001-location-watcher-service.md similarity index 100% rename from .tasks/INDEX-001-location-watcher-service.md rename to .tasks/core/INDEX-001-location-watcher-service.md diff --git a/.tasks/INDEX-002-stale-file-detection-algorithm.md b/.tasks/core/INDEX-002-stale-file-detection-algorithm.md similarity index 100% rename from .tasks/INDEX-002-stale-file-detection-algorithm.md rename to .tasks/core/INDEX-002-stale-file-detection-algorithm.md diff --git a/.tasks/INDEX-003-watcher-device-ownership-violation.md b/.tasks/core/INDEX-003-watcher-device-ownership-violation.md similarity index 100% rename from .tasks/INDEX-003-watcher-device-ownership-violation.md rename to .tasks/core/INDEX-003-watcher-device-ownership-violation.md diff --git a/.tasks/INDEX-004-nested-locations-support.md b/.tasks/core/INDEX-004-nested-locations-support.md similarity index 100% rename from .tasks/INDEX-004-nested-locations-support.md rename to .tasks/core/INDEX-004-nested-locations-support.md diff --git a/.tasks/JOB-000-job-system.md b/.tasks/core/JOB-000-job-system.md similarity index 100% rename from .tasks/JOB-000-job-system.md rename to .tasks/core/JOB-000-job-system.md diff --git a/.tasks/JOB-001-job-manager.md b/.tasks/core/JOB-001-job-manager.md similarity index 100% rename from .tasks/JOB-001-job-manager.md rename to .tasks/core/JOB-001-job-manager.md diff --git a/.tasks/JOB-002-job-logging.md b/.tasks/core/JOB-002-job-logging.md similarity index 100% rename from .tasks/JOB-002-job-logging.md rename to .tasks/core/JOB-002-job-logging.md diff --git a/.tasks/JOB-003-parallel-task-execution.md b/.tasks/core/JOB-003-parallel-task-execution.md similarity index 100% rename from .tasks/JOB-003-parallel-task-execution.md rename to .tasks/core/JOB-003-parallel-task-execution.md diff --git a/.tasks/LOC-000-location-operations.md b/.tasks/core/LOC-000-location-operations.md similarity index 100% rename from .tasks/LOC-000-location-operations.md rename to .tasks/core/LOC-000-location-operations.md diff --git a/.tasks/LOC-001-location-management-actions.md b/.tasks/core/LOC-001-location-management-actions.md similarity index 100% rename from .tasks/LOC-001-location-management-actions.md rename to .tasks/core/LOC-001-location-management-actions.md diff --git a/.tasks/LOC-005-virtual-locations-via-pure-hierarchical-model.md b/.tasks/core/LOC-005-virtual-locations-via-pure-hierarchical-model.md similarity index 100% rename from .tasks/LOC-005-virtual-locations-via-pure-hierarchical-model.md rename to .tasks/core/LOC-005-virtual-locations-via-pure-hierarchical-model.md diff --git a/.tasks/LSYNC-000-library-sync.md b/.tasks/core/LSYNC-000-library-sync.md similarity index 100% rename from .tasks/LSYNC-000-library-sync.md rename to .tasks/core/LSYNC-000-library-sync.md diff --git a/.tasks/LSYNC-001-design-library-sync-protocol.md b/.tasks/core/LSYNC-001-design-library-sync-protocol.md similarity index 100% rename from .tasks/LSYNC-001-design-library-sync-protocol.md rename to .tasks/core/LSYNC-001-design-library-sync-protocol.md diff --git a/.tasks/LSYNC-002-metadata-sync.md b/.tasks/core/LSYNC-002-metadata-sync.md similarity index 100% rename from .tasks/LSYNC-002-metadata-sync.md rename to .tasks/core/LSYNC-002-metadata-sync.md diff --git a/.tasks/LSYNC-003-library-sync-setup.md b/.tasks/core/LSYNC-003-library-sync-setup.md similarity index 100% rename from .tasks/LSYNC-003-library-sync-setup.md rename to .tasks/core/LSYNC-003-library-sync-setup.md diff --git a/.tasks/LSYNC-006-transaction-manager-core.md b/.tasks/core/LSYNC-006-transaction-manager-core.md similarity index 100% rename from .tasks/LSYNC-006-transaction-manager-core.md rename to .tasks/core/LSYNC-006-transaction-manager-core.md diff --git a/.tasks/LSYNC-007-syncable-trait.md b/.tasks/core/LSYNC-007-syncable-trait.md similarity index 100% rename from .tasks/LSYNC-007-syncable-trait.md rename to .tasks/core/LSYNC-007-syncable-trait.md diff --git a/.tasks/LSYNC-008-sync-log-schema.md b/.tasks/core/LSYNC-008-sync-log-schema.md similarity index 100% rename from .tasks/LSYNC-008-sync-log-schema.md rename to .tasks/core/LSYNC-008-sync-log-schema.md diff --git a/.tasks/LSYNC-009-hlc-implementation.md b/.tasks/core/LSYNC-009-hlc-implementation.md similarity index 100% rename from .tasks/LSYNC-009-hlc-implementation.md rename to .tasks/core/LSYNC-009-hlc-implementation.md diff --git a/.tasks/LSYNC-010-sync-service.md b/.tasks/core/LSYNC-010-sync-service.md similarity index 100% rename from .tasks/LSYNC-010-sync-service.md rename to .tasks/core/LSYNC-010-sync-service.md diff --git a/.tasks/LSYNC-011-conflict-resolution.md b/.tasks/core/LSYNC-011-conflict-resolution.md similarity index 100% rename from .tasks/LSYNC-011-conflict-resolution.md rename to .tasks/core/LSYNC-011-conflict-resolution.md diff --git a/.tasks/LSYNC-012-entry-sync-bulk-optimization.md b/.tasks/core/LSYNC-012-entry-sync-bulk-optimization.md similarity index 100% rename from .tasks/LSYNC-012-entry-sync-bulk-optimization.md rename to .tasks/core/LSYNC-012-entry-sync-bulk-optimization.md diff --git a/.tasks/LSYNC-013-sync-protocol-handler.md b/.tasks/core/LSYNC-013-sync-protocol-handler.md similarity index 100% rename from .tasks/LSYNC-013-sync-protocol-handler.md rename to .tasks/core/LSYNC-013-sync-protocol-handler.md diff --git a/.tasks/LSYNC-020-device-owned-deletion-sync.md b/.tasks/core/LSYNC-020-device-owned-deletion-sync.md similarity index 100% rename from .tasks/LSYNC-020-device-owned-deletion-sync.md rename to .tasks/core/LSYNC-020-device-owned-deletion-sync.md diff --git a/.tasks/LSYNC-021-unified-sync-config.md b/.tasks/core/LSYNC-021-unified-sync-config.md similarity index 100% rename from .tasks/LSYNC-021-unified-sync-config.md rename to .tasks/core/LSYNC-021-unified-sync-config.md diff --git a/.tasks/LSYNC-022-sync-metrics-and-observability.md b/.tasks/core/LSYNC-022-sync-metrics-and-observability.md similarity index 100% rename from .tasks/LSYNC-022-sync-metrics-and-observability.md rename to .tasks/core/LSYNC-022-sync-metrics-and-observability.md diff --git a/.tasks/LSYNC-023-rebuild-closure-tables-on-sync.md b/.tasks/core/LSYNC-023-rebuild-closure-tables-on-sync.md similarity index 100% rename from .tasks/LSYNC-023-rebuild-closure-tables-on-sync.md rename to .tasks/core/LSYNC-023-rebuild-closure-tables-on-sync.md diff --git a/.tasks/NET-000-networking.md b/.tasks/core/NET-000-networking.md similarity index 100% rename from .tasks/NET-000-networking.md rename to .tasks/core/NET-000-networking.md diff --git a/.tasks/NET-001-iroh-p2p-stack.md b/.tasks/core/NET-001-iroh-p2p-stack.md similarity index 100% rename from .tasks/NET-001-iroh-p2p-stack.md rename to .tasks/core/NET-001-iroh-p2p-stack.md diff --git a/.tasks/NET-002-device-pairing.md b/.tasks/core/NET-002-device-pairing.md similarity index 100% rename from .tasks/NET-002-device-pairing.md rename to .tasks/core/NET-002-device-pairing.md diff --git a/.tasks/NET-003-spacedrop-protocol.md b/.tasks/core/NET-003-spacedrop-protocol.md similarity index 100% rename from .tasks/NET-003-spacedrop-protocol.md rename to .tasks/core/NET-003-spacedrop-protocol.md diff --git a/.tasks/PLUG-000-wasm-plugin-system.md b/.tasks/core/PLUG-000-wasm-plugin-system.md similarity index 100% rename from .tasks/PLUG-000-wasm-plugin-system.md rename to .tasks/core/PLUG-000-wasm-plugin-system.md diff --git a/.tasks/PLUG-001-integrate-wasm-runtime.md b/.tasks/core/PLUG-001-integrate-wasm-runtime.md similarity index 100% rename from .tasks/PLUG-001-integrate-wasm-runtime.md rename to .tasks/core/PLUG-001-integrate-wasm-runtime.md diff --git a/.tasks/PLUG-002-define-vdfs-plugin-api.md b/.tasks/core/PLUG-002-define-vdfs-plugin-api.md similarity index 100% rename from .tasks/PLUG-002-define-vdfs-plugin-api.md rename to .tasks/core/PLUG-002-define-vdfs-plugin-api.md diff --git a/.tasks/PLUG-003-develop-twitter-agent-poc.md b/.tasks/core/PLUG-003-develop-twitter-agent-poc.md similarity index 100% rename from .tasks/PLUG-003-develop-twitter-agent-poc.md rename to .tasks/core/PLUG-003-develop-twitter-agent-poc.md diff --git a/.tasks/RES-000-resource-management.md b/.tasks/core/RES-000-resource-management.md similarity index 100% rename from .tasks/RES-000-resource-management.md rename to .tasks/core/RES-000-resource-management.md diff --git a/.tasks/RES-001-adaptive-throttling.md b/.tasks/core/RES-001-adaptive-throttling.md similarity index 100% rename from .tasks/RES-001-adaptive-throttling.md rename to .tasks/core/RES-001-adaptive-throttling.md diff --git a/.tasks/SEARCH-000-temporal-semantic-search.md b/.tasks/core/SEARCH-000-temporal-semantic-search.md similarity index 100% rename from .tasks/SEARCH-000-temporal-semantic-search.md rename to .tasks/core/SEARCH-000-temporal-semantic-search.md diff --git a/.tasks/SEARCH-001-async-searchjob.md b/.tasks/core/SEARCH-001-async-searchjob.md similarity index 100% rename from .tasks/SEARCH-001-async-searchjob.md rename to .tasks/core/SEARCH-001-async-searchjob.md diff --git a/.tasks/SEARCH-002-two-stage-fts-semantic-reranking.md b/.tasks/core/SEARCH-002-two-stage-fts-semantic-reranking.md similarity index 100% rename from .tasks/SEARCH-002-two-stage-fts-semantic-reranking.md rename to .tasks/core/SEARCH-002-two-stage-fts-semantic-reranking.md diff --git a/.tasks/SEARCH-003-unified-vector-repositories.md b/.tasks/core/SEARCH-003-unified-vector-repositories.md similarity index 100% rename from .tasks/SEARCH-003-unified-vector-repositories.md rename to .tasks/core/SEARCH-003-unified-vector-repositories.md diff --git a/.tasks/SEC-000-security-and-privacy.md b/.tasks/core/SEC-000-security-and-privacy.md similarity index 100% rename from .tasks/SEC-000-security-and-privacy.md rename to .tasks/core/SEC-000-security-and-privacy.md diff --git a/.tasks/SEC-002-database-encryption.md b/.tasks/core/SEC-002-database-encryption.md similarity index 100% rename from .tasks/SEC-002-database-encryption.md rename to .tasks/core/SEC-002-database-encryption.md diff --git a/.tasks/SEC-004-rbac-system.md b/.tasks/core/SEC-004-rbac-system.md similarity index 100% rename from .tasks/SEC-004-rbac-system.md rename to .tasks/core/SEC-004-rbac-system.md diff --git a/.tasks/SEC-005-secure-credential-vault.md b/.tasks/core/SEC-005-secure-credential-vault.md similarity index 100% rename from .tasks/SEC-005-secure-credential-vault.md rename to .tasks/core/SEC-005-secure-credential-vault.md diff --git a/.tasks/SEC-006-certificate-pinning.md b/.tasks/core/SEC-006-certificate-pinning.md similarity index 100% rename from .tasks/SEC-006-certificate-pinning.md rename to .tasks/core/SEC-006-certificate-pinning.md diff --git a/.tasks/SEC-007-per-library-encryption-policies-for-public-sharing.md b/.tasks/core/SEC-007-per-library-encryption-policies-for-public-sharing.md similarity index 100% rename from .tasks/SEC-007-per-library-encryption-policies-for-public-sharing.md rename to .tasks/core/SEC-007-per-library-encryption-policies-for-public-sharing.md diff --git a/.tasks/VOL-000-volume-operations.md b/.tasks/core/VOL-000-volume-operations.md similarity index 100% rename from .tasks/VOL-000-volume-operations.md rename to .tasks/core/VOL-000-volume-operations.md diff --git a/.tasks/VOL-001-volume-physicalclass-and-location-logicalclass.md b/.tasks/core/VOL-001-volume-physicalclass-and-location-logicalclass.md similarity index 100% rename from .tasks/VOL-001-volume-physicalclass-and-location-logicalclass.md rename to .tasks/core/VOL-001-volume-physicalclass-and-location-logicalclass.md diff --git a/.tasks/VOL-002-automatic-volume-classification.md b/.tasks/core/VOL-002-automatic-volume-classification.md similarity index 100% rename from .tasks/VOL-002-automatic-volume-classification.md rename to .tasks/core/VOL-002-automatic-volume-classification.md diff --git a/.tasks/VOL-003-intelligent-storage-tiering-warning-system.md b/.tasks/core/VOL-003-intelligent-storage-tiering-warning-system.md similarity index 100% rename from .tasks/VOL-003-intelligent-storage-tiering-warning-system.md rename to .tasks/core/VOL-003-intelligent-storage-tiering-warning-system.md diff --git a/.tasks/VOL-004-remote-volume-indexing-with-opendal.md b/.tasks/core/VOL-004-remote-volume-indexing-with-opendal.md similarity index 100% rename from .tasks/VOL-004-remote-volume-indexing-with-opendal.md rename to .tasks/core/VOL-004-remote-volume-indexing-with-opendal.md diff --git a/.tasks/VOL-005-treat-connected-iphone-as-a-virtual-volume-for-direct-import.md b/.tasks/core/VOL-005-treat-connected-iphone-as-a-virtual-volume-for-direct-import.md similarity index 100% rename from .tasks/VOL-005-treat-connected-iphone-as-a-virtual-volume-for-direct-import.md rename to .tasks/core/VOL-005-treat-connected-iphone-as-a-virtual-volume-for-direct-import.md diff --git a/.tasks/VSS-001-sdpath-integration.md b/.tasks/core/VSS-001-sdpath-integration.md similarity index 100% rename from .tasks/VSS-001-sdpath-integration.md rename to .tasks/core/VSS-001-sdpath-integration.md diff --git a/.tasks/VSS-002-job-system-integration.md b/.tasks/core/VSS-002-job-system-integration.md similarity index 100% rename from .tasks/VSS-002-job-system-integration.md rename to .tasks/core/VSS-002-job-system-integration.md diff --git a/.tasks/VSS-003-reference-sidecars-for-live-photo-support.md b/.tasks/core/VSS-003-reference-sidecars-for-live-photo-support.md similarity index 100% rename from .tasks/VSS-003-reference-sidecars-for-live-photo-support.md rename to .tasks/core/VSS-003-reference-sidecars-for-live-photo-support.md diff --git a/.tasks/VSS-004-cross-device-sync.md b/.tasks/core/VSS-004-cross-device-sync.md similarity index 100% rename from .tasks/VSS-004-cross-device-sync.md rename to .tasks/core/VSS-004-cross-device-sync.md diff --git a/.tasks/VSS-005-cli-integration.md b/.tasks/core/VSS-005-cli-integration.md similarity index 100% rename from .tasks/VSS-005-cli-integration.md rename to .tasks/core/VSS-005-cli-integration.md diff --git a/.tasks/interface/EXPL-000-explorer-epic.md b/.tasks/interface/EXPL-000-explorer-epic.md new file mode 100644 index 000000000..edd9b4fc5 --- /dev/null +++ b/.tasks/interface/EXPL-000-explorer-epic.md @@ -0,0 +1,43 @@ +--- +id: EXPL-000 +title: "Epic: Explorer Interface" +status: In Progress +assignee: james +parent: UI-000 +priority: High +tags: [epic, explorer, interface] +whitepaper: N/A +last_updated: 2025-12-02 +--- + +## Description + +Build the complete Explorer interface for browsing and managing files across all devices and locations. The Explorer is the primary interface for interacting with files in Spacedrive. + +## Components + +- Sidebar with library switcher, locations, tags, devices +- Top bar with breadcrumbs, search, view controls +- Main view with grid/list/media layouts +- Inspector panel for file details +- Context menus for file operations + +## Implementation Notes + +- Uses virtual scrolling for large file lists (TanStack Virtual) +- Supports multiple selection modes +- Real-time updates via event subscriptions +- Keyboard shortcuts for all operations + +## Acceptance Criteria + +- [x] Sidebar with library switcher +- [x] Expanding dropdown menus +- [ ] Grid view with thumbnails +- [ ] List view with columns +- [ ] Media view for photos/videos +- [ ] File operations (copy, move, delete) +- [ ] Multi-select with keyboard/mouse +- [ ] Context menus +- [ ] Search integration +- [ ] Inspector panel diff --git a/.tasks/interface/EXPL-001-grid-view.md b/.tasks/interface/EXPL-001-grid-view.md new file mode 100644 index 000000000..c7f9222c2 --- /dev/null +++ b/.tasks/interface/EXPL-001-grid-view.md @@ -0,0 +1,33 @@ +--- +id: EXPL-001 +title: File Grid View with Virtual Scrolling +status: To Do +assignee: james +parent: EXPL-000 +priority: High +tags: [explorer, views, performance] +whitepaper: N/A +--- + +## Description + +Implement a performant grid view for displaying files and folders with thumbnails. Uses virtual scrolling to handle thousands of items efficiently. + +## Implementation Notes + +- Use TanStack Virtual for virtualization +- Grid layout with CSS Grid +- Thumbnail generation via backend +- Selection state management +- Drag and drop support + +## Acceptance Criteria + +- [ ] Grid displays files with thumbnails +- [ ] Virtual scrolling works smoothly with 10k+ items +- [ ] Single-click selection, double-click to open +- [ ] Multi-select with Cmd/Ctrl + click +- [ ] Range select with Shift + click +- [ ] Drag and drop for file operations +- [ ] Keyboard navigation (arrow keys) +- [ ] Responsive grid (adjusts to window size) diff --git a/.tasks/interface/EXPL-002-list-view.md b/.tasks/interface/EXPL-002-list-view.md new file mode 100644 index 000000000..ae0048c60 --- /dev/null +++ b/.tasks/interface/EXPL-002-list-view.md @@ -0,0 +1,32 @@ +--- +id: EXPL-002 +title: File List View with Sortable Columns +status: To Do +assignee: james +parent: EXPL-000 +priority: High +tags: [explorer, views, performance] +whitepaper: N/A +--- + +## Description + +Implement a list view for files with sortable columns showing name, size, date modified, kind, and tags. + +## Implementation Notes + +- Use TanStack Table for column management +- TanStack Virtual for row virtualization +- Sortable columns with multi-column sort +- Resizable columns with drag handles +- Icon + text for file type + +## Acceptance Criteria + +- [ ] List shows files with columns: Name, Size, Modified, Kind, Tags +- [ ] Click column header to sort +- [ ] Multi-column sort with Shift + click +- [ ] Drag column edges to resize +- [ ] Virtual scrolling for large lists +- [ ] Selection works same as grid view +- [ ] Keyboard navigation (up/down arrows) diff --git a/.tasks/interface/EXPL-003-file-operations.md b/.tasks/interface/EXPL-003-file-operations.md new file mode 100644 index 000000000..62c581fb2 --- /dev/null +++ b/.tasks/interface/EXPL-003-file-operations.md @@ -0,0 +1,34 @@ +--- +id: EXPL-003 +title: File Operations UI +status: To Do +assignee: james +parent: EXPL-000 +priority: High +tags: [explorer, file-operations] +whitepaper: N/A +--- + +## Description + +Implement UI for core file operations: copy, move, delete, rename. Integrates with backend jobs and shows progress. + +## Implementation Notes + +- Use useLibraryMutation for all operations +- Show progress toast for long operations +- Subscribe to job progress events +- Handle errors gracefully with user feedback +- Confirmation dialogs for destructive operations + +## Acceptance Criteria + +- [ ] Copy files via context menu or Cmd+C +- [ ] Move files via drag and drop +- [ ] Delete with confirmation dialog +- [ ] Rename with inline editing +- [ ] Duplicate files +- [ ] Create new folders +- [ ] Progress indicator for long operations +- [ ] Error handling with user-friendly messages +- [ ] Undo for safe operations diff --git a/.tasks/interface/MEDIA-000-media-viewer.md b/.tasks/interface/MEDIA-000-media-viewer.md new file mode 100644 index 000000000..9060a4bf3 --- /dev/null +++ b/.tasks/interface/MEDIA-000-media-viewer.md @@ -0,0 +1,44 @@ +--- +id: MEDIA-000 +title: Media Viewer +status: To Do +assignee: james +parent: UI-000 +priority: Medium +tags: [media, viewer, photos, videos] +whitepaper: N/A +--- + +## Description + +Build a full-screen media viewer for photos and videos with support for navigation, zoom, and metadata display. + +## Features + +- Photo viewer with zoom/pan +- Video player with controls +- Swipe/arrow navigation between items +- Metadata panel (EXIF, location, tags) +- Quick actions (tag, favorite, share, delete) +- Slideshow mode +- Live Photo support (via reference sidecars) + +## Implementation Notes + +- Uses platform-appropriate media APIs +- Hardware-accelerated rendering +- Lazy loading for performance +- Keyboard shortcuts for all actions +- Touch gestures on mobile + +## Acceptance Criteria + +- [ ] Open photo in full-screen viewer +- [ ] Zoom and pan with mouse/touch +- [ ] Navigate with arrow keys or swipe +- [ ] Video playback with controls +- [ ] Display metadata panel +- [ ] Quick tag/favorite actions +- [ ] Slideshow mode +- [ ] Live Photo playback +- [ ] Smooth transitions between items diff --git a/.tasks/interface/NAV-000-multi-window-system.md b/.tasks/interface/NAV-000-multi-window-system.md new file mode 100644 index 000000000..769d1b54b --- /dev/null +++ b/.tasks/interface/NAV-000-multi-window-system.md @@ -0,0 +1,32 @@ +--- +id: NAV-000 +title: Multi-Window System +status: To Do +assignee: james +parent: UI-000 +priority: Medium +tags: [navigation, windows, architecture] +whitepaper: N/A +--- + +## Description + +Implement support for multiple windows, each with independent navigation state. Users can open multiple Explorer windows, media viewers, or settings panels. + +## Implementation Notes + +- Each window has independent router state +- Tauri: use multi-window API +- Web: use browser windows or tabs +- Window state persists (size, position, route) +- Cross-window communication via events + +## Acceptance Criteria + +- [ ] Open new Explorer window from menu +- [ ] Each window has independent navigation +- [ ] Window position/size persists +- [ ] Cross-window drag and drop +- [ ] Windows share library state +- [ ] Close all windows command +- [ ] Platform-specific window controls (traffic lights on macOS) diff --git a/.tasks/interface/SETS-000-settings-epic.md b/.tasks/interface/SETS-000-settings-epic.md new file mode 100644 index 000000000..908a2529d --- /dev/null +++ b/.tasks/interface/SETS-000-settings-epic.md @@ -0,0 +1,45 @@ +--- +id: SETS-000 +title: "Epic: Settings Interface" +status: To Do +assignee: james +parent: UI-000 +priority: Medium +tags: [epic, settings, interface] +whitepaper: N/A +--- + +## Description + +Build comprehensive settings pages for configuring libraries, appearance, sync, privacy, and advanced options. + +## Pages + +- General (app preferences, updates) +- Libraries (manage libraries, encryption) +- Locations (indexed locations, rules) +- Appearance (theme, color scheme, layout) +- Sync (device pairing, sync rules) +- Privacy (telemetry, data sharing) +- Advanced (developer options, debug) +- About (version, credits, licenses) + +## Implementation Notes + +- Settings stored per-library and globally +- Real-time sync of settings changes +- Form validation with react-hook-form + zod +- Settings categories with sidebar navigation + +## Acceptance Criteria + +- [ ] Settings modal/page opens from menu +- [ ] Sidebar navigation between categories +- [ ] General settings (language, updates) +- [ ] Library management (create, delete, encrypt) +- [ ] Appearance settings (theme, colors) +- [ ] Sync configuration UI +- [ ] Privacy controls +- [ ] Advanced/debug options +- [ ] All settings persist correctly +- [ ] Settings sync across devices diff --git a/.tasks/interface/SRCH-000-search-interface.md b/.tasks/interface/SRCH-000-search-interface.md new file mode 100644 index 000000000..f3beb73e1 --- /dev/null +++ b/.tasks/interface/SRCH-000-search-interface.md @@ -0,0 +1,45 @@ +--- +id: SRCH-000 +title: Search Interface +status: To Do +assignee: james +parent: UI-000 +priority: Medium +tags: [search, interface] +whitepaper: Section 6.0 +--- + +## Description + +Build the search interface with support for full-text search, filters, and semantic search. Displays results in grid/list views with highlighting. + +## Features + +- Global search bar in top bar +- Real-time search as you type +- Filters (file type, date, size, tags, location) +- Search operators (AND, OR, NOT, quotes) +- Saved searches +- Search history +- Semantic search integration + +## Implementation Notes + +- Integrates with SEARCH-000 backend +- Uses async search jobs for large queries +- Debounced input for performance +- Results virtualized for large result sets +- Highlight matching terms + +## Acceptance Criteria + +- [ ] Search bar in top bar +- [ ] Real-time results as you type +- [ ] Filter panel with common filters +- [ ] Search operators work correctly +- [ ] Save searches for reuse +- [ ] Search history dropdown +- [ ] Semantic search option (if enabled) +- [ ] Results in grid/list view +- [ ] Click result to open/preview +- [ ] Performance with 100k+ indexed files diff --git a/.tasks/interface/UI-000-interface-v2.md b/.tasks/interface/UI-000-interface-v2.md new file mode 100644 index 000000000..02fc861e1 --- /dev/null +++ b/.tasks/interface/UI-000-interface-v2.md @@ -0,0 +1,40 @@ +--- +id: UI-000 +title: "Epic: Interface V2 Architecture" +status: In Progress +assignee: james +priority: High +tags: [epic, interface, react] +whitepaper: N/A +last_updated: 2025-12-02 +--- + +## Description + +Complete rewrite of the Spacedrive interface using React 19, TypeScript, and a clean component architecture. The interface is platform-agnostic and works across Tauri (desktop), web, and mobile. + +## Key Principles + +- Platform agnostic architecture +- Type-safe client with auto-generated types from Rust +- Semantic color system with Tailwind +- Clean separation: @sd/interface (features) + @sd/ui (primitives) + @sd/ts-client (state) +- Accessible, performant, production-ready + +## Implementation Notes + +- Built with React 19, TanStack Query, Framer Motion +- Uses native macOS traffic lights (no CSS fakes) +- V2 design is more rounded than V1 (rounded-lg vs rounded-md) +- All colors use semantic Tailwind classes, never `var()` directly + +## Acceptance Criteria + +- [x] Type-safe client with auto-generated types +- [x] Native macOS traffic lights working +- [x] V2 color system as CSS variables +- [x] TanStack Query integration +- [ ] Complete Explorer with file operations +- [ ] Settings pages functional +- [ ] Multi-window support +- [ ] Mobile app integration diff --git a/.tasks/interface/UI-001-component-primitives.md b/.tasks/interface/UI-001-component-primitives.md new file mode 100644 index 000000000..2685502d2 --- /dev/null +++ b/.tasks/interface/UI-001-component-primitives.md @@ -0,0 +1,57 @@ +--- +id: UI-001 +title: Core Component Primitives +status: In Progress +assignee: james +parent: UI-000 +priority: High +tags: [ui, components, design-system] +whitepaper: N/A +last_updated: 2025-12-02 +--- + +## Description + +Build a complete set of reusable UI primitives in @sd/ui that follow the V2 design system. These are platform-agnostic, accessible components used throughout the interface. + +## Components + +**Completed:** +- DropdownMenu (expanding, not overlay) +- Button variants + +**In Progress:** +- Dialog/Modal +- Tooltip +- Input variants +- Checkbox/Radio +- Slider + +**Planned:** +- Tabs +- Accordion +- Select +- Combobox +- Progress +- Badge +- Avatar + +## Implementation Notes + +- Built on Radix UI for accessibility +- Minimal styling in primitives (styled via className prop) +- Semantic color system support +- Framer Motion for animations +- Platform-agnostic (works on all platforms) + +## Acceptance Criteria + +- [x] DropdownMenu with expanding animation +- [x] Button with variants (primary, secondary, danger) +- [ ] Dialog with backdrop blur +- [ ] Tooltip with proper positioning +- [ ] Input with validation states +- [ ] Form components (checkbox, radio, slider) +- [ ] All components keyboard accessible +- [ ] All components follow V2 rounded style +- [ ] Documented in Storybook or docs diff --git a/apps/landing b/apps/landing index 85732cc95..1296947c8 160000 --- a/apps/landing +++ b/apps/landing @@ -1 +1 @@ -Subproject commit 85732cc95de98440f9c066042dfbbb809a235936 +Subproject commit 1296947c8bbf1740f09ee1a7b7489e9a1404fb36 diff --git a/crates/task-validator/src/main.rs b/crates/task-validator/src/main.rs index e4ec79375..092cfd54e 100644 --- a/crates/task-validator/src/main.rs +++ b/crates/task-validator/src/main.rs @@ -86,8 +86,16 @@ fn list_tasks( ) -> Result<(), Box> { let mut tasks = Vec::new(); - for entry in glob(".tasks/*.md")? { + // Support both old flat structure and new subdirectory structure + for entry in glob(".tasks/**/*.md")? { let path = entry?; + + // Skip non-task files (like Claude.md, README.md, etc.) + let file_name = path.file_name().and_then(|n| n.to_str()).unwrap_or(""); + if !file_name.contains('-') || file_name == "Claude.md" { + continue; + } + let content = fs::read_to_string(&path)?; if content.starts_with("---") { @@ -210,7 +218,7 @@ fn validate_tasks() -> Result<(), Box> { .compile(&schema) .expect("A valid schema"); - // 2. Get a list of staged markdown files + // 2. Get a list of staged markdown files (including subdirectories) let output = Command::new("git") .args([ "diff", @@ -218,7 +226,7 @@ fn validate_tasks() -> Result<(), Box> { "--name-only", "--diff-filter=ACM", "--", - ".tasks/*.md", + ".tasks/", ]) .output()?; @@ -231,6 +239,20 @@ fn validate_tasks() -> Result<(), Box> { continue; } + // Only validate .md files in .tasks/ (skip schema.json, Claude.md, etc.) + if !file_path.ends_with(".md") || !file_path.starts_with(".tasks/") { + continue; + } + + // Skip non-task files + let file_name = std::path::Path::new(file_path) + .file_name() + .and_then(|n| n.to_str()) + .unwrap_or(""); + if !file_name.contains('-') || file_name == "Claude.md" { + continue; + } + let content = match fs::read_to_string(file_path) { Ok(c) => c, Err(_) => continue, // File might have been deleted diff --git a/docs/core/task-tracking.mdx b/docs/core/task-tracking.mdx new file mode 100644 index 000000000..7eef10036 --- /dev/null +++ b/docs/core/task-tracking.mdx @@ -0,0 +1,558 @@ +--- +title: Task Tracking +sidebarTitle: Task Tracking +--- + +The `.tasks/` directory contains a structured task tracking system that manages the entire development lifecycle of Spacedrive. Tasks are defined as markdown files with YAML frontmatter and validated against a JSON schema. + +## Overview + +Task tracking provides: +- **Hierarchical organization** with epics and subtasks +- **Status tracking** across the development lifecycle +- **Metadata** like priority, assignee, and whitepaper references +- **Validation** via a CLI tool to ensure consistency + +### Directory Structure + +``` +.tasks/ +├── core/ # Backend/Rust tasks +│ ├── CORE-000-vdfs-core.md +│ ├── CORE-001-entry-centric-model.md +│ ├── JOB-000-job-system.md +│ ├── INDEX-*.md +│ ├── LSYNC-*.md +│ └── ... +├── interface/ # Frontend/React tasks +│ ├── UI-000-interface-v2.md +│ ├── EXPL-000-explorer-epic.md +│ ├── SETS-000-settings-epic.md +│ └── ... +├── mobile/ # Mobile-specific tasks +│ └── (future tasks) +├── task.schema.json # JSON schema defining task structure +└── Claude.md # Task tracking cheatsheet +``` + +Tasks follow the naming pattern: `{PREFIX}-{NUMBER}-{slug}.md` and are organized into subdirectories by domain (core, interface, mobile). + +## Task Schema + +Every task file contains YAML frontmatter that must conform to the schema defined in `task.schema.json`. + +### Required Fields + +```yaml +--- +id: CORE-001 +title: Entry-Centric Data Model +status: Done +assignee: james +priority: High +--- +``` + +| Field | Type | Description | +|-------|------|-------------| +| `id` | string | Unique identifier matching pattern `^[A-Z]+-[0-9]+$` | +| `title` | string | Human-readable title (min 5 characters) | +| `status` | enum | One of: `To Do`, `In Progress`, `Done` | +| `assignee` | string | Person responsible for the task | +| `priority` | enum | One of: `High`, `Medium`, `Low` | + +### Optional Fields + +```yaml +--- +parent: CORE-000 +tags: [core, database, epic] +whitepaper: Section 4.1 +last_updated: 2025-12-02 +--- +``` + +| Field | Type | Description | +|-------|------|-------------| +| `parent` | string | Parent task ID for subtask hierarchy | +| `tags` | array | Categorization tags | +| `whitepaper` | string | Reference to design documentation | +| `last_updated` | string | ISO date of last modification | + +## Task Statuses + +The lifecycle of a task follows three states: + +### To Do +Task has not been started. No implementation exists. + +### In Progress +Task is actively being worked on. Criteria for this status: +- Some code has been written +- Feature is partially implemented +- Still has rough edges or incomplete functionality + +### Done +Task is complete. All acceptance criteria must be met: +- All listed acceptance criteria are implemented +- Code is merged to main branch +- Tests pass (if applicable) +- Feature is production-ready + + +Never mark a task as `Done` if implementation is partial, tests are failing, or the feature doesn't work as specified. + + +## Task Prefixes + +Tasks are organized by domain using prefixes. Tasks are further organized into subdirectories: + +### Core Tasks (`.tasks/core/`) + +Backend and Rust-related tasks: + +| Prefix | Domain | +|--------|--------| +| `CORE` | Core architecture and data model | +| `JOB` | Job system and task execution | +| `INDEX` | File indexing and location management | +| `FSYNC` | File synchronization | +| `LSYNC` | Library synchronization | +| `NET` | Networking and P2P | +| `SEARCH` | Search functionality | +| `FILE` | File operations | +| `LOC` | Location management | +| `VOL` | Volume operations | +| `SEC` | Security and privacy | +| `CLI` | Command-line interface | +| `CLOUD` | Cloud integration | +| `AI` | AI and ML features | +| `PLUG` | Plugin system | +| `DEV` | Development tooling | + +### Interface Tasks (`.tasks/interface/`) + +Frontend and React-related tasks: + +| Prefix | Domain | +|--------|--------| +| `UI` | UI primitives and design system | +| `EXPL` | Explorer interface | +| `SETS` | Settings pages | +| `SRCH` | Search UI | +| `TAG` | Tagging interface | +| `MEDIA` | Media viewer | +| `NAV` | Navigation and routing | +| `PERF` | Performance optimizations | +| `A11Y` | Accessibility | + +### Mobile Tasks (`.tasks/mobile/`) + +Mobile-specific tasks (future): + +| Prefix | Domain | +|--------|--------| +| `IOS` | iOS native features | +| `MACOS` | macOS native features | +| `AND` | Android features | + +## Task Validator CLI + +The `task-validator` binary provides utilities for managing and validating tasks. + +### List Tasks + +View all tasks sorted by status: + +```bash +cargo run --bin task-validator -- list --sort-by status +``` + +Output groups tasks by status (To Do, In Progress, Done): + +``` +=== Done === +CORE-000: Epic: VDFS Core Architecture +CORE-001: Entry-Centric Data Model +JOB-001: Job Manager for Task Scheduling + +=== In Progress === +CLOUD-003: Cloud Volume Support + +=== To Do === +AI-002: Create Fine-tuning Dataset +``` + +### Filter Tasks + +Filter by specific criteria: + +```bash +# By status +cargo run --bin task-validator -- list --status "In Progress" + +# By priority +cargo run --bin task-validator -- list --priority High + +# By assignee +cargo run --bin task-validator -- list --assignee james +``` + +### Validate Schema + +Ensure all task files conform to the schema: + +```bash +cargo run --bin task-validator -- validate +``` + +This checks: +- YAML frontmatter is valid +- All required fields are present +- Field values match allowed enums +- ID pattern is correct +- Parent references exist + +Validation runs in CI to prevent invalid tasks from being committed. + +## Workflow + +### Reviewing Task Status + +When code has been merged, tasks should be reviewed and updated: + +1. **Check recent commits**: + ```bash + git log --oneline -20 + ``` + +2. **List current task state**: + ```bash + cargo run --bin task-validator -- list --sort-by status + ``` + +3. **For each potential completed feature**: + - Read the task file to understand acceptance criteria + - Read all implementation files mentioned in the task + - Check `core/tests/` for integration tests + - Verify each acceptance criterion is met in the code + +4. **Update task status**: + Edit the YAML frontmatter in the task file: + ```yaml + --- + status: Done # Changed from "In Progress" + last_updated: 2025-12-02 # Update date + --- + ``` + +5. **Validate changes**: + ```bash + cargo run --bin task-validator -- validate + ``` + + +When unsure if a task is complete, leave it as `In Progress` rather than prematurely marking it `Done`. The tracker is only useful if it's accurate. + + +### Creating New Tasks + +1. Choose appropriate subdirectory (`core/`, `interface/`, or `mobile/`) +2. Choose appropriate prefix based on domain +3. Find next available number (e.g., if `EXPL-002` exists, use `EXPL-003`) +4. Create file with pattern: `.tasks/{subdirectory}/{PREFIX}-{NUMBER}-{slug}.md` +5. Add YAML frontmatter with all required fields +6. Write task description and acceptance criteria +7. Validate: + ```bash + cargo run --bin task-validator -- validate + ``` + +Example core task file (`.tasks/core/LSYNC-017-realtime-sync.md`): + +```markdown +--- +id: LSYNC-017 +title: Real-time Sync Protocol +status: To Do +assignee: james +parent: LSYNC-000 +priority: High +tags: [core, sync, networking] +whitepaper: Section 5.3 +--- + +## Description + +Implement a real-time synchronization protocol that pushes changes +immediately rather than relying on polling intervals. + +## Implementation Notes + +- Use WebSocket or similar bi-directional protocol +- Integrate with existing sync service +- Maintain backward compatibility with polling-based sync + +## Acceptance Criteria + +- [ ] Changes propagate within 1 second between devices +- [ ] Protocol handles network interruptions gracefully +- [ ] Fallback to polling when real-time unavailable +- [ ] Integration tests demonstrate cross-device sync +``` + +Example interface task file (`.tasks/interface/EXPL-004-breadcrumbs.md`): + +```markdown +--- +id: EXPL-004 +title: Breadcrumb Navigation +status: To Do +assignee: james +parent: EXPL-000 +priority: Medium +tags: [explorer, navigation, ui] +--- + +## Description + +Implement breadcrumb navigation in the Explorer top bar showing the +current path with clickable segments. + +## Implementation Notes + +- Display full path as clickable segments +- Truncate middle segments if path is too long +- Show dropdown menu for segments with many children +- Keyboard navigation support + +## Acceptance Criteria + +- [ ] Breadcrumbs show current location path +- [ ] Click segment to navigate to that level +- [ ] Path updates when navigating +- [ ] Works with virtual locations and SD paths +- [ ] Responsive truncation for long paths +``` + +### Updating Task Status + +When updating tasks after completing work: + +**DO:** +- Read implementation files thoroughly +- Verify all acceptance criteria are met +- Check for passing integration tests +- Update `last_updated` field +- Be rigorous about what "Done" means + +**DON'T:** +- Mark tasks done based on assumptions +- Skip reading the actual code +- Ignore failing tests or partial implementations +- Batch update tasks without verification + +## Common Patterns + +### Epic Tasks + +Epics are high-level tasks that have subtasks: + +```yaml +--- +id: CORE-000 +title: "Epic: VDFS Core Architecture" +status: Done +assignee: james +priority: High +tags: [epic, core, vdfs] +--- +``` + +Subtasks reference their epic via the `parent` field: + +```yaml +--- +id: CORE-001 +title: Entry-Centric Data Model +parent: CORE-000 +status: Done +--- +``` + +### Task Dependencies + +While not enforced by schema, dependencies can be documented in task descriptions: + +```markdown +## Dependencies + +This task requires: +- CORE-001 (Entry-Centric Model) - Done +- INDEX-001 (Location Watcher) - In Progress +``` + +### Whitepaper References + +Link tasks to design documentation: + +```yaml +whitepaper: Section 4.1 +``` + +This helps trace implementation back to architectural decisions. + +## Best Practices + +### Task Granularity + +- **Epics**: High-level features spanning multiple subtasks +- **Tasks**: Concrete features implementable in focused work +- **Too granular**: Don't create tasks for every file or function + +### Acceptance Criteria + +Write specific, testable criteria: + +**Good:** +```markdown +- [ ] User can add S3 bucket as a cloud volume +- [ ] Cloud volumes appear in volume list +- [ ] Files in cloud volume can be searched +``` + +**Bad:** +```markdown +- [ ] Implement cloud volume feature +- [ ] Make it work properly +``` + +### Status Accuracy + +The tracker is only valuable if it reflects reality: + +- Review and update tasks regularly +- Don't mark tasks done to "clean up" the list +- Keep `In Progress` honest about active work +- Archive or remove truly obsolete tasks + +### Git Integration + +While not automated, tasks can be referenced in commits: + +```bash +git commit -m "feat: implement cloud volume indexing (CLOUD-003)" +``` + +This creates a searchable link between tasks and implementation: + +```bash +git log --oneline --grep="CLOUD-003" +``` + +## Troubleshooting + +### Validation Errors + +**Invalid YAML**: +``` +Error: Failed to parse YAML in CORE-001-entry-centric-model.md +``` +Fix: Check YAML syntax, ensure frontmatter is enclosed in `---` + +**Missing Required Field**: +``` +Error: Missing required field 'priority' in CORE-001 +``` +Fix: Add the missing field to frontmatter + +**Invalid Status Value**: +``` +Error: Invalid status 'Complete' in CORE-001. Must be one of: To Do, In Progress, Done +``` +Fix: Use exact status values from schema (case-sensitive) + +### Duplicate IDs + +Each task ID must be unique. If validation reports duplicates: + +```bash +# Find all task IDs +grep "^id:" .tasks/*.md | sort +``` + +Renumber conflicting tasks and update any parent references. + +### Orphaned Tasks + +Tasks with `parent` fields referencing non-existent tasks: + +```bash +cargo run --bin task-validator -- validate +``` + +Will report broken parent references. Either remove the parent field or create the missing epic. + +## Examples + +### Complete Epic with Subtasks + +```markdown +# .tasks/SEARCH-000-semantic-search.md +--- +id: SEARCH-000 +title: "Epic: Semantic Search System" +status: In Progress +assignee: james +priority: High +tags: [epic, search, ai] +whitepaper: Section 6.2 +--- + +## Description + +Build a semantic search system using embeddings and vector similarity. + +## Subtasks + +- SEARCH-001: Async search job infrastructure +- SEARCH-002: Two-stage FTS + semantic reranking +- SEARCH-003: Unified vector repositories +``` + +```markdown +# .tasks/SEARCH-001-async-searchjob.md +--- +id: SEARCH-001 +title: Async Search Job +parent: SEARCH-000 +status: Done +assignee: james +priority: High +tags: [search, jobs] +last_updated: 2025-11-15 +--- + +## Description + +Implement background search job that processes queries asynchronously. + +## Acceptance Criteria + +- [x] SearchJob implements Job trait +- [x] Queries execute in background thread pool +- [x] Results stream back via events +- [x] Integration test demonstrates full workflow +``` + +## Integration with Development + +The task tracking system complements other development tools: + +- **Testing**: Acceptance criteria inform test cases +- **CI/CD**: Schema validation runs in continuous integration +- **Code Review**: Task IDs provide context in pull requests +- **Documentation**: Tasks link to whitepaper design sections +- **Planning**: Status overview shows project progress + +By maintaining accurate task status, the team has a real-time view of what's complete, what's in progress, and what's planned. diff --git a/docs/mint.json b/docs/mint.json index 6f602d542..d5cbd5f02 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -103,7 +103,7 @@ { "group": "Development", "icon": "flask", - "pages": ["core/database", "core/testing", "core/cli"] + "pages": ["core/database", "core/testing", "core/task-tracking", "core/cli"] }, { "group": "Extension SDK",