feat(kanban): distinguish task artifacts from attachments - #84035
Conversation
cb1a6ed to
fbebd05
Compare
|
Independent validation on current origin/main (165c889) and combined with #86610 artifact confinement (95a2f8bbf6a096ea156cb18268760ae08d172440): the backend patches compose correctly. The confined completion copy is recorded as attachment_type=artifact; legacy/manual uploads remain attachment. The combined repository-runner suite passed 121 tests, 0 failed (1 Windows-only skip), covering attachment migration/API/worker context, completion behavior, confinement, notifications, and watchers; git diff --check is clean. One integration item remains: this branch conflicts with current main in plugins/kanban/dashboard/dist/index.js. I excluded only that conflicted bundled file from the current-main backend reconstruction, so this is not a claim that the UI bundle is rebased. Please regenerate/reconcile that bundle on fresh main and rerun web/src/lib/kanban-task-files-plugin.test.ts. The Python/backend contract is compatible with #86610. |
|
Follow-up with a fully reconstructed dependency stack (not just a backend patch simulation):
The only conflict is still Reproducible handoff branch/commit: enzo-adami@d620cd9 Validation on the combined stack:
I also tried to find a classification-specific confinement bypass. I did not find one: |
feat(kanban): distinguish task artifacts from attachments
No blocking issues found. |
fbebd05 to
00284b4
Compare
|
Rebased onto current
The PR is now rebased, mergeable, and has no unresolved review threads. Fresh CI is running. |
00284b4 to
9fa7565
Compare
What does this PR do?
Fixes #83960.
Kanban task files currently share one storage table and one UI list, even though files supplied to a task and files generated by its worker have different lifecycle meaning. This change adds a backward-compatible
attachment_typediscriminator and carries it through storage, REST, CLI, model tools, worker context, and the dashboard.The column is nullable by design: existing rows and older writers that omit it continue to behave as input attachments. Completion outputs and files added by Kanban worker tools are recorded as artifacts by default. The dashboard and worker prompt render the two categories separately while preserving the existing authenticated download/delete and path-containment mechanisms.
Related Issue
Fixes #83960
Type of Change
Changes Made
hermes_cli/kanban_db.pyattachment_typemigration with constrainedattachment/artifactvalues.NULLrows as attachments at read time.hermes_cli/kanban.py,tools/kanban_tools.pyplugins/kanban/dashboard/plugin_api.py,plugins/kanban/dashboard/dist/index.jsHow to Test
Mutation evidence: changing the artifact classifier to classify attachments instead made the new Vitest regression fail; restoring the implementation returned it to green.
Checklist
Code
Documentation & Housekeeping
cli-config.yaml.exampleupdate — N/A; no config key was addedCONTRIBUTING.md/AGENTS.mdupdate — N/A; no workflow or architecture policy changedFor New Skills
N/A — this PR does not add a skill.
Screenshots / Logs
No screenshot: the change is covered by a behavioral test that executes the registered Kanban dashboard bundle and asserts separate Attachments/Artifacts groups. Focused Python, Vitest, typecheck, build, Ruff, ESLint, Node syntax, and diff checks all passed. The repository-wide Python suite was not run.