miniapppolis-common-utils 5.0.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.
Files changed (105) hide show
  1. miniapppolis_common_utils-5.0.1/.coveragerc +6 -0
  2. miniapppolis_common_utils-5.0.1/.editorconfig +15 -0
  3. miniapppolis_common_utils-5.0.1/.env.example +22 -0
  4. miniapppolis_common_utils-5.0.1/.gitattributes +22 -0
  5. miniapppolis_common_utils-5.0.1/.github/dependabot.yml +42 -0
  6. miniapppolis_common_utils-5.0.1/.github/workflows/ci.yml +91 -0
  7. miniapppolis_common_utils-5.0.1/.gitignore +46 -0
  8. miniapppolis_common_utils-5.0.1/.pre-commit-config.yaml +18 -0
  9. miniapppolis_common_utils-5.0.1/.releaserc.json +29 -0
  10. miniapppolis_common_utils-5.0.1/CHANGELOG.md +278 -0
  11. miniapppolis_common_utils-5.0.1/PKG-INFO +248 -0
  12. miniapppolis_common_utils-5.0.1/README.md +211 -0
  13. miniapppolis_common_utils-5.0.1/docs/decisions/ADR-001-split-package-identity.md +54 -0
  14. miniapppolis_common_utils-5.0.1/docs/decisions/ADR-002-namespace-rename.md +44 -0
  15. miniapppolis_common_utils-5.0.1/docs/decisions/ADR-003-clerk-m2m-opaque-tokens.md +87 -0
  16. miniapppolis_common_utils-5.0.1/docs/decisions/README.md +21 -0
  17. miniapppolis_common_utils-5.0.1/docs/pypi-package-publishing.md +247 -0
  18. miniapppolis_common_utils-5.0.1/evaluator.yaml +17 -0
  19. miniapppolis_common_utils-5.0.1/pyproject.toml +89 -0
  20. miniapppolis_common_utils-5.0.1/scripts/verify-pypi-publishing.sh +64 -0
  21. miniapppolis_common_utils-5.0.1/src/mini_app_polis/__init__.py +51 -0
  22. miniapppolis_common_utils-5.0.1/src/mini_app_polis/api/__init__.py +4 -0
  23. miniapppolis_common_utils-5.0.1/src/mini_app_polis/api/client.py +213 -0
  24. miniapppolis_common_utils-5.0.1/src/mini_app_polis/api/errors.py +8 -0
  25. miniapppolis_common_utils-5.0.1/src/mini_app_polis/config.py +22 -0
  26. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/README.md +231 -0
  27. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/__init__.py +16 -0
  28. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/_auth.py +73 -0
  29. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/_retry.py +193 -0
  30. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/drive.py +913 -0
  31. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/errors.py +6 -0
  32. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/google.py +75 -0
  33. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/sheets.py +327 -0
  34. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/sheets_formatting.py +450 -0
  35. miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/types.py +13 -0
  36. miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/__init__.py +12 -0
  37. miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/_json.py +29 -0
  38. miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/anthropic_client.py +173 -0
  39. miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/base.py +34 -0
  40. miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/errors.py +17 -0
  41. miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/factory.py +33 -0
  42. miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/openai_client.py +187 -0
  43. miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/types.py +24 -0
  44. miniapppolis_common_utils-5.0.1/src/mini_app_polis/logger.py +61 -0
  45. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/__init__.py +30 -0
  46. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/__init__.py +27 -0
  47. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/identifier.py +139 -0
  48. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/io/__init__.py +0 -0
  49. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/io/tag_snapshot.py +57 -0
  50. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/providers/__init__.py +0 -0
  51. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/providers/acoustid_provider.py +184 -0
  52. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/providers/musicbrainz_provider.py +142 -0
  53. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/rename/__init__.py +13 -0
  54. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/rename/io/__init__.py +0 -0
  55. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/rename/io/rename_fs.py +160 -0
  56. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/rename/renamer.py +98 -0
  57. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/__init__.py +12 -0
  58. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/io/__init__.py +0 -0
  59. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/io/music_tag_io.py +242 -0
  60. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/models.py +11 -0
  61. miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/tagger.py +99 -0
  62. miniapppolis_common_utils-5.0.1/src/mini_app_polis/music/__init__.py +8 -0
  63. miniapppolis_common_utils-5.0.1/src/mini_app_polis/music/normalization.py +31 -0
  64. miniapppolis_common_utils-5.0.1/src/mini_app_polis/pipeline_status.py +576 -0
  65. miniapppolis_common_utils-5.0.1/src/mini_app_polis/serve_resilience.py +562 -0
  66. miniapppolis_common_utils-5.0.1/src/mini_app_polis/spotify/__init__.py +3 -0
  67. miniapppolis_common_utils-5.0.1/src/mini_app_polis/spotify/spotify.py +500 -0
  68. miniapppolis_common_utils-5.0.1/src/mini_app_polis/vdj/__init__.py +0 -0
  69. miniapppolis_common_utils-5.0.1/src/mini_app_polis/vdj/m3u/__init__.py +14 -0
  70. miniapppolis_common_utils-5.0.1/src/mini_app_polis/vdj/m3u/m3u.py +186 -0
  71. miniapppolis_common_utils-5.0.1/tests/__init__.py +0 -0
  72. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/__init__.py +0 -0
  73. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/api/__init__.py +0 -0
  74. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/api/test_api_client.py +380 -0
  75. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/api/test_api_key_auth.py +68 -0
  76. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/conftest.py +44 -0
  77. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/__init__.py +0 -0
  78. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/conftest.py +253 -0
  79. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_auth.py +44 -0
  80. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_drive_facade.py +357 -0
  81. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_google_api.py +41 -0
  82. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_more_coverage.py +104 -0
  83. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_retry.py +103 -0
  84. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_retry_edge_cases.py +34 -0
  85. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_sheets_facade.py +286 -0
  86. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_sheets_formatting.py +80 -0
  87. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/llm/__init__.py +0 -0
  88. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/llm/test_llm.py +450 -0
  89. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/mp3/__init__.py +0 -0
  90. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/mp3/test_mp3_identifier_and_providers.py +290 -0
  91. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/mp3/test_rename_facade_and_renamer.py +98 -0
  92. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/mp3/test_tag_snapshot_and_tagger.py +295 -0
  93. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/music/__init__.py +0 -0
  94. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/music/test_normalization.py +48 -0
  95. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/spotify/__init__.py +0 -0
  96. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/spotify/test_spotify_facade.py +528 -0
  97. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/spotify/test_spotify_trim_playlist.py +96 -0
  98. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/test_config.py +15 -0
  99. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/test_logger.py +52 -0
  100. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/test_pipeline_status.py +692 -0
  101. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/test_serve_resilience.py +703 -0
  102. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/vdj/__init__.py +0 -0
  103. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/vdj/m3u/__init__.py +0 -0
  104. miniapppolis_common_utils-5.0.1/tests/mini_app_polis/vdj/m3u/test_m3u_parsing.py +97 -0
  105. miniapppolis_common_utils-5.0.1/uv.lock +2079 -0
@@ -0,0 +1,6 @@
1
+ [run]
2
+ branch = True
3
+ source = mini_app_polis
4
+
5
+ [report]
6
+ show_missing = True
@@ -0,0 +1,15 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 4
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
10
+
11
+ [*.{yml,yaml,json,toml}]
12
+ indent_size = 2
13
+
14
+ [*.md]
15
+ trim_trailing_whitespace = false
@@ -0,0 +1,22 @@
1
+ # KaianoApiClient
2
+ KAIANO_API_BASE_URL=https://deejay-marvel-api.up.railway.app
3
+ # This caller's own named API key. The client derives the variable name
4
+ # from machine_name (deejay-cog -> DEEJAY_COG_API_KEY); KAIANO_API_KEY is
5
+ # the fallback for a caller that declares no name.
6
+ KAIANO_API_KEY=
7
+ KAIANO_API_OWNER_ID=dev-owner
8
+
9
+ # Logging
10
+ LOGGING_LEVEL=DEBUG
11
+
12
+ # Google APIs
13
+ GOOGLE_CREDENTIALS_JSON=
14
+
15
+ # Spotify
16
+ SPOTIPY_CLIENT_ID=
17
+ SPOTIPY_CLIENT_SECRET=
18
+ SPOTIPY_REFRESH_TOKEN=
19
+
20
+ # LLM (optional extra)
21
+ ANTHROPIC_API_KEY=
22
+ OPENAI_API_KEY=
@@ -0,0 +1,22 @@
1
+ # Lockfiles are generated artefacts, and git must never three-way merge
2
+ # one. A text merge of two lockfiles produces a file that is
3
+ # syntactically plausible and semantically wrong, with no conflict to
4
+ # warn anybody.
5
+ #
6
+ # That is not hypothetical. Two Dependabot branches each added the same
7
+ # new transitive package at different offsets in api-kaianolevine-com's
8
+ # uv.lock; git merged both hunks cleanly and the result carried two
9
+ # identical [[package]] blocks for truststore. uv then refused to parse
10
+ # its own lockfile, every CI run failed, and `uv lock` could not repair
11
+ # it either — it parses the existing lock before rewriting it. The same
12
+ # merge silently reverted an openai constraint in pyproject.toml while
13
+ # keeping the matching lock bump, so main pinned a version its manifest
14
+ # forbade.
15
+ #
16
+ # `-merge` makes git treat these as unmergeable: when both sides change
17
+ # one, the merge conflicts instead of inventing a result. The correct
18
+ # resolution for a lockfile is always to regenerate it, never to
19
+ # reconcile it line by line. This must be committed before the branches
20
+ # that would diverge — git reads the attribute from the merge base.
21
+
22
+ uv.lock -merge
@@ -0,0 +1,42 @@
1
+ # Automated dependency updates.
2
+ #
3
+ # The fleet audits dependencies on every build (ecosystem-standards
4
+ # SEC-003), which finds what has gone vulnerable but never fixes it.
5
+ # Clearing those by hand does not scale — one repo needed 45 advisories
6
+ # closed in a single sitting. This is the other half: keep dependencies
7
+ # current so the audit has less to find.
8
+ #
9
+ # `commit-message.prefix` is load-bearing, not cosmetic. Dependabot's
10
+ # default subject is "Bump x from y to z", which is not a Conventional
11
+ # Commit. Every repo here releases through semantic-release, so an
12
+ # unprefixed subject both trips VER-001 and cuts no release — the fix
13
+ # would land on main and never reach the registry.
14
+ #
15
+ # Minor and patch updates are grouped into one pull request per
16
+ # ecosystem per week. Majors arrive on their own, because a major is a
17
+ # decision rather than a bump.
18
+ version: 2
19
+ updates:
20
+ - package-ecosystem: "uv"
21
+ directory: "/"
22
+ schedule:
23
+ interval: "weekly"
24
+ day: "monday"
25
+ open-pull-requests-limit: 5
26
+ groups:
27
+ python-minor-and-patch:
28
+ update-types: ["minor", "patch"]
29
+ commit-message:
30
+ prefix: "fix(deps)"
31
+ prefix-development: "chore(deps)"
32
+ - package-ecosystem: "github-actions"
33
+ directory: "/"
34
+ schedule:
35
+ interval: "weekly"
36
+ day: "monday"
37
+ open-pull-requests-limit: 5
38
+ groups:
39
+ actions:
40
+ patterns: ["*"]
41
+ commit-message:
42
+ prefix: "ci(deps)"
@@ -0,0 +1,91 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ # Delegates to the fleet's shared security workflow: gitleaks over
11
+ # full history, pip-audit against the resolved dependency set, and
12
+ # semgrep. sbom: false because SEC-005 does not apply to a
13
+ # shared-library — nothing here is deployed, so there is no build image
14
+ # for an SBOM to describe. The steps live in mini-app-polis/.github;
15
+ # see that repo's README for the inputs.
16
+ security:
17
+ uses: mini-app-polis/.github/.github/workflows/security.yml@v1
18
+ with:
19
+ language: python
20
+ package-manager: uv
21
+ sbom: false
22
+
23
+ test:
24
+ runs-on: ubuntu-latest
25
+
26
+ steps:
27
+ - uses: actions/checkout@v7
28
+ with:
29
+ fetch-depth: 0
30
+
31
+ - name: Install uv
32
+ uses: astral-sh/setup-uv@v7
33
+
34
+ - name: Set up Python
35
+ run: uv python install 3.11
36
+
37
+ - name: Install dependencies
38
+ run: uv sync --all-extras
39
+
40
+ - name: Lint
41
+ run: uv run ruff check src/ tests/
42
+
43
+ - name: Format check
44
+ run: uv run ruff format --check src/ tests/
45
+
46
+ - name: Type check
47
+ run: uv run mypy src/
48
+
49
+ - name: Test
50
+ run: uv run pytest --cov=mini_app_polis --cov-report=term-missing
51
+
52
+ release:
53
+ needs: [test, security]
54
+ runs-on: ubuntu-latest
55
+ if: github.ref == 'refs/heads/main' && github.event_name == 'push'
56
+ permissions:
57
+ contents: write
58
+ issues: write
59
+ pull-requests: write
60
+ # PyPI trusted publishing. `uv publish --trusted-publishing always`
61
+ # exchanges this job's OIDC token for a short-lived PyPI credential,
62
+ # so there is no API token in Doppler and nothing to rotate. Unlike
63
+ # the npm path, this is the only credential shape offered here.
64
+ id-token: write
65
+
66
+ steps:
67
+ - uses: actions/checkout@v7
68
+ with:
69
+ fetch-depth: 0
70
+ token: ${{ secrets.GITHUB_TOKEN }}
71
+
72
+ - name: Install uv
73
+ uses: astral-sh/setup-uv@v7
74
+
75
+ - name: Set up Python
76
+ run: uv python install 3.11
77
+
78
+ - name: Install dependencies
79
+ run: uv sync --all-extras
80
+
81
+ - name: Setup Node
82
+ uses: actions/setup-node@v7
83
+ with:
84
+ node-version: 20
85
+
86
+ - name: Release
87
+ env:
88
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
89
+ run: |
90
+ npm install --no-save semantic-release @semantic-release/commit-analyzer @semantic-release/release-notes-generator @semantic-release/changelog @semantic-release/exec @semantic-release/git @semantic-release/github
91
+ npx semantic-release
@@ -0,0 +1,46 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.pyo
5
+ *.pyd
6
+ .Python
7
+ *.egg-info/
8
+ dist/
9
+ build/
10
+ *.egg
11
+ .eggs/
12
+
13
+ # uv / venv
14
+ .venv/
15
+ .uv/
16
+
17
+ # Testing & coverage
18
+ .pytest_cache/
19
+ .coverage
20
+ coverage.xml
21
+ htmlcov/
22
+
23
+ # Ruff
24
+ .ruff_cache/
25
+
26
+ # mypy
27
+ .mypy_cache/
28
+
29
+ # Editors
30
+ .vscode/
31
+ .idea/
32
+ *.swp
33
+ *.swo
34
+
35
+ # OS
36
+ .DS_Store
37
+ Thumbs.db
38
+
39
+ # Env
40
+ .env
41
+ .env.*
42
+ !.env.example
43
+
44
+ # Node (semantic-release CI only — not committed)
45
+ node_modules/
46
+ package-lock.json
@@ -0,0 +1,18 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.15.6
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
8
+ - repo: https://github.com/pre-commit/pygrep-hooks
9
+ rev: v1.10.0
10
+ hooks:
11
+ - id: python-check-mock-methods
12
+ - id: python-use-type-annotations
13
+ # SEC-001. Same gitleaks the shared security workflow runs in CI, so a
14
+ # secret is caught before it is committed rather than after it is pushed.
15
+ - repo: https://github.com/gitleaks/gitleaks
16
+ rev: v8.28.0
17
+ hooks:
18
+ - id: gitleaks
@@ -0,0 +1,29 @@
1
+ {
2
+ "branches": ["main"],
3
+ "plugins": [
4
+ "@semantic-release/commit-analyzer",
5
+ "@semantic-release/release-notes-generator",
6
+ [
7
+ "@semantic-release/changelog",
8
+ {
9
+ "changelogFile": "CHANGELOG.md"
10
+ }
11
+ ],
12
+ [
13
+ "@semantic-release/exec",
14
+ {
15
+ "verifyConditionsCmd": "./scripts/verify-pypi-publishing.sh",
16
+ "prepareCmd": "uv version ${nextRelease.version} && uv lock",
17
+ "publishCmd": "uv build && uv publish --trusted-publishing always"
18
+ }
19
+ ],
20
+ [
21
+ "@semantic-release/git",
22
+ {
23
+ "assets": ["CHANGELOG.md", "pyproject.toml", "uv.lock"],
24
+ "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
25
+ }
26
+ ],
27
+ "@semantic-release/github"
28
+ ]
29
+ }
@@ -0,0 +1,278 @@
1
+ ## [5.0.1](https://github.com/mini-app-polis/common-python-utils/compare/v5.0.0...v5.0.1) (2026-09-05)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **release:** verify PyPI trusted publishing before bumping the version ([27d2d6b](https://github.com/mini-app-polis/common-python-utils/commit/27d2d6b5f7bede9927fd12781e5e4b19632563c7))
7
+
8
+ # [5.0.0](https://github.com/mini-app-polis/common-python-utils/compare/v4.2.1...v5.0.0) (2026-09-05)
9
+
10
+
11
+ * feat!: publish to PyPI as miniapppolis-common-utils ([bd1b5d0](https://github.com/mini-app-polis/common-python-utils/commit/bd1b5d026ee3af19fe751663d7d95073cd6034d8))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **git:** never three-way merge a lockfile ([d763070](https://github.com/mini-app-polis/common-python-utils/commit/d763070263baabb2a5c73ac54d8731ab4c33146d))
17
+
18
+
19
+ ### BREAKING CHANGES
20
+
21
+ * the distribution is named miniapppolis-common-utils.
22
+ Anything declaring common-python-utils, including by git ref, must be
23
+ updated. See docs/pypi-package-publishing.md.
24
+
25
+ ## [4.2.1](https://github.com/mini-app-polis/common-python-utils/compare/v4.2.0...v4.2.1) (2026-09-04)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * **deps:** bump mypy from 1.20.2 to 2.3.1 ([1de6340](https://github.com/mini-app-polis/common-python-utils/commit/1de634093b6dedc3404eabb166cc01f9e65aef5d))
31
+
32
+ # [4.2.0](https://github.com/mini-app-polis/common-python-utils/compare/v4.1.0...v4.2.0) (2026-09-04)
33
+
34
+
35
+ ### Bug Fixes
36
+
37
+ * **api:** stop discarding a query string written into the path ([3b8474b](https://github.com/mini-app-polis/common-python-utils/commit/3b8474b3707dcf37cf2da0530a9e7a4887442716))
38
+
39
+
40
+ ### Features
41
+
42
+ * **deps:** automate dependency updates ([3914533](https://github.com/mini-app-polis/common-python-utils/commit/3914533120b6375787960cda39f59ace45a39ef5))
43
+
44
+ # [4.1.0](https://github.com/mini-app-polis/common-python-utils/compare/v4.0.2...v4.1.0) (2026-09-03)
45
+
46
+
47
+ ### Features
48
+
49
+ * **security:** call the shared security workflow, clear 22 advisories ([f4cc791](https://github.com/mini-app-polis/common-python-utils/commit/f4cc791a5671e916b2969b5bdb78937c78ae1189))
50
+
51
+ ## [4.0.2](https://github.com/mini-app-polis/common-python-utils/compare/v4.0.1...v4.0.2) (2026-09-02)
52
+
53
+
54
+ ### Bug Fixes
55
+
56
+ * **release:** re-lock as part of the release ([4f4e60e](https://github.com/mini-app-polis/common-python-utils/commit/4f4e60e3089e015ca0649c20341ba860b003327e))
57
+
58
+ ## [4.0.1](https://github.com/mini-app-polis/common-python-utils/compare/v4.0.0...v4.0.1) (2026-09-02)
59
+
60
+
61
+ ### Bug Fixes
62
+
63
+ * **deps:** re-lock after the 4.0.0 release ([2694b5f](https://github.com/mini-app-polis/common-python-utils/commit/2694b5fb13f3685c5b07d0f47b30645cc44e49ec))
64
+
65
+ # [4.0.0](https://github.com/mini-app-polis/common-python-utils/compare/v3.2.0...v4.0.0) (2026-09-02)
66
+
67
+
68
+ ### Features
69
+
70
+ * **api:** remove Clerk M2M token minting ([ac5a009](https://github.com/mini-app-polis/common-python-utils/commit/ac5a009102a1c48351623b38434d4690db8a2007))
71
+
72
+
73
+ ### BREAKING CHANGES
74
+
75
+ * **api:** KaianoApiClient no longer accepts machine_secret and no
76
+ longer reads KAIANO_API_CLERK_MACHINE_SECRET. Callers must pass machine_name
77
+ (or api_key). A cog without a key now fails rather than falling back to the
78
+ shared fleet identity — that fallback is what made every cog
79
+ indistinguishable in the first place.
80
+
81
+ # [3.2.0](https://github.com/mini-app-polis/common-python-utils/compare/v3.1.1...v3.2.0) (2026-09-02)
82
+
83
+
84
+ ### Features
85
+
86
+ * **api:** derive each machine's API key from its name ([b156cda](https://github.com/mini-app-polis/common-python-utils/commit/b156cda02b9120b42142f517a06fe58c10597670))
87
+
88
+ ## [3.1.1](https://github.com/mini-app-polis/common-python-utils/compare/v3.1.0...v3.1.1) (2026-09-02)
89
+
90
+
91
+ ### Bug Fixes
92
+
93
+ * finalizing identity procresses ([dac566d](https://github.com/mini-app-polis/common-python-utils/commit/dac566da76563ca90d3d5c5f89f36b5ea61fc9bb))
94
+
95
+ # [3.1.0](https://github.com/mini-app-polis/common-python-utils/compare/v3.0.0...v3.1.0) (2026-08-19)
96
+
97
+
98
+ ### Bug Fixes
99
+
100
+ * tests ([b7c5ee6](https://github.com/mini-app-polis/common-python-utils/commit/b7c5ee6a45d9138132f7c369e17ceb03ec88a56c))
101
+
102
+
103
+ ### Features
104
+
105
+ * **pipeline-status:** allow CRITICAL as a self-reported severity ([5ea69f7](https://github.com/mini-app-polis/common-python-utils/commit/5ea69f7520592bbc24f9a9bc77a8612217904c6d))
106
+
107
+ # [3.0.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.6.1...v3.0.0) (2026-05-27)
108
+
109
+
110
+ ### Bug Fixes
111
+
112
+ * pipeline status ([ce10f25](https://github.com/mini-app-polis/common-python-utils/commit/ce10f25f632231bfa0da6e0711e5a96ba75a27ab))
113
+ * pipeline status ([1eb932a](https://github.com/mini-app-polis/common-python-utils/commit/1eb932a6343be57882cee517027bb35bf4d5ae2d))
114
+
115
+
116
+ ### Features
117
+
118
+ * configurable max_tokens with truncation detection in LLM clients ([131fbd7](https://github.com/mini-app-polis/common-python-utils/commit/131fbd7765abfb76225650c986fdf8a9fb2784cc))
119
+
120
+
121
+ ### BREAKING CHANGES
122
+
123
+ * callers that previously caught LLMValidationError for
124
+ truncation will need to catch LLMTruncationError instead. The base
125
+ LLMError still catches both. The default max_tokens has doubled from
126
+ 8192 to 16384, which may affect API costs for callers that were
127
+ relying on the implicit cap.
128
+
129
+ Co-authored-by: Cursor <cursoragent@cursor.com>
130
+
131
+ ## [2.6.1](https://github.com/mini-app-polis/common-python-utils/compare/v2.6.0...v2.6.1) (2026-05-17)
132
+
133
+
134
+ ### Bug Fixes
135
+
136
+ * updated for transcript cof eval support ([b04e024](https://github.com/mini-app-polis/common-python-utils/commit/b04e024ce49014937612d100d698490c6ed6fbfc))
137
+
138
+ # [2.6.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.5.0...v2.6.0) (2026-05-17)
139
+
140
+
141
+ ### Features
142
+
143
+ * common pipeline eval structure moving to common ([d15df57](https://github.com/mini-app-polis/common-python-utils/commit/d15df575557bb1ff6c3b71195a27c2cb59f2cce4))
144
+
145
+ # [2.5.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.4.2...v2.5.0) (2026-04-18)
146
+
147
+
148
+ ### Features
149
+
150
+ * finalizing on opaque m2m tokens ([93fac4d](https://github.com/mini-app-polis/common-python-utils/commit/93fac4d82f47d402cbda57da8864f55b08db628c))
151
+
152
+ ## [2.4.2](https://github.com/mini-app-polis/common-python-utils/compare/v2.4.1...v2.4.2) (2026-04-17)
153
+
154
+
155
+ ### Bug Fixes
156
+
157
+ * debug warning ([9363d91](https://github.com/mini-app-polis/common-python-utils/commit/9363d9115dbea4986c650cf53178434d3ed2a0cb))
158
+
159
+ ## [2.4.1](https://github.com/mini-app-polis/common-python-utils/compare/v2.4.0...v2.4.1) (2026-04-17)
160
+
161
+
162
+ ### Bug Fixes
163
+
164
+ * debug ([6c9b474](https://github.com/mini-app-polis/common-python-utils/commit/6c9b474602e6fe6f546e270e58fc387753b25a92))
165
+
166
+ # [2.4.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.3.0...v2.4.0) (2026-04-17)
167
+
168
+
169
+ ### Features
170
+
171
+ * finishing the proper implementation of auth through clerk ([5ec090e](https://github.com/mini-app-polis/common-python-utils/commit/5ec090ec2c63fe6907a4f5ecf144e263d7379498))
172
+
173
+ # [2.3.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.2.0...v2.3.0) (2026-04-17)
174
+
175
+
176
+ ### Features
177
+
178
+ * updating m2m auth ([bdafc21](https://github.com/mini-app-polis/common-python-utils/commit/bdafc218ae267f73c6685e438d884b0bfc4ddc8e))
179
+
180
+ # [2.2.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.1.3...v2.2.0) (2026-04-17)
181
+
182
+
183
+ ### Features
184
+
185
+ * upgrading auth to m2m clerk pattern ([9512b0c](https://github.com/mini-app-polis/common-python-utils/commit/9512b0c4c7ad8c28405389ba1795f84f809eb0ea))
186
+
187
+ ## [2.1.3](https://github.com/mini-app-polis/common-python-utils/compare/v2.1.2...v2.1.3) (2026-04-02)
188
+
189
+
190
+ ### Bug Fixes
191
+
192
+ * docstrings, explicit CI coverage, and package identity docs (DOC-006, DOC-009, TEST-006) ([e8e2322](https://github.com/mini-app-polis/common-python-utils/commit/e8e2322bc3b9976dfe82aa6b6fa7d04c00e6152f))
193
+ * remove literal URL from docstring to clear evaluator false positive ([b796e6b](https://github.com/mini-app-polis/common-python-utils/commit/b796e6b4cae304c0d4d635e652a94aadcf598e6b))
194
+
195
+ ## [2.1.2](https://github.com/mini-app-polis/common-python-utils/compare/v2.1.1...v2.1.2) (2026-04-02)
196
+
197
+
198
+ ### Bug Fixes
199
+
200
+ * latest ([0557c55](https://github.com/mini-app-polis/common-python-utils/commit/0557c5546c6509322710250dfa8925e9a833957c))
201
+
202
+ ## [2.1.1](https://github.com/mini-app-polis/common-python-utils/compare/v2.1.0...v2.1.1) (2026-03-28)
203
+
204
+
205
+ ### Bug Fixes
206
+
207
+ * fix ([768a508](https://github.com/mini-app-polis/common-python-utils/commit/768a508cad7b423e7b4cd70b2f4571eeb070de32))
208
+
209
+ # [2.1.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.0.0...v2.1.0) (2026-03-27)
210
+
211
+
212
+ ### Features
213
+
214
+ * add music normalization module ([9ca9bfb](https://github.com/mini-app-polis/common-python-utils/commit/9ca9bfbd15d75f1ca7277b21924b280b46857e47))
215
+
216
+ # [2.0.0](https://github.com/mini-app-polis/common-python-utils/compare/v1.3.0...v2.0.0) (2026-03-27)
217
+
218
+
219
+ * feat!: rename import namespace from kaiano to mini_app_polis ([642cafa](https://github.com/mini-app-polis/common-python-utils/commit/642cafa2ebe37e96704a350ebec1708abd4dd54b))
220
+
221
+
222
+ ### BREAKING CHANGES
223
+
224
+ * all imports change from `from kaiano.x` to `from mini_app_polis.x`
225
+
226
+ Made-with: Cursor
227
+
228
+ # [2.0.0] — Breaking: import namespace renamed kaiano → mini_app_polis
229
+
230
+ All imports change from `from kaiano.x` to `from mini_app_polis.x`.
231
+
232
+ # [1.3.0](https://github.com/mini-app-polis/common-python-utils/compare/v1.2.0...v1.3.0) (2026-03-27)
233
+
234
+
235
+ ### Bug Fixes
236
+
237
+ * build ([f0573b3](https://github.com/mini-app-polis/common-python-utils/commit/f0573b31d7265d744b114396db5341e07f8c7f8a))
238
+
239
+
240
+ ### Features
241
+
242
+ * reverting auth ([6e6d013](https://github.com/mini-app-polis/common-python-utils/commit/6e6d013b0e6abb90920f85d77073165891da9338))
243
+
244
+ # [1.2.0](https://github.com/mini-app-polis/common-python-utils/compare/v1.1.2...v1.2.0) (2026-03-27)
245
+
246
+
247
+ ### Features
248
+
249
+ * adding clerk functionality ([02bb6bf](https://github.com/mini-app-polis/common-python-utils/commit/02bb6bf3aee963570c10282374b8ec784c6431d4))
250
+ * adding clerk functionality ([fb5abe6](https://github.com/mini-app-polis/common-python-utils/commit/fb5abe6871b689afa613a63548f230cd76bd5c2b))
251
+
252
+ ## [1.1.2](https://github.com/mini-app-polis/common-python-utils/compare/v1.1.1...v1.1.2) (2026-03-27)
253
+
254
+
255
+ ### Bug Fixes
256
+
257
+ * removing warning ([cfe5206](https://github.com/mini-app-polis/common-python-utils/commit/cfe52063457137b3d0058804c3a125e4eb70db0f))
258
+
259
+ ## [1.1.1](https://github.com/mini-app-polis/common-python-utils/compare/v1.1.0...v1.1.1) (2026-03-27)
260
+
261
+
262
+ ### Bug Fixes
263
+
264
+ * removing warning ([baa2475](https://github.com/mini-app-polis/common-python-utils/commit/baa2475e8d19e3e4eca3c56c0078fabef6844db3))
265
+
266
+ # [1.1.0](https://github.com/mini-app-polis/common-python-utils/compare/v1.0.0...v1.1.0) (2026-03-27)
267
+
268
+
269
+ ### Features
270
+
271
+ * cleanup and align with ecosystem standards ([c43bdbf](https://github.com/mini-app-polis/common-python-utils/commit/c43bdbfecad43558bedf240673f73dc9060f03fd))
272
+
273
+ # 1.0.0 (2026-03-27)
274
+
275
+
276
+ ### Features
277
+
278
+ * breaking change: cleaning up for build ([2552043](https://github.com/mini-app-polis/common-python-utils/commit/25520430dc22508ea98b351b1d9c7c73c2e739cf))