petfishframework 0.4.1__tar.gz → 0.4.5__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 (177) hide show
  1. petfishframework-0.4.5/.gitattributes +11 -0
  2. {petfishframework-0.4.1 → petfishframework-0.4.5}/.github/workflows/ci.yml +12 -0
  3. {petfishframework-0.4.1 → petfishframework-0.4.5}/CHANGELOG.md +52 -0
  4. {petfishframework-0.4.1 → petfishframework-0.4.5}/PKG-INFO +8 -2
  5. {petfishframework-0.4.1 → petfishframework-0.4.5}/README.md +7 -1
  6. petfishframework-0.4.5/docs/api-stability.md +88 -0
  7. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/api.md +733 -1
  8. petfishframework-0.4.5/docs/feedbacks/petfishframework_v0_4_1_review.md +704 -0
  9. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/skeleton-completeness-checklist.md +34 -23
  10. {petfishframework-0.4.1 → petfishframework-0.4.5}/pyproject.toml +1 -1
  11. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/__init__.py +1 -1
  12. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/environment.py +6 -2
  13. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/observability/siem_sink.py +12 -0
  14. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/permissions/__init__.py +5 -5
  15. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/permissions/model.py +1 -1
  16. {petfishframework-0.4.1 → petfishframework-0.4.5}/uv.lock +1 -1
  17. {petfishframework-0.4.1 → petfishframework-0.4.5}/.env.example +0 -0
  18. {petfishframework-0.4.1 → petfishframework-0.4.5}/.github/workflows/publish.yml +0 -0
  19. {petfishframework-0.4.1 → petfishframework-0.4.5}/.gitignore +0 -0
  20. {petfishframework-0.4.1 → petfishframework-0.4.5}/.sisyphus/plans/v0.1.6-plan.md +0 -0
  21. {petfishframework-0.4.1 → petfishframework-0.4.5}/.sisyphus/plans/v0.2.0-plan.md +0 -0
  22. {petfishframework-0.4.1 → petfishframework-0.4.5}/.sisyphus/plans/v0.3.0-plan.md +0 -0
  23. {petfishframework-0.4.1 → petfishframework-0.4.5}/.sisyphus/plans/v0.4.0-plan.md +0 -0
  24. {petfishframework-0.4.1 → petfishframework-0.4.5}/AGENTS.md +0 -0
  25. {petfishframework-0.4.1 → petfishframework-0.4.5}/AGENTS.md.new +0 -0
  26. {petfishframework-0.4.1 → petfishframework-0.4.5}/CONTRIBUTING.md +0 -0
  27. {petfishframework-0.4.1 → petfishframework-0.4.5}/Dockerfile +0 -0
  28. {petfishframework-0.4.1 → petfishframework-0.4.5}/LICENSE +0 -0
  29. {petfishframework-0.4.1 → petfishframework-0.4.5}/SECURITY.md +0 -0
  30. {petfishframework-0.4.1 → petfishframework-0.4.5}/conftest.py +0 -0
  31. {petfishframework-0.4.1 → petfishframework-0.4.5}/docker-compose.yml +0 -0
  32. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/architecture.md +0 -0
  33. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/benchmark-results.md +0 -0
  34. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/deployment.md +0 -0
  35. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/development-plan.md +0 -0
  36. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/development.md +0 -0
  37. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/enterprise-expense-demo.md +0 -0
  38. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_0_1_4_playground_recommendations.md +0 -0
  39. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_playground_report.md +0 -0
  40. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_production_readiness_roadmap.md +0 -0
  41. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_recommendations.md +0 -0
  42. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_1_6_playground_review.md +0 -0
  43. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_1_7_review.md +0 -0
  44. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_1_8_review.md +0 -0
  45. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_2_1_review.md +0 -0
  46. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_2_2_review.md +0 -0
  47. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_3_0_review.md +0 -0
  48. {petfishframework-0.4.1/docs/feedbacks → petfishframework-0.4.5/docs/feedbacks/archives}/petfishframework_v0_4_0_review.md +0 -0
  49. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/release-checklist.md +0 -0
  50. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/release-protocol.md +0 -0
  51. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/README.md +0 -0
  52. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/competitor-matrix.md +0 -0
  53. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/market-brief.md +0 -0
  54. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/positioning-map.md +0 -0
  55. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/swot-analysis.md +0 -0
  56. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/literature-review/inclusion-exclusion-criteria.md +0 -0
  57. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/literature-review/literature-matrix.md +0 -0
  58. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/literature-review/literature-review.md +0 -0
  59. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/literature-review/search-strategy.md +0 -0
  60. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/reference-repos-absorption.md +0 -0
  61. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/test-results-report.md +0 -0
  62. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/threat-model.md +0 -0
  63. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/usage-guide.md +0 -0
  64. {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/validation-roadmap.md +0 -0
  65. {petfishframework-0.4.1 → petfishframework-0.4.5}/initialization-report.md +0 -0
  66. {petfishframework-0.4.1 → petfishframework-0.4.5}/mcp/README.md +0 -0
  67. {petfishframework-0.4.1 → petfishframework-0.4.5}/mcp/connection-checklist.md +0 -0
  68. {petfishframework-0.4.1 → petfishframework-0.4.5}/mcp/mcp-config.example.json +0 -0
  69. {petfishframework-0.4.1 → petfishframework-0.4.5}/opencode.json +0 -0
  70. {petfishframework-0.4.1 → petfishframework-0.4.5}/qa/code-review-checklist.md +0 -0
  71. {petfishframework-0.4.1 → petfishframework-0.4.5}/qa/qa-review.md +0 -0
  72. {petfishframework-0.4.1 → petfishframework-0.4.5}/qa/qc-gate-decision.md +0 -0
  73. {petfishframework-0.4.1 → petfishframework-0.4.5}/qa/test-plan.md +0 -0
  74. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/__main__.py +0 -0
  75. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/config.py +0 -0
  76. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/__init__.py +0 -0
  77. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/agent.py +0 -0
  78. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/compiled.py +0 -0
  79. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/contracts.py +0 -0
  80. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/conversation.py +0 -0
  81. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/events.py +0 -0
  82. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/session.py +0 -0
  83. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/structured.py +0 -0
  84. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/types.py +0 -0
  85. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/credentials/__init__.py +0 -0
  86. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/credentials/broker.py +0 -0
  87. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/credentials/token.py +0 -0
  88. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/credentials/vault_adapter.py +0 -0
  89. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/__init__.py +0 -0
  90. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/client.py +0 -0
  91. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/server.py +0 -0
  92. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/stdio_transport.py +0 -0
  93. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/wrapper.py +0 -0
  94. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/models/__init__.py +0 -0
  95. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/models/anthropic.py +0 -0
  96. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/models/fake.py +0 -0
  97. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/models/openai.py +0 -0
  98. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/observability/__init__.py +0 -0
  99. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/observability/otel_sink.py +0 -0
  100. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/observability/sinks.py +0 -0
  101. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/__init__.py +0 -0
  102. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/conditions.py +0 -0
  103. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/engine.py +0 -0
  104. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/rule.py +0 -0
  105. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/test_runner.py +0 -0
  106. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/validator.py +0 -0
  107. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reasoning/__init__.py +0 -0
  108. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reasoning/lats.py +0 -0
  109. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reasoning/llm_plus_p.py +0 -0
  110. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reasoning/react.py +0 -0
  111. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/__init__.py +0 -0
  112. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/audit_report.py +0 -0
  113. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/cost.py +0 -0
  114. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/cost_report.py +0 -0
  115. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/pass_at_k.py +0 -0
  116. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/replay.py +0 -0
  117. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/retry.py +0 -0
  118. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/timeout.py +0 -0
  119. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/retrieval/__init__.py +0 -0
  120. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/retrieval/adaptive.py +0 -0
  121. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/retrieval/crag.py +0 -0
  122. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/retrieval/memory_store.py +0 -0
  123. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/__init__.py +0 -0
  124. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/agent_tool.py +0 -0
  125. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/base.py +0 -0
  126. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/calculator.py +0 -0
  127. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/path_planner.py +0 -0
  128. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/registry.py +0 -0
  129. {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/word_sorter.py +0 -0
  130. {petfishframework-0.4.1 → petfishframework-0.4.5}/tasks/backlog.md +0 -0
  131. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/integration/__init__.py +0 -0
  132. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/integration/test_anthropic_integration.py +0 -0
  133. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/integration/test_openai_integration.py +0 -0
  134. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/policies/enterprise-expense.tests.yaml +0 -0
  135. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_agent_tool.py +0 -0
  136. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_anthropic_adapter.py +0 -0
  137. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_agent_lifecycle.py +0 -0
  138. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_edge_cases.py +0 -0
  139. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_integration.py +0 -0
  140. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_public_surface.py +0 -0
  141. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_type_safety.py +0 -0
  142. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_async.py +0 -0
  143. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_audit_report_v2.py +0 -0
  144. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_conversation.py +0 -0
  145. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_credential_broker.py +0 -0
  146. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_credential_integration.py +0 -0
  147. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_degrade.py +0 -0
  148. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_degrade_failclosed.py +0 -0
  149. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_enterprise_demo.py +0 -0
  150. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_m2_m3_m4.py +0 -0
  151. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_main_entry.py +0 -0
  152. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_mcp.py +0 -0
  153. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_openai_adapter.py +0 -0
  154. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_otel_sink.py +0 -0
  155. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_pass_at_k.py +0 -0
  156. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_permission_semantics.py +0 -0
  157. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_quickstart_smoke.py +0 -0
  158. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_replay.py +0 -0
  159. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_replay_rerun.py +0 -0
  160. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_replay_resume.py +0 -0
  161. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_retrieval.py +0 -0
  162. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_retry.py +0 -0
  163. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_siem_export.py +0 -0
  164. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_skeleton.py +0 -0
  165. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_stdio_transport.py +0 -0
  166. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_streaming.py +0 -0
  167. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_structured.py +0 -0
  168. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_tool_registry.py +0 -0
  169. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v016_semantics.py +0 -0
  170. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v018.py +0 -0
  171. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v019.py +0 -0
  172. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v2_interface_compatibility.py +0 -0
  173. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v2_lats.py +0 -0
  174. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v2_llm_plus_p.py +0 -0
  175. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_vault_adapter.py +0 -0
  176. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_yaml_policy.py +0 -0
  177. {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_yaml_policy_suite.py +0 -0
@@ -0,0 +1,11 @@
1
+ # Normalize line endings across platforms — all text files use LF in the repo
2
+ * text=auto eol=lf
3
+
4
+ # Binary files — never touch
5
+ *.png binary
6
+ *.jpg binary
7
+ *.jpeg binary
8
+ *.gif binary
9
+ *.ico binary
10
+ *.pdf binary
11
+ *.drawio binary
@@ -31,3 +31,15 @@ jobs:
31
31
  - name: Run tests
32
32
  run: uv run pytest tests/ -q --tb=short
33
33
  # Integration tests are skipped automatically (no API key in CI)
34
+
35
+ docker-smoke:
36
+ runs-on: ubuntu-latest
37
+ needs: test
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+
41
+ - name: Build Docker image
42
+ run: docker build -t petfishframework .
43
+
44
+ - name: Run container smoke test
45
+ run: docker run --rm petfishframework
@@ -2,6 +2,58 @@
2
2
 
3
3
  All notable changes to petfishFramework will be documented in this file.
4
4
 
5
+ ## [0.4.5] — 2026-07-08
6
+
7
+ ### v0.5 Readiness: API Documentation + Technical Debt Cleanup
8
+
9
+ #### API Reference Overhaul (28 APIs documented)
10
+ - `docs/api.md` expanded from 1471 to 2203 lines (+50%)
11
+ - All 28 previously-undocumented public APIs now have full signatures, parameters, and examples:
12
+ - **Observability**: OTelSink, SIEMSink (with redact_keys boundary note)
13
+ - **Reliability**: RetryPolicy, with_retry, with_retry_async, RetryableError, RetryModelAdapter, retry_model_adapter, TimeoutPolicy, with_timeout, OperationTimedOut, RerunEnvironment, RerunResult, CostReport
14
+ - **Configuration**: FrameworkConfig (from_env, from_dict)
15
+ - **Conversation Memory**: ConversationStore, InMemoryConversationStore
16
+ - **Structured Output**: StructuredResult, parse_json, parse_structured
17
+ - **Tools**: AgentAsTool, WordSorter
18
+ - **Models**: AnthropicModel, AsyncFakeModel
19
+ - **Policies**: PolicyRule, load_policy
20
+ - **MCP**: serve_as_mcp (marked as v0.5 stub)
21
+
22
+ #### API Stability Policy
23
+ - New `docs/api-stability.md` classifies all public APIs into Stable / Experimental / Internal tiers
24
+ - Documents deprecation process and v1.0 freeze criteria
25
+
26
+ #### Code Cleanup (stale markers removed)
27
+ - `permissions/__init__.py`: docstring updated — CredentialBroker is implemented, not TODO
28
+ - `permissions/model.py`: DefaultAllowPolicy comment clarified (allow-all by design, not a skeleton TODO)
29
+ - `core/environment.py`: DEGRADE docstring fixed — tool switching IS implemented (was incorrectly marked "future work"); visibility gate clarified as v0.5 planned
30
+ - `docs/skeleton-completeness-checklist.md`: comprehensively updated to reflect v0.4.5 state (RESUME/RERUN, Pass^k, CredentialBroker, OTel/SIEM, retry/timeout all marked ✅)
31
+
32
+ ## [0.4.2] — 2026-07-08
33
+
34
+ ### CI & Deployment Hardening
35
+
36
+ #### Docker Smoke Test in CI
37
+ - New `docker-smoke` job in CI workflow: builds image and runs container
38
+ - Catches `__main__.py` / ENTRYPOINT regressions before release
39
+
40
+ #### Line Ending Normalization
41
+ - Added `.gitattributes` with `* text=auto eol=lf`
42
+ - All text files now use LF consistently across platforms
43
+
44
+ #### SIEMSink Documentation
45
+ - Docstring now explicitly states key-based redaction is not a DLP engine
46
+ - Clarifies that value-pattern secrets (sk-..., JWTs) are not detected
47
+ - Documents default redact_keys and nesting behavior
48
+
49
+ #### Observability Example
50
+ - New `examples/06_observability.py`: ListSink, ConsoleSink, SIEMSink, OTelSink demo
51
+ - Shows correct sink attachment via `session.events.subscribe()`
52
+ - Demonstrates custom `redact_keys` with nested field redaction
53
+
54
+ #### README Fix
55
+ - Observability example corrected: uses `session.events.subscribe()` instead of non-existent `event_sinks=` parameter
56
+
5
57
  ## [0.4.1] — 2026-07-08
6
58
 
7
59
  ### Review Fix Patch
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: petfishframework
3
- Version: 0.4.1
3
+ Version: 0.4.5
4
4
  Summary: A lightweight runtime framework for reliable, auditable, budget-aware, and permission-aware AI agents.
5
5
  Project-URL: Homepage, https://github.com/kylecui/petfishFramework
6
6
  Project-URL: Documentation, https://github.com/kylecui/petfishFramework/tree/master/docs
@@ -262,7 +262,13 @@ siem_sink = SIEMSink(output_path="audit.jsonl")
262
262
  # Credentials auto-redacted; configure additional secret fields:
263
263
  # siem_sink = SIEMSink(output_path="audit.jsonl", redact_keys=("api_key", "password"))
264
264
 
265
- agent = Agent(model=model, reasoning=ReAct(), tools=tools, event_sinks=(otel_sink, siem_sink))
265
+ agent = Agent(model=model, reasoning=ReAct(), tools=tools)
266
+
267
+ # Attach sinks to the session's EventEmitter
268
+ session = agent.session("your task")
269
+ session.events.subscribe(otel_sink)
270
+ session.events.subscribe(siem_sink)
271
+ result = session.run()
266
272
  ```
267
273
 
268
274
  ## Roadmap
@@ -227,7 +227,13 @@ siem_sink = SIEMSink(output_path="audit.jsonl")
227
227
  # Credentials auto-redacted; configure additional secret fields:
228
228
  # siem_sink = SIEMSink(output_path="audit.jsonl", redact_keys=("api_key", "password"))
229
229
 
230
- agent = Agent(model=model, reasoning=ReAct(), tools=tools, event_sinks=(otel_sink, siem_sink))
230
+ agent = Agent(model=model, reasoning=ReAct(), tools=tools)
231
+
232
+ # Attach sinks to the session's EventEmitter
233
+ session = agent.session("your task")
234
+ session.events.subscribe(otel_sink)
235
+ session.events.subscribe(siem_sink)
236
+ result = session.run()
231
237
  ```
232
238
 
233
239
  ## Roadmap
@@ -0,0 +1,88 @@
1
+ # API Stability Policy
2
+
3
+ > Effective: v0.4.5
4
+ > Goal: Help users understand which APIs are safe to depend on before v1.0.
5
+
6
+ ## Stability Tiers
7
+
8
+ | Tier | Meaning | Breaking changes | Versioning |
9
+ |---|---|---|---|
10
+ | **Stable** | API signature and semantics will not change before v1.0 without a deprecation cycle (min 1 minor version). | Only for security fixes. | Patch (0.4.x) |
11
+ | **Experimental** | API exists and works, but may change signature or semantics in the next minor version. | Allowed with CHANGELOG note. | Minor (0.x.0) |
12
+ | **Internal** | Used by the framework internally. May change or be removed without notice. | No guarantees. | Any |
13
+
14
+ ## Classification
15
+
16
+ ### Stable
17
+
18
+ These APIs have been validated by 300+ tests and are used in production-facing examples:
19
+
20
+ - `Agent`, `Session` — core execution abstractions
21
+ - `Budget`, `BudgetExceeded` — budget enforcement
22
+ - `DecisionEffect` (all 6 values) — permission semantics
23
+ - `Subject`, `Action`, `Resource`, `AccessContext`, `Decision` — SARC model
24
+ - `PermissionPolicy` protocol — policy interface
25
+ - `DefaultAllowPolicy`, `DenyByDefaultPolicy` — built-in policies
26
+ - `Event`, `EventEmitter` — event infrastructure
27
+ - `Result`, `Task`, `Step`, `Trajectory`, `Usage` — core types
28
+ - `Tool` protocol, `BaseTool`, `@tool` decorator
29
+ - `Calculator`, `WordSorter` — reference tools
30
+ - `FakeModel` — testing model
31
+ - `ReAct` — default reasoning strategy
32
+ - `RuntimeEnvironment` — the chokepoint
33
+ - `AuditReport`, `audit_report_from_session` — audit output
34
+ - `CredentialBroker`, `ScopedToken` — credential governance
35
+ - `YamlPolicy`, `PolicyRule` — YAML policy engine
36
+ - `pass_at_k`, `pass_at_k_with_perturbations` — reliability metric
37
+
38
+ ### Experimental
39
+
40
+ These APIs work and are tested, but their signatures or semantics may change:
41
+
42
+ - `OTelSink`, `SIEMSink` — observability sinks (redaction API may evolve)
43
+ - `RecordingEnvironment`, `ReplayEnvironment`, `RerunEnvironment`, `ResumableEnvironment` — replay wrappers
44
+ - `RerunResult` — divergence detection output format may change
45
+ - `RetryPolicy`, `with_retry`, `RetryModelAdapter` — retry infrastructure
46
+ - `TimeoutPolicy`, `with_timeout` — timeout infrastructure
47
+ - `VaultCredentialSource` — Vault adapter (needs real-world validation)
48
+ - `OpenAIModel`, `AnthropicModel` — model adapters (provider API changes)
49
+ - `LATS`, `LLMPlusP` — reasoning strategies (lightweight implementations)
50
+ - `CRAGRetriever`, `AdaptiveRetriever`, `MemoryRetriever` — retrieval (lightweight)
51
+ - `AgentAsTool` — multi-agent delegation
52
+ - `ConversationStore`, `InMemoryConversationStore` — conversation memory
53
+ - `StructuredResult`, `parse_json`, `parse_structured` — structured output
54
+ - `FrameworkConfig` — configuration system
55
+ - `CostReport` — cost reporting format
56
+ - `connect_stdio`, `MCPClient` — MCP client
57
+ - Policy condition matchers — YAML matcher set may expand/change
58
+ - `SIEMSink.redact_keys` — redaction key set may change defaults
59
+
60
+ ### Internal
61
+
62
+ These are implementation details that should not be directly imported:
63
+
64
+ - `CostAccountant` — internal cost tracking (use `Result.usage` instead)
65
+ - `CapabilityProjection` — visibility gate (not yet enforced)
66
+ - `CapabilityGrant` — audit artifact type (not yet emitted)
67
+ - `CompiledContext`, `TaskSpec`, `MemorySlice`, `EvidenceBundle`, `OutputContract` — compiled context types
68
+ - `MemoryView` — memory protocol (empty stub)
69
+ - `serve_as_mcp` — MCP server stub (raises NotImplementedError)
70
+ - `pass_at_k` perturbation functions (`canonical`, `order_shuffled`, etc.) — stable interface but internal implementations
71
+
72
+ ## Deprecation Process
73
+
74
+ When an API moves from Stable to deprecated:
75
+
76
+ 1. Add `DeprecationWarning` in the next minor version
77
+ 2. Document replacement in CHANGELOG
78
+ 3. Keep the API functional for at least 1 minor version
79
+ 4. Remove in the following minor version (or v1.0 if major)
80
+
81
+ ## v1.0 Freeze Criteria
82
+
83
+ Before declaring v1.0:
84
+
85
+ - All Stable APIs have been unchanged for 2+ minor versions
86
+ - All Experimental APIs are reclassified as Stable or explicitly dropped
87
+ - Breaking changes require semver-major version bump
88
+ - Migration guide published for any dropped APIs