kitaru 0.1.0__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.
@@ -0,0 +1,13 @@
1
+ {
2
+ "extraKnownMarketplaces": {
3
+ "astral-sh": {
4
+ "source": {
5
+ "source": "github",
6
+ "repo": "astral-sh/claude-code-plugins"
7
+ }
8
+ }
9
+ },
10
+ "enabledPlugins": {
11
+ "astral@astral-sh": true
12
+ }
13
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ version: 2
3
+ updates:
4
+ - package-ecosystem: github-actions
5
+ directory: /
6
+ schedule:
7
+ interval: weekly
8
+ day: tuesday
9
+ time: 07:00
10
+ timezone: Europe/Amsterdam
11
+ reviewers: [strickvl]
12
+ labels: [dependencies]
13
+ groups:
14
+ all-actions:
15
+ patterns: ['*']
16
+ target-branch: develop
@@ -0,0 +1,10 @@
1
+ ---
2
+ internal:
3
+ - '@htahir1'
4
+ - '@bcdurak'
5
+ - '@schustmi'
6
+ - '@strickvl'
7
+ - '@AlexejPenner'
8
+ - '@stefannica'
9
+ - '@safoinme'
10
+ - '@Cahllagerfeld'
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: CI
3
+ on:
4
+ push:
5
+ branches: [develop]
6
+ pull_request:
7
+ branches: [develop]
8
+ jobs:
9
+ lint:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: astral-sh/setup-uv@v5
14
+ - run: uv sync --frozen
15
+ - run: uv run ruff check .
16
+ - run: uv run ruff format --check .
17
+ - run: uv run yamlfix --check .github/
18
+ typos:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: crate-ci/typos@v1
23
+ typecheck:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ - uses: astral-sh/setup-uv@v5
28
+ - run: uv sync --frozen
29
+ - run: uv run ty check
30
+ links:
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ - uses: lycheeverse/lychee-action@v2
35
+ with:
36
+ args: --root-dir . --verbose --no-progress './**/*.md'
37
+ fail: true
38
+ jobSummary: true
39
+ env:
40
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
+ test:
42
+ runs-on: ubuntu-latest
43
+ strategy:
44
+ matrix:
45
+ python-version: ['3.12', '3.13']
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+ - uses: astral-sh/setup-uv@v5
49
+ with:
50
+ python-version: ${{ matrix.python-version }}
51
+ - run: uv sync --frozen
52
+ - run: uv run pytest
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: Compress Images
3
+ on:
4
+ pull_request:
5
+ # Run Image Actions when JPG, JPEG, PNG or WebP files are added or changed.
6
+ # See https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushpull_requestpaths for reference.
7
+ paths: ['**.jpg', '**.jpeg', '**.png', '**.webp']
8
+ permissions:
9
+ contents: write
10
+ jobs:
11
+ build:
12
+ # Only run on non-draft PRs within the same repository.
13
+ if: github.event.pull_request.head.repo.full_name == github.repository && github.event.pull_request.draft
14
+ == false
15
+ name: calibreapp/image-actions
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: Checkout Repo
19
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
20
+ - name: Compress Images
21
+ uses: calibreapp/image-actions@737ceeaeed61e17b8d358358a303f1b8d177b779 # 1.1.0
22
+ with:
23
+ # The `GITHUB_TOKEN` is automatically generated by GitHub and scoped only to the repository that is currently running the action. By default, the action can’t update Pull Requests initiated from forked repositories.
24
+ # See https://docs.github.com/en/actions/reference/authentication-in-a-workflow and https://help.github.com/en/articles/virtual-environments-for-github-actions#token-permissions
25
+ githubToken: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: Release
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version:
7
+ description: Version to release (e.g. 0.2.0)
8
+ required: true
9
+ type: string
10
+ dry-run:
11
+ description: Dry run (build and test but do not publish or push)
12
+ required: false
13
+ type: boolean
14
+ default: false
15
+ push:
16
+ tags: [v*]
17
+ permissions:
18
+ contents: write
19
+ id-token: write
20
+ concurrency:
21
+ group: release
22
+ cancel-in-progress: false
23
+ jobs:
24
+ release:
25
+ runs-on: ubuntu-latest
26
+ environment: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.dry-run == 'true' && '' || 'pypi' }}
27
+ steps:
28
+ # --- Determine version and trigger mode ---
29
+ - name: Set version from dispatch
30
+ if: github.event_name == 'workflow_dispatch'
31
+ run: echo "VERSION=${{ github.event.inputs.version }}" >> "$GITHUB_ENV"
32
+ - name: Set version from tag
33
+ if: github.event_name == 'push'
34
+ run: echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV"
35
+
36
+ # --- Validate version ---
37
+ - name: Validate semver format
38
+ run: |
39
+ if ! echo "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then
40
+ echo "::error::Invalid version format: $VERSION (expected semver like 1.2.3 or 1.2.3-rc.1)"
41
+ exit 1
42
+ fi
43
+ - name: Check tag does not already exist (dispatch only)
44
+ if: github.event_name == 'workflow_dispatch'
45
+ run: |
46
+ if git ls-remote --tags origin "refs/tags/v$VERSION" | grep -q .; then
47
+ echo "::error::Tag v$VERSION already exists"
48
+ exit 1
49
+ fi
50
+
51
+ # --- Checkout ---
52
+ - name: Checkout develop (dispatch)
53
+ if: github.event_name == 'workflow_dispatch'
54
+ uses: actions/checkout@v4
55
+ with:
56
+ ref: develop
57
+ fetch-depth: 0
58
+ token: ${{ secrets.GITHUB_TOKEN }}
59
+ - name: Checkout tagged commit (tag push)
60
+ if: github.event_name == 'push'
61
+ uses: actions/checkout@v4
62
+ with:
63
+ fetch-depth: 0
64
+
65
+ # --- Configure git ---
66
+ - name: Configure git identity
67
+ run: |
68
+ git config user.name "github-actions[bot]"
69
+ git config user.email "github-actions[bot]@users.noreply.github.com"
70
+
71
+ # --- Bump version (dispatch only) ---
72
+ - name: Bump version in pyproject.toml
73
+ if: github.event_name == 'workflow_dispatch'
74
+ run: |
75
+ sed -i "s/^version = \".*\"/version = \"$VERSION\"/" pyproject.toml
76
+ echo "Updated pyproject.toml to version $VERSION"
77
+ grep '^version' pyproject.toml
78
+ - name: Update CHANGELOG.md
79
+ if: github.event_name == 'workflow_dispatch'
80
+ run: |
81
+ DATE=$(date +%Y-%m-%d)
82
+ sed -i "s/^## \[Unreleased\]/## [Unreleased]\n\n## [$VERSION] - $DATE/" CHANGELOG.md
83
+ echo "Updated CHANGELOG.md for $VERSION ($DATE)"
84
+ - name: Commit release changes
85
+ if: github.event_name == 'workflow_dispatch'
86
+ run: |
87
+ git add pyproject.toml CHANGELOG.md
88
+ git commit -m "Release $VERSION"
89
+
90
+ # --- Verify version matches (tag push only) ---
91
+ - name: Verify tag matches pyproject.toml version
92
+ if: github.event_name == 'push'
93
+ run: |
94
+ TOML_VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
95
+ if [ "$TOML_VERSION" != "$VERSION" ]; then
96
+ echo "::error::Tag version ($VERSION) does not match pyproject.toml ($TOML_VERSION)"
97
+ exit 1
98
+ fi
99
+
100
+ # --- Run CI checks ---
101
+ - name: Install uv
102
+ uses: astral-sh/setup-uv@v5
103
+ - name: Install dependencies
104
+ run: uv sync --frozen
105
+ - name: Lint
106
+ run: |
107
+ uv run ruff check .
108
+ uv run ruff format --check .
109
+ - name: Type check
110
+ run: uv run ty check
111
+ - name: Test
112
+ run: uv run pytest
113
+
114
+ # --- Build ---
115
+ - name: Build package
116
+ run: uv build
117
+ - name: List build artifacts
118
+ run: ls -lh dist/
119
+
120
+ # --- Publish (skip on dry-run) ---
121
+ - name: Publish to PyPI
122
+ if: ${{ !(github.event_name == 'workflow_dispatch' && github.event.inputs.dry-run == 'true') }}
123
+ uses: pypa/gh-action-pypi-publish@release/v1
124
+
125
+ # --- Push release commit to develop (dispatch only, skip on dry-run) ---
126
+ - name: Push release commit to develop
127
+ if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.dry-run != 'true' }}
128
+ run: git push origin HEAD:develop
129
+
130
+ # --- Create release branch and update main (skip on dry-run) ---
131
+ - name: Create release branch
132
+ if: ${{ !(github.event_name == 'workflow_dispatch' && github.event.inputs.dry-run == 'true') }}
133
+ run: |
134
+ git checkout -b "release/$VERSION"
135
+ git push origin "release/$VERSION"
136
+ - name: Update main to release
137
+ if: ${{ !(github.event_name == 'workflow_dispatch' && github.event.inputs.dry-run == 'true') }}
138
+ run: git push --force origin "release/$VERSION:main"
139
+
140
+ # --- Tag (dispatch only, skip on dry-run) ---
141
+ - name: Create and push tag
142
+ if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.dry-run != 'true' }}
143
+ run: |
144
+ git tag "v$VERSION"
145
+ git push origin "v$VERSION"
146
+
147
+ # --- GitHub Release (skip on dry-run) ---
148
+ - name: Create GitHub Release
149
+ if: ${{ !(github.event_name == 'workflow_dispatch' && github.event.inputs.dry-run == 'true') }}
150
+ env:
151
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
152
+ run: |
153
+ gh release create "v$VERSION" dist/* \
154
+ --title "v$VERSION" \
155
+ --generate-notes
156
+
157
+ # --- Dry-run summary ---
158
+ - name: Dry-run summary
159
+ if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.dry-run == 'true' }}
160
+ run: |-
161
+ echo "## Dry-run complete" >> "$GITHUB_STEP_SUMMARY"
162
+ echo "Version: $VERSION" >> "$GITHUB_STEP_SUMMARY"
163
+ echo "Build artifacts:" >> "$GITHUB_STEP_SUMMARY"
164
+ ls dist/ >> "$GITHUB_STEP_SUMMARY"
165
+ echo "" >> "$GITHUB_STEP_SUMMARY"
166
+ echo "No changes were pushed, published, or tagged." >> "$GITHUB_STEP_SUMMARY"
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: Spellcheck
3
+ on:
4
+ workflow_dispatch:
5
+ workflow_call:
6
+ push:
7
+ branches: [develop]
8
+ pull_request:
9
+ branches: [develop]
10
+ types: [opened, synchronize, reopened, ready_for_review]
11
+ concurrency:
12
+ # New commit on branch cancels running workflows of the same branch
13
+ group: ${{ github.workflow }}-${{ github.ref }}
14
+ cancel-in-progress: true
15
+ jobs:
16
+ spellcheck:
17
+ if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }}
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
22
+ - name: Spelling checker
23
+ uses: crate-ci/typos@2361394247a38536a5f2376a05181ca001dd9e26 # v1.17.0
24
+ with:
25
+ files: .
26
+ config: ./.typos.toml
@@ -0,0 +1,224 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+ #poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ #pdm.lock
116
+ #pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ #pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # SageMath parsed files
135
+ *.sage.py
136
+
137
+ # Environments
138
+ .env
139
+ .envrc
140
+ .venv
141
+ env/
142
+ venv/
143
+ ENV/
144
+ env.bak/
145
+ venv.bak/
146
+
147
+ # Spyder project settings
148
+ .spyderproject
149
+ .spyproject
150
+
151
+ # Rope project settings
152
+ .ropeproject
153
+
154
+ # mkdocs documentation
155
+ /site
156
+
157
+ # mypy
158
+ .mypy_cache/
159
+ .dmypy.json
160
+ dmypy.json
161
+
162
+ # Pyre type checker
163
+ .pyre/
164
+
165
+ # pytype static type analyzer
166
+ .pytype/
167
+
168
+ # Cython debug symbols
169
+ cython_debug/
170
+
171
+ # PyCharm
172
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
173
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
174
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
175
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
176
+ #.idea/
177
+
178
+ # Abstra
179
+ # Abstra is an AI-powered process automation framework.
180
+ # Ignore directories containing user credentials, local state, and settings.
181
+ # Learn more at https://abstra.io/docs
182
+ .abstra/
183
+
184
+ # Visual Studio Code
185
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
186
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
187
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
188
+ # you could uncomment the following to ignore the entire vscode folder
189
+ # .vscode/
190
+
191
+ # Ruff stuff:
192
+ .ruff_cache/
193
+
194
+ # PyPI configuration file
195
+ .pypirc
196
+
197
+ # Cursor
198
+ # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
199
+ # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
200
+ # refer to https://docs.cursor.com/context/ignore-files
201
+ .cursorignore
202
+ .cursorindexingignore
203
+
204
+ # Marimo
205
+ marimo/_static/
206
+ marimo/_lsp/
207
+ __marimo__/
208
+
209
+ # Design docs
210
+ design/
211
+
212
+ # MCP
213
+ .mcp.json
214
+
215
+ # Claude
216
+ **/.claude/settings.local.json
217
+ .claude/*
218
+ !.claude/settings.json
219
+ !.claude/skills/
220
+
221
+ # Codex
222
+ .codex/*
223
+ !.codex/skills/
224
+ AGENTS.override.md
@@ -0,0 +1,17 @@
1
+ [files]
2
+ extend-exclude = [
3
+ "*.json",
4
+ "*.js",
5
+ "*.ipynb",
6
+ "uv.lock",
7
+ ]
8
+
9
+ [default.extend-identifiers]
10
+ HashiCorp = "HashiCorp"
11
+
12
+ [default.extend-words]
13
+ # Don't correct the surname "Teh"
14
+ aks = "aks"
15
+
16
+ [default]
17
+ locale = "en-us"
kitaru-0.1.0/AGENTS.md ADDED
@@ -0,0 +1,66 @@
1
+ # Repository Guidelines
2
+
3
+ ## Project Structure & Module Organization
4
+ Kitaru is a Python 3.12+ project for durable AI agent execution on ZenML. Use a `src` layout:
5
+ - `src/kitaru/`: core package and runtime primitives
6
+ - `src/kitaru/cli.py`: CLI entry point using [cyclopts](https://cyclopts.readthedocs.io/)
7
+ - `src/kitaru/adapters/`: framework integrations (for example PydanticAI)
8
+ - `tests/`: `pytest` test suite, mirroring package paths
9
+ - `design/`: design notes and meeting docs (ignored by git; do not commit)
10
+
11
+ At the moment, the repository is still bootstrapping; place new production code under `src/kitaru/` and tests under `tests/`.
12
+
13
+ ## Build, Test, and Development Commands
14
+ Use `uv` for dependency management and `just` as the command runner.
15
+ - `uv sync`: install and sync dependencies
16
+ - `just check`: run all checks (format, lint, typecheck, typos, yaml)
17
+ - `just test`: run full test suite
18
+ - `just test tests/test_file.py::test_name`: run one test
19
+ - `just fix`: auto-fix formatting, lint issues, and yaml
20
+ - `just lint`: run lint checks only
21
+ - `just typecheck`: run static type checks only
22
+ - `just typos`: run typo/spelling checks only
23
+ - `just build`: build wheel and sdist locally
24
+
25
+ ## Coding Style & Naming Conventions
26
+ - Follow US English spelling in code and docs (`initialize`, `serialize`, `color`).
27
+ - Use type hints on all public functions and return values.
28
+ - Prefer modern annotations (`list[str]`, `str | None`) over legacy `typing` aliases.
29
+ - Follow Google Python style for docstrings.
30
+ - Keep comments focused on *why* (intent/trade-offs), not line-by-line narration.
31
+ - Treat leading underscore names as private to module/class boundaries.
32
+ - Prefer Protocols/ABCs or `isinstance` over `getattr`/`hasattr` for capability checks.
33
+ - Put helpers on the class when tied to its behavior; use standalone utils only for generic cross-module functions.
34
+ - Prefer Pydantic models for data structures; checkpoint return values must be serializable.
35
+
36
+ ## CLI
37
+ The `kitaru` console script is defined in `pyproject.toml` under `[project.scripts]` and implemented with cyclopts in `src/kitaru/cli.py`. Add subcommands via `@app.command`. When testing CLI commands, always pass an explicit arg list (`app(["--help"])`, not bare `app()`). CLI invocations raise `SystemExit(0)` on success.
38
+
39
+ ## Testing Guidelines
40
+ Use `pytest` for unit and integration tests. Name files `test_*.py` and test functions `test_*`. Mirror source paths (example: `src/kitaru/runtime.py` -> `tests/test_runtime.py`). Every bug fix should include a regression test that fails before the fix and passes after it.
41
+
42
+ ## Commit & Pull Request Guidelines
43
+ Recent history uses short, imperative subjects (for example: `Add ...`, `Update ...`, `Create ...`). Keep commit titles concise (about 50 chars), and explain the why in the body when needed.
44
+
45
+ For pull requests, use a clear human-readable title and include:
46
+ - what changed
47
+ - why it was needed
48
+ - key implementation decisions
49
+ - reviewer focus areas
50
+
51
+ Link related issues (for example `Fixes #123`) when applicable.
52
+
53
+ ## CI
54
+ CI (`.github/workflows/ci.yml`) runs lint, type check, typos, and tests on push/PR to `develop` against Python 3.12 and 3.13.
55
+ Typo checking uses `crate-ci/typos` with config in `.typos.toml`.
56
+
57
+ ## Branching and Release Strategy
58
+
59
+ - Default branch is `develop`. All PRs target `develop`.
60
+ - `main` tracks the latest released version only; do not push directly.
61
+ - Releases are cut via the Release workflow (`workflow_dispatch` on `develop` or `v*` tag push).
62
+ - Release branches (`release/X.Y.Z`) and tags (`vX.Y.Z`) are created automatically.
63
+ - Version is maintained in `pyproject.toml` and bumped by the release workflow.
64
+
65
+ ## Security & Configuration Notes
66
+ Do not commit local secrets, `.env` files, or anything in `design/`. Use `uv` (not raw `pip`) for dependency management to keep environments reproducible.
@@ -0,0 +1,17 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2026-03-06
11
+
12
+ ### Added
13
+ - Initial project scaffolding with uv, ruff, ty, and CI
14
+ - CLI with cyclopts (`kitaru --version`, `kitaru --help`)
15
+ - Justfile for common development commands
16
+ - Link checking with lychee
17
+ - Typo checking with typos