scitex-todo 0.2.1__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.
- scitex_todo-0.2.1/.env.example +14 -0
- scitex_todo-0.2.1/.github/workflows/cla.yml +33 -0
- scitex_todo-0.2.1/.github/workflows/import-smoke-on-ubuntu-py3-12.yml +33 -0
- scitex_todo-0.2.1/.github/workflows/pypi-publish-and-github-release-on-tag.yml +174 -0
- scitex_todo-0.2.1/.github/workflows/pytest-matrix-on-ubuntu-py3-11-3-12-3-13.yml +43 -0
- scitex_todo-0.2.1/.github/workflows/rtd-sphinx-build-on-ubuntu-latest.yml +50 -0
- scitex_todo-0.2.1/.github/workflows/scitex-dev-quality-audit-on-ubuntu-latest.yml +31 -0
- scitex_todo-0.2.1/.gitignore +52 -0
- scitex_todo-0.2.1/.readthedocs.yaml +24 -0
- scitex_todo-0.2.1/.scitex/dev/config.yaml +2 -0
- scitex_todo-0.2.1/.scitex/todo/runtime/.gitkeep +0 -0
- scitex_todo-0.2.1/.scitex/todo/runtime/README.md +2 -0
- scitex_todo-0.2.1/CHANGELOG.md +61 -0
- scitex_todo-0.2.1/CLA.md +80 -0
- scitex_todo-0.2.1/CONTRIBUTING.md +69 -0
- scitex_todo-0.2.1/LICENSE +661 -0
- scitex_todo-0.2.1/PKG-INFO +286 -0
- scitex_todo-0.2.1/README.md +230 -0
- scitex_todo-0.2.1/docs/roadmap.md +65 -0
- scitex_todo-0.2.1/docs/scitex-icon-navy-inverted.png +0 -0
- scitex_todo-0.2.1/docs/scitex-logo-blue-cropped.png +0 -0
- scitex_todo-0.2.1/docs/sphinx/_static/.gitkeep +0 -0
- scitex_todo-0.2.1/docs/sphinx/api/scitex_todo.rst +7 -0
- scitex_todo-0.2.1/docs/sphinx/cli_reference.rst +42 -0
- scitex_todo-0.2.1/docs/sphinx/conf.py +105 -0
- scitex_todo-0.2.1/docs/sphinx/index.rst +89 -0
- scitex_todo-0.2.1/docs/sphinx/installation.rst +49 -0
- scitex_todo-0.2.1/docs/sphinx/quickstart.rst +86 -0
- scitex_todo-0.2.1/docs/sphinx/requirements.txt +5 -0
- scitex_todo-0.2.1/examples/00_run_all.sh +12 -0
- scitex_todo-0.2.1/examples/01_render_graph.py +27 -0
- scitex_todo-0.2.1/pyproject.toml +107 -0
- scitex_todo-0.2.1/src/scitex_todo/__init__.py +60 -0
- scitex_todo-0.2.1/src/scitex_todo/__main__.py +12 -0
- scitex_todo-0.2.1/src/scitex_todo/_cli/__init__.py +20 -0
- scitex_todo-0.2.1/src/scitex_todo/_cli/_completion.py +114 -0
- scitex_todo-0.2.1/src/scitex_todo/_cli/_introspect.py +124 -0
- scitex_todo-0.2.1/src/scitex_todo/_cli/_main.py +248 -0
- scitex_todo-0.2.1/src/scitex_todo/_cli/_skills.py +187 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/__init__.py +26 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/apps.py +23 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/.gitignore +3 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/eslint.config.js +16 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/index.html +14 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/package-lock.json +3166 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/package.json +27 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/public/favicon.svg +12 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/AutoRefresh.tsx +97 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/ContextMenu.tsx +220 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/DrillHistory.tsx +66 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/EdgeKindMenu.tsx +84 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/GraphView.tsx +675 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/InhibitionEdge.tsx +140 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/KeyboardShortcuts.tsx +95 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/NodeDetailPanel.tsx +435 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/TableView.tsx +188 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/Toast.tsx +50 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/TodoBoard.tsx +327 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/api/client.ts +137 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/bridge/MountPoint.ts +54 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/bridge/bridge-init.ts +23 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/clipboard.ts +87 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/exportBoard.ts +142 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/layout.ts +290 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/persist.ts +86 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/store/useBoardStore.ts +496 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/styles/board.css +1273 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/styles/detail.css +217 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/types/board.ts +48 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/src/useTheme.ts +32 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/tsconfig.json +20 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/frontend/vite.config.ts +32 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/handlers/__init__.py +41 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/handlers/crud.py +428 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/handlers/graph.py +109 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/handlers/priority.py +89 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/management/__init__.py +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/management/commands/__init__.py +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/management/commands/scitex_todo_board.py +61 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/manifest.json +32 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/services.py +85 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/settings.py +76 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/static/scitex_todo/.vite/manifest.json +11 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/static/scitex_todo/assets/index.css +1 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/static/scitex_todo/assets/index.js +82 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/static/scitex_todo/favicon.svg +12 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/static/scitex_todo/index.html +15 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/templates/scitex_todo/standalone.html +26 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/urls.py +20 -0
- scitex_todo-0.2.1/src/scitex_todo/_django/views.py +155 -0
- scitex_todo-0.2.1/src/scitex_todo/_mermaid.py +121 -0
- scitex_todo-0.2.1/src/scitex_todo/_model.py +266 -0
- scitex_todo-0.2.1/src/scitex_todo/_paths.py +98 -0
- scitex_todo-0.2.1/src/scitex_todo/_render.py +185 -0
- scitex_todo-0.2.1/src/scitex_todo/_skills/scitex-todo/01_installation.md +46 -0
- scitex_todo-0.2.1/src/scitex_todo/_skills/scitex-todo/02_quick-start.md +45 -0
- scitex_todo-0.2.1/src/scitex_todo/_skills/scitex-todo/03_python-api.md +80 -0
- scitex_todo-0.2.1/src/scitex_todo/_skills/scitex-todo/04_cli-reference.md +42 -0
- scitex_todo-0.2.1/src/scitex_todo/_skills/scitex-todo/10_campaign-tracking.md +75 -0
- scitex_todo-0.2.1/src/scitex_todo/_skills/scitex-todo/20_env-vars.md +36 -0
- scitex_todo-0.2.1/src/scitex_todo/_skills/scitex-todo/SKILL.md +48 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/.buildinfo +4 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/.doctrees/__intersphinx_cache__/python_objects.inv +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/.doctrees/api/scitex_todo.doctree +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/.doctrees/cli_reference.doctree +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/.doctrees/environment.pickle +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/.doctrees/index.doctree +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/.doctrees/installation.doctree +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/.doctrees/quickstart.doctree +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_modules/index.html +142 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_modules/scitex_todo/_mermaid.html +263 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_modules/scitex_todo/_model.html +414 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_modules/scitex_todo/_paths.html +243 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_modules/scitex_todo/_render.html +339 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_sources/api/scitex_todo.rst.txt +7 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_sources/cli_reference.rst.txt +42 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_sources/index.rst.txt +89 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_sources/installation.rst.txt +49 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_sources/quickstart.rst.txt +86 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/base-stemmer.js +476 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/basic.css +906 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/check-solid.svg +4 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/clipboard.min.js +7 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/copy-button.svg +5 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/copybutton.css +94 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/copybutton.js +248 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/copybutton_funcs.js +73 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/badge_only.css +1 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/lato-bold-italic.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/lato-bold.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/lato-bold.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/lato-normal-italic.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/lato-normal.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/fonts/lato-normal.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/css/theme.css +4 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/doctools.js +150 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/documentation_options.js +13 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/english-stemmer.js +1066 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/file.png +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-bold.eot +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-bold.ttf +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-bold.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-italic.eot +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-italic.ttf +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-italic.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-regular.eot +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-regular.ttf +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-regular.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/jquery.js +2 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/js/badge_only.js +1 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/js/theme.js +1 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/js/versions.js +228 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/language_data.js +13 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/minus.png +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/plus.png +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/pygments.css +75 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/searchtools.js +693 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/_static/sphinx_highlight.js +159 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/api/scitex_todo.html +379 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/cli_reference.html +200 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/genindex.html +235 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/index.html +261 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/installation.html +200 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/objects.inv +0 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/py-modindex.html +161 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/quickstart.html +240 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/search.html +158 -0
- scitex_todo-0.2.1/src/scitex_todo/_sphinx_html/searchindex.js +1 -0
- scitex_todo-0.2.1/src/scitex_todo/examples/tasks.yaml +92 -0
- scitex_todo-0.2.1/tests/examples/test_01_render_graph.py +36 -0
- scitex_todo-0.2.1/tests/integration/test_cross_package_imports.py +54 -0
- scitex_todo-0.2.1/tests/scitex_todo/_cli/test__completion.py +36 -0
- scitex_todo-0.2.1/tests/scitex_todo/_cli/test__introspect.py +51 -0
- scitex_todo-0.2.1/tests/scitex_todo/_cli/test__main.py +83 -0
- scitex_todo-0.2.1/tests/scitex_todo/_cli/test__skills.py +48 -0
- scitex_todo-0.2.1/tests/scitex_todo/_django/conftest.py +24 -0
- scitex_todo-0.2.1/tests/scitex_todo/_django/handlers/test_crud.py +386 -0
- scitex_todo-0.2.1/tests/scitex_todo/_django/handlers/test_priority.py +298 -0
- scitex_todo-0.2.1/tests/scitex_todo/_django/management/commands/test_scitex_todo_board.py +91 -0
- scitex_todo-0.2.1/tests/scitex_todo/_django/test_apps.py +32 -0
- scitex_todo-0.2.1/tests/scitex_todo/_django/test_views.py +308 -0
- scitex_todo-0.2.1/tests/scitex_todo/test__mermaid.py +84 -0
- scitex_todo-0.2.1/tests/scitex_todo/test__model.py +382 -0
- scitex_todo-0.2.1/tests/scitex_todo/test__paths.py +93 -0
- scitex_todo-0.2.1/tests/scitex_todo/test__render.py +37 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# scitex-todo environment variables
|
|
2
|
+
#
|
|
3
|
+
# Copy this file to `.env` (gitignored) and edit values for your setup.
|
|
4
|
+
# CLI flags always override env vars when both are given. Variables follow
|
|
5
|
+
# the SciTeX ecosystem convention: SCITEX_<MODULE>_<NAME>.
|
|
6
|
+
#
|
|
7
|
+
# Local state (per the SciTeX local-state convention) is read from:
|
|
8
|
+
# ~/.scitex/todo/ user-global task store
|
|
9
|
+
# <proj-root>/.scitex/todo/ project-local task store (preferred)
|
|
10
|
+
|
|
11
|
+
# Absolute path to the canonical tasks.yaml task store. When set, it wins
|
|
12
|
+
# over the project/user/bundled fallback chain (but a `--tasks` CLI flag
|
|
13
|
+
# still overrides it).
|
|
14
|
+
# SCITEX_TODO_TASKS=/abs/path/to/tasks.yaml
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: CLA Assistant
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issue_comment:
|
|
5
|
+
types: [created]
|
|
6
|
+
pull_request_target:
|
|
7
|
+
types: [opened, closed, synchronize]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
actions: write
|
|
11
|
+
contents: write
|
|
12
|
+
pull-requests: write
|
|
13
|
+
statuses: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
CLAssistant:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- name: CLA Assistant
|
|
20
|
+
uses: contributor-assistant/github-action@v2.6.1
|
|
21
|
+
env:
|
|
22
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
23
|
+
PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_PERSONAL_ACCESS_TOKEN }}
|
|
24
|
+
with:
|
|
25
|
+
path-to-signatures: "signatures/cla.json"
|
|
26
|
+
path-to-document: "https://github.com/ywatanabe1989/scitex-todo/blob/main/CLA.md"
|
|
27
|
+
branch: "cla-signatures"
|
|
28
|
+
allowlist: bot*,ywatanabe1989
|
|
29
|
+
custom-allsigned-prcomment: |
|
|
30
|
+
Thank you for signing the SciTeX CLA. Your contribution can now be reviewed.
|
|
31
|
+
custom-notsigned-prcomment: |
|
|
32
|
+
Please sign the [SciTeX CLA](https://github.com/ywatanabe1989/scitex-todo/blob/main/CLA.md) before your contribution can be merged.
|
|
33
|
+
Comment `I have read and agree to the SciTeX CLA.` to sign.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: import-smoke
|
|
2
|
+
|
|
3
|
+
# Confirms the bare package (no extras) is `pip install -e .`-able and
|
|
4
|
+
# `import scitex_todo` succeeds — catches `[project] dependencies` drift the
|
|
5
|
+
# test matrix masks because it installs `[all,dev]`.
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [main, develop]
|
|
10
|
+
pull_request:
|
|
11
|
+
branches: [main, develop]
|
|
12
|
+
schedule:
|
|
13
|
+
- cron: "0 7 * * *" # nightly 07:00 UTC
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
install-check:
|
|
18
|
+
name: import-smoke-on-ubuntu-py3-12
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
- name: Install (no extras)
|
|
26
|
+
run: |
|
|
27
|
+
python -m venv .venv
|
|
28
|
+
.venv/bin/pip install --upgrade pip
|
|
29
|
+
.venv/bin/pip install -e .
|
|
30
|
+
- name: Import smoke
|
|
31
|
+
run: .venv/bin/python -c "import scitex_todo; print(scitex_todo.__version__)"
|
|
32
|
+
- name: CLI smoke
|
|
33
|
+
run: .venv/bin/scitex-todo --version
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
# Tag-driven release pipeline:
|
|
4
|
+
#
|
|
5
|
+
# git tag vX.Y.Z && git push origin vX.Y.Z
|
|
6
|
+
#
|
|
7
|
+
# 1. test — matrix pytest on the tagged commit; halts the pipeline on
|
|
8
|
+
# failure (nothing publishes until tests are green).
|
|
9
|
+
# 2. build — wheel + sdist, uploaded as a workflow artifact.
|
|
10
|
+
# 3. publish — PyPI via OIDC trusted publisher (no long-lived secret).
|
|
11
|
+
# 4. release — GitHub Release with CHANGELOG notes + artifacts.
|
|
12
|
+
# 5. sync-main — open/admin-merge a develop->main PR so main equals the
|
|
13
|
+
# latest released commit.
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
push:
|
|
17
|
+
tags: ['v*']
|
|
18
|
+
workflow_dispatch:
|
|
19
|
+
inputs:
|
|
20
|
+
version:
|
|
21
|
+
description: 'Tag to publish (e.g. v0.2.0) — must already exist on the repo'
|
|
22
|
+
required: true
|
|
23
|
+
type: string
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
test:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
strategy:
|
|
29
|
+
fail-fast: false
|
|
30
|
+
matrix:
|
|
31
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
32
|
+
steps:
|
|
33
|
+
- name: Resolve version
|
|
34
|
+
id: ver
|
|
35
|
+
run: |
|
|
36
|
+
if [ "${{ github.event_name }}" = "push" ]; then
|
|
37
|
+
v="${GITHUB_REF#refs/tags/}"
|
|
38
|
+
else
|
|
39
|
+
v="${{ inputs.version }}"
|
|
40
|
+
fi
|
|
41
|
+
echo "version=$v" >> "$GITHUB_OUTPUT"
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
with:
|
|
44
|
+
ref: ${{ steps.ver.outputs.version }}
|
|
45
|
+
fetch-depth: 0
|
|
46
|
+
- uses: actions/setup-python@v5
|
|
47
|
+
with:
|
|
48
|
+
python-version: ${{ matrix.python-version }}
|
|
49
|
+
- name: Install (best-effort fallback chain)
|
|
50
|
+
run: |
|
|
51
|
+
python -m pip install --upgrade pip
|
|
52
|
+
pip install -e ".[all,dev]" || pip install -e ".[dev]" || pip install -e .
|
|
53
|
+
- name: Run pytest
|
|
54
|
+
run: |
|
|
55
|
+
if [ -d tests ]; then
|
|
56
|
+
pytest tests/ -x
|
|
57
|
+
else
|
|
58
|
+
echo "no tests/ directory — skipping pytest"
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
build:
|
|
62
|
+
needs: test
|
|
63
|
+
runs-on: ubuntu-latest
|
|
64
|
+
outputs:
|
|
65
|
+
version: ${{ steps.ver.outputs.version }}
|
|
66
|
+
steps:
|
|
67
|
+
- name: Resolve version
|
|
68
|
+
id: ver
|
|
69
|
+
run: |
|
|
70
|
+
if [ "${{ github.event_name }}" = "push" ]; then
|
|
71
|
+
v="${GITHUB_REF#refs/tags/}"
|
|
72
|
+
else
|
|
73
|
+
v="${{ inputs.version }}"
|
|
74
|
+
fi
|
|
75
|
+
echo "version=$v" >> "$GITHUB_OUTPUT"
|
|
76
|
+
- uses: actions/checkout@v4
|
|
77
|
+
with:
|
|
78
|
+
ref: ${{ steps.ver.outputs.version }}
|
|
79
|
+
fetch-depth: 0
|
|
80
|
+
- uses: actions/setup-python@v5
|
|
81
|
+
with:
|
|
82
|
+
python-version: "3.12"
|
|
83
|
+
- name: Install build tools
|
|
84
|
+
run: pip install build
|
|
85
|
+
- name: Build distribution
|
|
86
|
+
run: python -m build
|
|
87
|
+
- uses: actions/upload-artifact@v4
|
|
88
|
+
with:
|
|
89
|
+
name: dist
|
|
90
|
+
path: dist/
|
|
91
|
+
|
|
92
|
+
publish:
|
|
93
|
+
needs: build
|
|
94
|
+
runs-on: ubuntu-latest
|
|
95
|
+
environment:
|
|
96
|
+
name: pypi
|
|
97
|
+
url: https://pypi.org/p/scitex-todo
|
|
98
|
+
permissions:
|
|
99
|
+
id-token: write
|
|
100
|
+
steps:
|
|
101
|
+
- uses: actions/download-artifact@v4
|
|
102
|
+
with:
|
|
103
|
+
name: dist
|
|
104
|
+
path: dist
|
|
105
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
106
|
+
|
|
107
|
+
release:
|
|
108
|
+
needs: [build, publish]
|
|
109
|
+
runs-on: ubuntu-latest
|
|
110
|
+
permissions:
|
|
111
|
+
contents: write
|
|
112
|
+
steps:
|
|
113
|
+
- uses: actions/checkout@v4
|
|
114
|
+
with:
|
|
115
|
+
ref: ${{ needs.build.outputs.version }}
|
|
116
|
+
- uses: actions/download-artifact@v4
|
|
117
|
+
with:
|
|
118
|
+
name: dist
|
|
119
|
+
path: dist
|
|
120
|
+
- name: Extract release notes from CHANGELOG.md
|
|
121
|
+
run: |
|
|
122
|
+
VERSION="${{ needs.build.outputs.version }}"
|
|
123
|
+
VERSION="${VERSION#v}"
|
|
124
|
+
awk -v v="$VERSION" '
|
|
125
|
+
$0 ~ "^## \\[" v "\\]" {p=1; next}
|
|
126
|
+
p && /^## \[/ {exit}
|
|
127
|
+
p
|
|
128
|
+
' CHANGELOG.md > release-notes.md || true
|
|
129
|
+
if [ ! -s release-notes.md ]; then
|
|
130
|
+
echo "Release v${VERSION}. See CHANGELOG.md for details." > release-notes.md
|
|
131
|
+
fi
|
|
132
|
+
- name: Create GitHub Release
|
|
133
|
+
env:
|
|
134
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
135
|
+
run: |
|
|
136
|
+
gh release create "${{ needs.build.outputs.version }}" \
|
|
137
|
+
--title "${{ needs.build.outputs.version }}" \
|
|
138
|
+
--notes-file release-notes.md \
|
|
139
|
+
dist/*
|
|
140
|
+
|
|
141
|
+
sync-main:
|
|
142
|
+
needs: publish
|
|
143
|
+
runs-on: ubuntu-latest
|
|
144
|
+
permissions:
|
|
145
|
+
contents: write
|
|
146
|
+
pull-requests: write
|
|
147
|
+
steps:
|
|
148
|
+
- uses: actions/checkout@v4
|
|
149
|
+
with:
|
|
150
|
+
fetch-depth: 0
|
|
151
|
+
ref: develop
|
|
152
|
+
- name: Open develop->main PR if diverged
|
|
153
|
+
env:
|
|
154
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
155
|
+
run: |
|
|
156
|
+
set -e
|
|
157
|
+
git fetch origin main
|
|
158
|
+
AHEAD=$(git rev-list --count origin/main..origin/develop)
|
|
159
|
+
if [ "$AHEAD" -eq 0 ]; then
|
|
160
|
+
echo "main already up-to-date with develop."
|
|
161
|
+
exit 0
|
|
162
|
+
fi
|
|
163
|
+
EXISTING=$(gh pr list --base main --head develop --state open --json number --jq '.[0].number // empty')
|
|
164
|
+
if [ -z "$EXISTING" ]; then
|
|
165
|
+
PR_URL=$(gh pr create --base main --head develop \
|
|
166
|
+
--title "release: sync main with develop" \
|
|
167
|
+
--body "Auto-opened by the release pipeline so main equals the latest released commit.")
|
|
168
|
+
EXISTING=$(echo "$PR_URL" | grep -oE '[0-9]+$')
|
|
169
|
+
echo "Created PR #${EXISTING}"
|
|
170
|
+
else
|
|
171
|
+
echo "Reusing existing PR #${EXISTING}"
|
|
172
|
+
fi
|
|
173
|
+
gh pr merge "$EXISTING" --merge --admin \
|
|
174
|
+
|| echo "Admin merge unavailable; PR left open for manual merge."
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, develop]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "0 7 * * *" # nightly 07:00 UTC
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
name: pytest-matrix-on-ubuntu-py${{ matrix.python-version }}
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
23
|
+
uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: ${{ matrix.python-version }}
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: |
|
|
28
|
+
python -m pip install --upgrade pip
|
|
29
|
+
# Fallback chain: prefer [all,dev] so the Django board paths get
|
|
30
|
+
# exercised. The web extra pulls unpublished sibling packages
|
|
31
|
+
# (scitex-app/scitex-ui), so fall back to [dev] then a bare editable
|
|
32
|
+
# install — the board tests skip cleanly when Django is absent.
|
|
33
|
+
pip install -e ".[all,dev]" || pip install -e ".[dev]" || pip install -e .
|
|
34
|
+
- name: Run tests
|
|
35
|
+
run: |
|
|
36
|
+
pytest tests/ --cov=src/scitex_todo --cov-report=xml --cov-report=term
|
|
37
|
+
- name: Upload coverage to Codecov
|
|
38
|
+
if: always() && matrix.python-version == '3.12'
|
|
39
|
+
uses: codecov/codecov-action@v5
|
|
40
|
+
with:
|
|
41
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
42
|
+
files: ./coverage.xml
|
|
43
|
+
fail_ci_if_error: false
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: docs
|
|
2
|
+
|
|
3
|
+
# Builds the Sphinx docs with warnings-as-errors so a broken docstring,
|
|
4
|
+
# cross-reference, or toctree entry fails the PR before it can reach Read
|
|
5
|
+
# the Docs. Mirrors the RTD build (docs/sphinx/conf.py).
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [main, develop]
|
|
10
|
+
pull_request:
|
|
11
|
+
branches: [main, develop]
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
rtd-sphinx-build-on-ubuntu-latest:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
- name: Install package + docs deps
|
|
26
|
+
run: |
|
|
27
|
+
python -m pip install --upgrade pip
|
|
28
|
+
pip install -e .
|
|
29
|
+
pip install -r docs/sphinx/requirements.txt
|
|
30
|
+
- name: Build HTML (warnings as errors)
|
|
31
|
+
run: |
|
|
32
|
+
python -m sphinx -b html -W --keep-going \
|
|
33
|
+
docs/sphinx docs/sphinx/_build/html
|
|
34
|
+
- name: Refresh in-wheel _sphinx_html (main/develop only)
|
|
35
|
+
if: github.event_name == 'push'
|
|
36
|
+
run: |
|
|
37
|
+
rm -rf src/scitex_todo/_sphinx_html
|
|
38
|
+
cp -rf docs/sphinx/_build/html src/scitex_todo/_sphinx_html
|
|
39
|
+
# scitex-cloud serves docs from this in-wheel dir (PS-121).
|
|
40
|
+
if [ -n "$(git status --porcelain src/scitex_todo/_sphinx_html)" ]; then
|
|
41
|
+
git config user.name "github-actions[bot]"
|
|
42
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
43
|
+
git add src/scitex_todo/_sphinx_html
|
|
44
|
+
# The commit-message marker keeps this from triggering itself.
|
|
45
|
+
git commit -m "docs(build): refresh _sphinx_html [skip-docs-rebuild]"
|
|
46
|
+
git push || echo "push rejected (branch moved); skipping refresh commit"
|
|
47
|
+
else
|
|
48
|
+
echo "_sphinx_html already current."
|
|
49
|
+
fi
|
|
50
|
+
continue-on-error: true
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: quality
|
|
2
|
+
|
|
3
|
+
# Per-repo SciTeX quality audit. Installs the package + scitex-dev and runs
|
|
4
|
+
# `scitex-dev ecosystem audit-all` against this checkout (CLI, MCP, skills,
|
|
5
|
+
# Python-API, and project-structure conformance).
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [main, develop]
|
|
10
|
+
pull_request:
|
|
11
|
+
branches: [main, develop]
|
|
12
|
+
schedule:
|
|
13
|
+
- cron: "0 8 * * *" # 08:00 UTC, after the 07:00 test runs
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
audit:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
timeout-minutes: 15
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
- name: Install package + scitex-dev
|
|
26
|
+
run: |
|
|
27
|
+
python -m pip install --upgrade pip
|
|
28
|
+
pip install -e .
|
|
29
|
+
pip install scitex-dev
|
|
30
|
+
- name: Run scitex-dev audit-all
|
|
31
|
+
run: scitex-dev ecosystem audit-all scitex-todo --no-version-check
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*$py.class
|
|
4
|
+
*.so
|
|
5
|
+
*.egg-info/
|
|
6
|
+
*.egg
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
.eggs/
|
|
10
|
+
*.whl
|
|
11
|
+
.venv/
|
|
12
|
+
venv/
|
|
13
|
+
env/
|
|
14
|
+
.env
|
|
15
|
+
.tox/
|
|
16
|
+
.pytest_cache/
|
|
17
|
+
.mypy_cache/
|
|
18
|
+
.ruff_cache/
|
|
19
|
+
.coverage
|
|
20
|
+
.coverage.*
|
|
21
|
+
htmlcov/
|
|
22
|
+
*.swp
|
|
23
|
+
*.swo
|
|
24
|
+
*~
|
|
25
|
+
.DS_Store
|
|
26
|
+
.idea/
|
|
27
|
+
.vscode/
|
|
28
|
+
|
|
29
|
+
# Agent scratch + local git worktrees — never committed.
|
|
30
|
+
GITIGNORED/
|
|
31
|
+
.worktrees/
|
|
32
|
+
|
|
33
|
+
# Rendered task graphs — generated artifacts, never committed.
|
|
34
|
+
tasks.png
|
|
35
|
+
*.tasks.png
|
|
36
|
+
|
|
37
|
+
# Sphinx build output (RTD builds from source; local HTML is throwaway).
|
|
38
|
+
docs/sphinx/_build/
|
|
39
|
+
|
|
40
|
+
# scitex-todo local state: ignore everything under .scitex/ except the
|
|
41
|
+
# tracked dev/config.yaml (audit whitelist) and the runtime seed files.
|
|
42
|
+
.scitex/*
|
|
43
|
+
!.scitex/dev/
|
|
44
|
+
.scitex/dev/*
|
|
45
|
+
!.scitex/dev/config.yaml
|
|
46
|
+
# Track the todo runtime dir's seed files; ignore its actual contents.
|
|
47
|
+
!.scitex/todo/
|
|
48
|
+
.scitex/todo/*
|
|
49
|
+
!.scitex/todo/runtime/
|
|
50
|
+
.scitex/todo/runtime/*
|
|
51
|
+
!.scitex/todo/runtime/.gitkeep
|
|
52
|
+
!.scitex/todo/runtime/README.md
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Read the Docs configuration. https://docs.readthedocs.io/en/stable/config-file/v2.html
|
|
2
|
+
version: 2
|
|
3
|
+
|
|
4
|
+
build:
|
|
5
|
+
os: ubuntu-22.04
|
|
6
|
+
tools:
|
|
7
|
+
python: "3.11"
|
|
8
|
+
|
|
9
|
+
sphinx:
|
|
10
|
+
configuration: docs/sphinx/conf.py
|
|
11
|
+
fail_on_warning: false
|
|
12
|
+
|
|
13
|
+
formats:
|
|
14
|
+
- pdf
|
|
15
|
+
- epub
|
|
16
|
+
|
|
17
|
+
python:
|
|
18
|
+
install:
|
|
19
|
+
# The package itself (web/docs extras pull Django + Sphinx). The board
|
|
20
|
+
# deps (scitex-app/scitex-ui) are mocked in conf.py, so a bare install
|
|
21
|
+
# plus the docs requirements is enough to build the API docs.
|
|
22
|
+
- method: pip
|
|
23
|
+
path: .
|
|
24
|
+
- requirements: docs/sphinx/requirements.txt
|
|
File without changes
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/), and the project adheres to
|
|
5
|
+
[Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [0.2.0] - 2026-05-27
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Web board (read-only React-Flow dependency graph) served by Django:
|
|
11
|
+
`scitex-todo board` (needs the `[web]` extra). Nodes colored by status,
|
|
12
|
+
`depends_on` arrows, `blocks` inhibition edges, clickable cards, and
|
|
13
|
+
nested-graph drill-down via a new `parent` task field.
|
|
14
|
+
- Drag-reorder write path: the board's `POST /priority` handler persists a new
|
|
15
|
+
ordering back to the YAML store (preserving comments via ruamel) — the first
|
|
16
|
+
agent↔user GUI write surface. `save_tasks` is now public.
|
|
17
|
+
- §1a CLI introspection: `list-python-apis` (with the additive `-v/-vv/-vvv`
|
|
18
|
+
ladder) and `mcp list-tools`, both with `--json`.
|
|
19
|
+
- Shell completion: `install-shell-completion` / `print-shell-completion`
|
|
20
|
+
(bash/zsh/fish) using the static cache-file pattern.
|
|
21
|
+
- Agent skills: bundled `_skills/scitex-todo/` (installation, quick-start,
|
|
22
|
+
python-api, cli-reference, env-vars) plus a self-contained
|
|
23
|
+
`skills {list, get, install}` CLI group.
|
|
24
|
+
- `python -m scitex_todo` entry point; `.env.example`; `examples/` with a
|
|
25
|
+
matching `tests/examples/` smoke test; cross-package integration gate.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- **CLI verbs renamed** to noun-verb compounds (audit §1): `render` →
|
|
29
|
+
`render-graph`, `list` → `list-tasks` (now with `--json`). Added top-level
|
|
30
|
+
`--help-recursive` and `--json`.
|
|
31
|
+
- `_cli.py` split into a focused `_cli/` package (`_main`, `_introspect`,
|
|
32
|
+
`_completion`, `_skills`).
|
|
33
|
+
- README rebuilt to the canonical SciTeX layout (logo, badges, Problem/Solution,
|
|
34
|
+
Architecture diagram, Interfaces, footer); `docs/roadmap.md` refreshed.
|
|
35
|
+
- Added GitHub Actions: `tests`, `import-smoke`, `quality`, tag-driven
|
|
36
|
+
`release` (PyPI via OIDC + GitHub Release), and the CLA gate.
|
|
37
|
+
- Test suite reorganized to mirror `src/` and to satisfy the test-quality rules
|
|
38
|
+
(one assertion per test, AAA markers).
|
|
39
|
+
|
|
40
|
+
[0.2.0]: https://github.com/ywatanabe1989/scitex-todo/releases/tag/v0.2.0
|
|
41
|
+
|
|
42
|
+
## [0.1.0] - 2026-05-22
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
- Canonical YAML task store: top-level `tasks:` list with `id` / `title` /
|
|
46
|
+
`status` (required) and optional `repo` / `depends_on` / `blocks` / `note`.
|
|
47
|
+
- `load_tasks` — validating loader (`TaskValidationError` on missing id/title,
|
|
48
|
+
duplicate id, or invalid status). Statuses: `goal`, `pending`,
|
|
49
|
+
`in_progress`, `blocked`, `done`, `deferred`, `failed`.
|
|
50
|
+
- Mermaid adapter: `build_mermaid` renders `flowchart TB` with `depends_on`
|
|
51
|
+
arrows, `blocks` inhibition edges (`-- blocks --x`), and per-status colors
|
|
52
|
+
(goal = gold `#ffe082`).
|
|
53
|
+
- Renderer: `render` (mmdc-first with auto-discovered puppeteer/playwright
|
|
54
|
+
chromium and `--no-sandbox`; `kroki.io` fallback).
|
|
55
|
+
- Task-store path resolution following the SciTeX local-state convention:
|
|
56
|
+
explicit path -> `$SCITEX_TODO_TASKS` -> project `.scitex/todo/tasks.yaml`
|
|
57
|
+
-> user `~/.scitex/todo/tasks.yaml` -> bundled generic example.
|
|
58
|
+
- CLI `scitex-todo` (Click, noun-verb): `render`, `list`.
|
|
59
|
+
- Bundled generic example task store at `scitex_todo/examples/tasks.yaml`.
|
|
60
|
+
|
|
61
|
+
[0.1.0]: https://github.com/ywatanabe1989/scitex-todo/releases/tag/v0.1.0
|
scitex_todo-0.2.1/CLA.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# SciTeX Contributor License Agreement (CLA)
|
|
2
|
+
|
|
3
|
+
Version 1.0 -- Effective 2026-03-12
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
SciTeX is licensed under AGPL-3.0 and follows a dual-licensing model:
|
|
8
|
+
|
|
9
|
+
- **Researchers and individuals**: Free forever under AGPL-3.0.
|
|
10
|
+
- **Enterprises and institutions**: Commercial license available upon request.
|
|
11
|
+
|
|
12
|
+
To maintain the ability to offer dual licensing and ensure the long-term
|
|
13
|
+
sustainability of the project, we ask contributors to sign this CLA before
|
|
14
|
+
their first contribution is merged.
|
|
15
|
+
|
|
16
|
+
## Agreement
|
|
17
|
+
|
|
18
|
+
By submitting a pull request or other contribution to any SciTeX repository,
|
|
19
|
+
you agree to the following terms:
|
|
20
|
+
|
|
21
|
+
### 1. You retain copyright
|
|
22
|
+
|
|
23
|
+
You retain full copyright ownership of your contributions.
|
|
24
|
+
|
|
25
|
+
### 2. You grant a broad license to the project
|
|
26
|
+
|
|
27
|
+
You grant Yusuke Watanabe, and any successor entity operating the SciTeX
|
|
28
|
+
project (the "Project Lead"), a perpetual, worldwide, non-exclusive,
|
|
29
|
+
royalty-free, irrevocable license to:
|
|
30
|
+
|
|
31
|
+
- Use, reproduce, modify, and distribute your contributions.
|
|
32
|
+
- Sublicense your contributions under alternative licenses, including
|
|
33
|
+
dual-licensing for institutional and commercial use, for the purpose of
|
|
34
|
+
sustaining the SciTeX project.
|
|
35
|
+
|
|
36
|
+
### 3. You confirm originality
|
|
37
|
+
|
|
38
|
+
You confirm that:
|
|
39
|
+
|
|
40
|
+
- Your contributions are your original work.
|
|
41
|
+
- You have the legal right to grant the above license.
|
|
42
|
+
- Your contributions do not infringe on third-party rights.
|
|
43
|
+
|
|
44
|
+
If any portion is based on existing work, you have disclosed the source and
|
|
45
|
+
confirmed its license is compatible with AGPL-3.0.
|
|
46
|
+
|
|
47
|
+
### 4. No obligation
|
|
48
|
+
|
|
49
|
+
This agreement does not create any obligation for the Project Lead to use,
|
|
50
|
+
merge, or maintain your contributions.
|
|
51
|
+
|
|
52
|
+
## How to sign
|
|
53
|
+
|
|
54
|
+
When you open your first pull request, the CLA Assistant bot will ask you to
|
|
55
|
+
sign electronically. This is a one-time process per contributor.
|
|
56
|
+
|
|
57
|
+
Alternatively, you may sign by adding the following statement to your pull
|
|
58
|
+
request description:
|
|
59
|
+
|
|
60
|
+
> I have read and agree to the [SciTeX CLA](CLA.md).
|
|
61
|
+
|
|
62
|
+
## Why a CLA?
|
|
63
|
+
|
|
64
|
+
SciTeX aims to be free for researchers forever. A CLA ensures the project can:
|
|
65
|
+
|
|
66
|
+
- Offer institutional/campus licenses to universities and companies.
|
|
67
|
+
- Change licenses if needed to protect the community (e.g., against
|
|
68
|
+
proprietary forks).
|
|
69
|
+
- Provide legal clarity for institutions adopting SciTeX.
|
|
70
|
+
|
|
71
|
+
Revenue from commercial licensing accrues to the Project Lead and is used to
|
|
72
|
+
sustain the SciTeX project.
|
|
73
|
+
|
|
74
|
+
This is the same approach used by MongoDB, Elasticsearch, and many other
|
|
75
|
+
successful open-source projects with dual-licensing models.
|
|
76
|
+
|
|
77
|
+
## Questions
|
|
78
|
+
|
|
79
|
+
If you have questions about this CLA, please open an issue or contact
|
|
80
|
+
ywatanabe@scitex.ai.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Contributing to scitex-todo
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to SciTeX. This guide covers the
|
|
4
|
+
process for reporting issues, suggesting features, and submitting code.
|
|
5
|
+
|
|
6
|
+
## Contributor License Agreement
|
|
7
|
+
|
|
8
|
+
Before your first contribution can be merged, you must agree to the
|
|
9
|
+
[SciTeX CLA](CLA.md). This is a one-time process. The CLA ensures that:
|
|
10
|
+
|
|
11
|
+
- You retain copyright of your work.
|
|
12
|
+
- The project can continue to offer dual licensing (free for researchers,
|
|
13
|
+
commercial for enterprises).
|
|
14
|
+
|
|
15
|
+
See [CLA.md](CLA.md) for full details.
|
|
16
|
+
|
|
17
|
+
## Reporting Issues
|
|
18
|
+
|
|
19
|
+
- Search [existing issues](https://github.com/ywatanabe1989/scitex-todo/issues)
|
|
20
|
+
before opening a new one.
|
|
21
|
+
- Include a minimal reproducible example when reporting bugs.
|
|
22
|
+
- Specify your Python version, OS, and `scitex-todo` version.
|
|
23
|
+
|
|
24
|
+
## Development Setup
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
git clone git@github.com:ywatanabe1989/scitex-todo.git
|
|
28
|
+
cd scitex-todo
|
|
29
|
+
pip install -e ".[dev]"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Branch Workflow
|
|
33
|
+
|
|
34
|
+
- `main` -- stable releases only. Do not push directly.
|
|
35
|
+
- `develop` -- integration branch. PRs target here.
|
|
36
|
+
- Feature branches -- create from `develop`, name as `feature/<description>`.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
git checkout develop
|
|
40
|
+
git checkout -b feature/my-change
|
|
41
|
+
# ... make changes ...
|
|
42
|
+
git push origin feature/my-change
|
|
43
|
+
# Open PR targeting develop
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Code Style
|
|
47
|
+
|
|
48
|
+
- Follow existing conventions in the codebase.
|
|
49
|
+
- Use `_` prefix for internal/private modules and functions.
|
|
50
|
+
- Keep files under 512 lines.
|
|
51
|
+
- Run tests before submitting:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pytest tests/ -x -q
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Pull Request Process
|
|
58
|
+
|
|
59
|
+
1. Ensure your branch is up to date with `develop`.
|
|
60
|
+
2. Write tests for new functionality.
|
|
61
|
+
3. Run the test suite and confirm all tests pass.
|
|
62
|
+
4. Open a PR targeting `develop` with a clear description.
|
|
63
|
+
5. The CLA bot will check your CLA status on your first PR.
|
|
64
|
+
|
|
65
|
+
## License
|
|
66
|
+
|
|
67
|
+
By contributing, you agree to the terms of the [CLA](CLA.md), which includes
|
|
68
|
+
licensing under AGPL-3.0 (see [LICENSE](LICENSE)) and the dual-licensing
|
|
69
|
+
provisions described therein.
|