taskops-cli 0.5.5__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.5 → taskops_cli-0.5.6}/CHANGELOG.md +26 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/PKG-INFO +1 -1
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/_version.py +1 -1
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/handler.py +17 -2
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/ui/app.js +7 -7
- {taskops_cli-0.5.5 → 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.5 → taskops_cli-0.5.6}/ui/src/components/actors/Daysheet.tsx +26 -8
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/hoursWindow.ts +10 -4
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.claude/settings.json +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.gitattributes +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.github/workflows/ci.yml +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.github/workflows/workflow.yml +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.gitignore +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.mcp.json +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/board/cache.sqlite +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/board/cache.sqlite-shm +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/board/cache.sqlite-wal +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/board/events.jsonl +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/board/live.sqlite +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/board/live.sqlite-shm +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/board/live.sqlite-wal +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/board.json +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/reports/lifecycle-chapter.html +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/reports/reports-chapter.html +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/.taskops/ui.lock +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ARCHITECTURE.md +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/CLAUDE.md +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/README.md +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/pyproject.toml +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/smoke.sh +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/_clock.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/_errors.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/_ids.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/_json.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/_locate.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/_wire.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/board.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/__main__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/admin.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/claude.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/commands.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/enrol.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/github.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/gitremote.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/grants.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/hooks.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/main.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/operate.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/paging.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/parser.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/pull.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/push.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/remote.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/rm.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/serving.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/team.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/watch.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/window.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/cli/wording.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/actors.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/challenge.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/chapters.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/event.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/forge.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/graph.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/holding.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/hours.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/kinds.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/machine.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/mentions.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/replay.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/reports.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/review.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/scope.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/seams.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/core/types.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/bare.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/bind.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/catchup.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/claudefiles.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/diff.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/install.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/landing.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/onward.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/patch.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/remote.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/run.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/sig.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/trailer.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/gitwork/trees.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/admin.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/auth.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/feed.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/gitbody.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/gitdoor.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/gitpack.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/grants.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/ingest.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/login.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/members.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/mounts.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/page.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/removal.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/repos.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/routes.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/rpc.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/scoped.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/server.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/stale.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/static.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/upstream.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/http/watcher.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/identity.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/__main__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/activity.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/before.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/boards.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/boardview.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/brief.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/chapter.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/dossier.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/fields.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/gitmoves.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/hello.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/integrate.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/orders.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/render.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/schema.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/server.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/thread.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/mcp/tools.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/py.typed +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/session.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/cache.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/creds.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/handover.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/live.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/log.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/mirroring.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/pubkeys.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/reviews.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/server.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/store/stores.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/ui/index.html +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/ui/style.css +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_args.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_cards.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_chapter.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_context.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_facts.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_mentions.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_rows.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_stories.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_waiting.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/_windows.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/activity.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/assign.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/card.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/events.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/filed.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/plan.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/project.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/pulse.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/record.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/report.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/review.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/take.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/src/taskops/verbs/update.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/__init__.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/conftest.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_architecture.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_claude.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_core.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_git.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_mcp.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_mirror.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_report.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_store.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_topology.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_ui.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_verbs.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/test_window.py +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/tests/ui_harness.js +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/build.mjs +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/index.html +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/package-lock.json +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/package.json +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/fixture.json +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/main.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/run.mjs +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/actors.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/all-chapters-scope.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/board-columns.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/board-flow-view.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/board-motion-and-avatars.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/board-root-mount.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/card-diff-range.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/chapter-completion-derivation.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/chapter-landed.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/chapter-story-grid.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/chapters-open.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/comment-box.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/comment-toasts-model.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/comment-toasts-stack.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/diff-page.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/dossier.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/event-stream.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/feed-reconnect.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/forge-links.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/forge-opens-the-board.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/git-diff.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/hosted-window.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/monitor-panes.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/overlay-escape.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/report-markdown.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/report-sandbox.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/reviewing-skew.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/section.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/swarm-topology.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/thread-closing-note.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/worktree-page-range.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections/worktrees-index.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/smoke/sections.mjs +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/App.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/client.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/completed.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/actors/DevPanel.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/board/CardTile.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/board/Column.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/board/ViewToggle.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/board/flip.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/board/useFlip.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/card/CommentBox.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/card/Drawer.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/card/Patch.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/card/Sections.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/card/Thread.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/card/split.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/card/tokens.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/chrome/AvatarStack.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/chrome/Header.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/chrome/KpiRail.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/chrome/MilestonePicker.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/chrome/TabNav.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/flow/FlowView.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/flow/layout.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/Chapter.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/DependencyChain.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/EditSurface.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/EventStream.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/LeaseHealth.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/LiveLeases.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/Mentions.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/Pane.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/Swarm.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/Throughput.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/monitor/panels.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/reports/ReportFrame.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/shared/Avatar.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/shared/Markdown.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/shared/Overlay.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/shared/Segmented.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/shared/overlayStack.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/story/ChapterStory.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/story/stats.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/toasts/ToastStack.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/toasts/model.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/components/toasts/useToasts.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/format.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/links.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/main.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/markdown.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/pages/Actors.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/pages/Board.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/pages/Monitor.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/pages/Reports.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/pages/WorktreeDiff.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/pages/Worktrees.tsx +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/theme/theme.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/theme/tokens.css +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/types.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/useBoard.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/src/useEvents.ts +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/styles/index.css +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/ui/tsconfig.json +0 -0
- {taskops_cli-0.5.5 → taskops_cli-0.5.6}/uv.lock +0 -0
|
@@ -3,6 +3,32 @@
|
|
|
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
|
+
|
|
6
32
|
## 0.5.5 — the Worktrees page renders too (it was never the drawer)
|
|
7
33
|
|
|
8
34
|
The failure reported since 0.5.0 was always on the WORKTREES page, and three
|
|
@@ -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."""
|