taskops-cli 0.5.4__tar.gz → 0.5.6__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.
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/CHANGELOG.md +51 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/PKG-INFO +1 -1
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/_version.py +1 -1
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/handler.py +17 -2
- taskops_cli-0.5.6/src/taskops/ui/app.js +61 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/actors-window-filter.tsx +26 -22
- taskops_cli-0.5.6/ui/smoke/sections/daysheet-midnight-spill.tsx +103 -0
- taskops_cli-0.5.6/ui/smoke/sections/worktree-page-range.tsx +73 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/actors/Daysheet.tsx +26 -8
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/hoursWindow.ts +10 -4
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/pages/WorktreeDiff.tsx +25 -7
- taskops_cli-0.5.4/src/taskops/ui/app.js +0 -61
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.claude/settings.json +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.gitattributes +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.github/workflows/ci.yml +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.github/workflows/workflow.yml +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.gitignore +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.mcp.json +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/board/cache.sqlite +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/board/cache.sqlite-shm +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/board/cache.sqlite-wal +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/board/events.jsonl +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/board/live.sqlite +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/board/live.sqlite-shm +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/board/live.sqlite-wal +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/board.json +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/reports/lifecycle-chapter.html +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/reports/reports-chapter.html +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/.taskops/ui.lock +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ARCHITECTURE.md +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/CLAUDE.md +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/README.md +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/pyproject.toml +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/smoke.sh +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/_clock.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/_errors.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/_ids.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/_json.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/_locate.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/_wire.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/board.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/__main__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/admin.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/claude.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/commands.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/enrol.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/github.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/gitremote.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/grants.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/hooks.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/main.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/operate.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/paging.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/parser.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/pull.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/push.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/remote.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/rm.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/serving.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/team.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/watch.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/window.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/cli/wording.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/actors.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/challenge.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/chapters.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/event.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/forge.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/graph.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/holding.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/hours.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/kinds.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/machine.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/mentions.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/replay.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/reports.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/review.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/scope.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/seams.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/core/types.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/bare.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/bind.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/catchup.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/claudefiles.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/diff.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/install.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/landing.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/onward.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/patch.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/remote.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/run.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/sig.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/trailer.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/gitwork/trees.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/admin.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/auth.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/feed.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/gitbody.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/gitdoor.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/gitpack.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/grants.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/ingest.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/login.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/members.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/mounts.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/page.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/removal.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/repos.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/routes.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/rpc.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/scoped.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/server.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/stale.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/static.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/upstream.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/http/watcher.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/identity.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/__main__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/activity.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/before.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/boards.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/boardview.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/brief.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/chapter.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/dossier.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/fields.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/gitmoves.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/hello.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/integrate.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/orders.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/render.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/schema.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/server.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/thread.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/mcp/tools.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/py.typed +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/session.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/cache.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/creds.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/handover.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/live.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/log.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/mirroring.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/pubkeys.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/reviews.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/server.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/store/stores.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/ui/index.html +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/ui/style.css +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_args.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_cards.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_chapter.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_context.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_facts.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_mentions.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_rows.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_stories.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_waiting.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/_windows.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/activity.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/assign.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/card.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/events.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/filed.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/plan.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/project.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/pulse.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/record.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/report.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/review.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/take.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/src/taskops/verbs/update.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/__init__.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/conftest.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_architecture.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_claude.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_core.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_git.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_mcp.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_mirror.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_report.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_store.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_topology.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_ui.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_verbs.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/test_window.py +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/tests/ui_harness.js +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/build.mjs +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/index.html +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/package-lock.json +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/package.json +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/fixture.json +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/main.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/run.mjs +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/actors.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/all-chapters-scope.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/board-columns.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/board-flow-view.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/board-motion-and-avatars.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/board-root-mount.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/card-diff-range.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/chapter-completion-derivation.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/chapter-landed.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/chapter-story-grid.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/chapters-open.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/comment-box.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/comment-toasts-model.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/comment-toasts-stack.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/diff-page.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/dossier.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/event-stream.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/feed-reconnect.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/forge-links.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/forge-opens-the-board.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/git-diff.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/hosted-window.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/monitor-panes.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/overlay-escape.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/report-markdown.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/report-sandbox.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/reviewing-skew.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/section.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/swarm-topology.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/thread-closing-note.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections/worktrees-index.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/smoke/sections.mjs +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/App.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/client.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/completed.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/actors/DevPanel.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/board/CardTile.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/board/Column.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/board/ViewToggle.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/board/flip.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/board/useFlip.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/card/CommentBox.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/card/Drawer.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/card/Patch.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/card/Sections.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/card/Thread.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/card/split.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/card/tokens.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/chrome/AvatarStack.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/chrome/Header.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/chrome/KpiRail.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/chrome/MilestonePicker.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/chrome/TabNav.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/flow/FlowView.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/flow/layout.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/Chapter.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/DependencyChain.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/EditSurface.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/EventStream.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/LeaseHealth.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/LiveLeases.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/Mentions.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/Pane.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/Swarm.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/Throughput.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/monitor/panels.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/reports/ReportFrame.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/shared/Avatar.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/shared/Markdown.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/shared/Overlay.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/shared/Segmented.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/shared/overlayStack.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/story/ChapterStory.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/story/stats.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/toasts/ToastStack.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/toasts/model.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/components/toasts/useToasts.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/format.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/links.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/main.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/markdown.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/pages/Actors.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/pages/Board.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/pages/Monitor.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/pages/Reports.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/pages/Worktrees.tsx +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/theme/theme.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/theme/tokens.css +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/types.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/useBoard.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/src/useEvents.ts +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/styles/index.css +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/ui/tsconfig.json +0 -0
- {taskops_cli-0.5.4 → taskops_cli-0.5.6}/uv.lock +0 -0
|
@@ -3,6 +3,57 @@
|
|
|
3
3
|
The source of truth for release notes — GitHub Releases are extracted from
|
|
4
4
|
here, never written twice.
|
|
5
5
|
|
|
6
|
+
## 0.5.6 — the hours page draws every hour of a day that opened before midnight
|
|
7
|
+
|
|
8
|
+
Reported live on `/convo/`: the hours breakdown was empty. Monday said
|
|
9
|
+
17h 13m and drew a single `23:00` row; Tuesday said 3h 32m and drew nothing
|
|
10
|
+
at all. Only Sunday — the one day nobody had worked across its opening
|
|
11
|
+
midnight — rendered. Every session was in the payload the whole time; the
|
|
12
|
+
client had no row to put them in.
|
|
13
|
+
|
|
14
|
+
- **`components/actors/Daysheet.tsx` walks hour SLOTS, not hour NUMBERS.**
|
|
15
|
+
`core/hours.py`'s edge rule credits an interval to the day its CLOSING
|
|
16
|
+
stamp falls in, so a session opened at 23:5x and closed past midnight is
|
|
17
|
+
filed under the NEXT day — and that day's local hours stop being monotone.
|
|
18
|
+
The old `for (h = first; h <= last; h += 1)` then walked `23..23` (one row)
|
|
19
|
+
or `23..10` (no rows). A slot is the local hour's own floor as a timestamp:
|
|
20
|
+
monotone across any midnight, advanced through its successor's floor so a
|
|
21
|
+
DST-stretched hour is one slot and a skipped one is none. The fold's
|
|
22
|
+
identity is the slot too — such a pane can hold two rows labelled `23:00`.
|
|
23
|
+
- **Verified against the live `/convo/` payload**, not a fixture: Monday now
|
|
24
|
+
draws 25 rows holding all 286 sessions, Tuesday 12 rows holding all 19, and
|
|
25
|
+
each pane's total is exactly the sum of its rows. Sunday is unchanged.
|
|
26
|
+
- **Pinned by `ui/smoke/sections/daysheet-midnight-spill.tsx`**, with the old
|
|
27
|
+
walk restored as a mutation and measured red.
|
|
28
|
+
- **`ui/smoke/sections/actors-window-filter.tsx` repaired** — it still pinned
|
|
29
|
+
the calendar-month default that 0.5.5's successor replaced with the sliding
|
|
30
|
+
30 days, and was red on master.
|
|
31
|
+
|
|
32
|
+
## 0.5.5 — the Worktrees page renders too (it was never the drawer)
|
|
33
|
+
|
|
34
|
+
The failure reported since 0.5.0 was always on the WORKTREES page, and three
|
|
35
|
+
chapters fixed the card drawer instead — the drawer was verified, declared
|
|
36
|
+
working, and the page nobody had rendered kept asking
|
|
37
|
+
`compare/ms%2F<chapter>...tk-<id>`. Both branches of a landed card are pruned
|
|
38
|
+
when its chapter lands, so on every landed card the page drew a refusal over
|
|
39
|
+
work sitting in the trunk. Verifying a neighbour is not verifying.
|
|
40
|
+
|
|
41
|
+
- **`pages/WorktreeDiff.tsx` takes its range from `links.tsx::cardRange`** — the
|
|
42
|
+
same rule the drawer uses, never a second one that can drift: the card's
|
|
43
|
+
recorded commits, base = the oldest commit's PARENT. A tree with nothing
|
|
44
|
+
recorded keeps the two branch tips, which is right for a live tree whose work
|
|
45
|
+
is not committed yet and where the branch is the only handle there is.
|
|
46
|
+
- **Pinned on the rendered PAGE** (`ui/smoke/sections/worktree-page-range.tsx`),
|
|
47
|
+
read off its `data-range`, with the call-site mutation measured red — the
|
|
48
|
+
previous section pinned the rule one layer below the call site and a call-site
|
|
49
|
+
mutation was green while production stayed broken.
|
|
50
|
+
- **The history that was missing is on the host now**: 91 card branches and 19
|
|
51
|
+
chapter branches, pushed at the tips the board recorded, plus two cards whose
|
|
52
|
+
oldest commit was not an ancestor of their newest (rebased in their day) and
|
|
53
|
+
so needed its own ref. Audited across every card on the board: 87 of 89 render
|
|
54
|
+
a real diff on both surfaces, and the two that do not have no commit recorded
|
|
55
|
+
at all — there is nothing to diff, and their refusal is literally true.
|
|
56
|
+
|
|
6
57
|
## 0.5.4 — the Files-changed pane renders for a landed card
|
|
7
58
|
|
|
8
59
|
**0.5.3 is withdrawn in all but name.** It carries this release's source fix but
|
|
@@ -75,8 +75,16 @@ class Handler(BaseHTTPRequestHandler):
|
|
|
75
75
|
elif tail.startswith("ui"):
|
|
76
76
|
page.answer(self, board, tail[2:]) # 0.5.0's address, kept — links were pasted
|
|
77
77
|
elif self.mounts.ui is None and NAME.match(board) and (not tail or static.asset(tail)):
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
if not tail and not self.path.partition("?")[0].endswith("/"):
|
|
79
|
+
# The page's assets are RELATIVE (./app.js — one bundle, three mounts),
|
|
80
|
+
# so the slashless /<board> resolves them against the root and renders
|
|
81
|
+
# blank: exactly the address people paste. One hop repairs them all —
|
|
82
|
+
# keeping the query, because ?token= is how a window authenticates.
|
|
83
|
+
_, sep, query = self.path.partition("?")
|
|
84
|
+
self._redirect(f"/{board}/{sep}{query}")
|
|
85
|
+
else:
|
|
86
|
+
# the page at the board's OWN address; assets are a CLOSED set
|
|
87
|
+
page.answer(self, board, tail)
|
|
80
88
|
elif (found := static.at_root(self.mounts.ui, self.path)) is not None:
|
|
81
89
|
self._send(200, *found) # a WINDOW serves its page at the ROOT
|
|
82
90
|
else:
|
|
@@ -170,6 +178,13 @@ class Handler(BaseHTTPRequestHandler):
|
|
|
170
178
|
def _json(self, status: int, body: dict[str, Any]) -> None:
|
|
171
179
|
self._send(status, json.dumps(body).encode(), "application/json")
|
|
172
180
|
|
|
181
|
+
def _redirect(self, location: str) -> None:
|
|
182
|
+
"""One permanent hop, no body — the only writer of a Location header."""
|
|
183
|
+
self.send_response(301)
|
|
184
|
+
self.send_header("Location", location)
|
|
185
|
+
self.send_header("Content-Length", "0")
|
|
186
|
+
self.end_headers()
|
|
187
|
+
|
|
173
188
|
def _send(self, status: int, data: bytes, kind: str) -> None:
|
|
174
189
|
"""Content-Length on EVERY answer: this is HTTP/1.1 with keep-alive, and a body
|
|
175
190
|
without one leaves the next request on the socket unparseable."""
|