varly 1.0.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.
Files changed (180) hide show
  1. varly-1.0.0/.env.example +8 -0
  2. varly-1.0.0/.github/actions/verify-trace/action.yml +75 -0
  3. varly-1.0.0/.github/workflows/ci.yml +124 -0
  4. varly-1.0.0/.github/workflows/publish.yml +25 -0
  5. varly-1.0.0/.gitignore +222 -0
  6. varly-1.0.0/.pre-commit-config.yaml +28 -0
  7. varly-1.0.0/.python-version +1 -0
  8. varly-1.0.0/CHANGELOG.md +56 -0
  9. varly-1.0.0/LICENSE +21 -0
  10. varly-1.0.0/PKG-INFO +279 -0
  11. varly-1.0.0/README.md +256 -0
  12. varly-1.0.0/docs/INSTALL.md +100 -0
  13. varly-1.0.0/docs/MVP_ROADMAP.md +208 -0
  14. varly-1.0.0/docs/NEXT_STEPS_ROADMAP.md +191 -0
  15. varly-1.0.0/docs/ONBOARDING.md +31 -0
  16. varly-1.0.0/docs/PRODUCT_DEV_ROADMAP.md +152 -0
  17. varly-1.0.0/docs/PRODUCT_ROADMAP.md +292 -0
  18. varly-1.0.0/docs/RELEASING.md +51 -0
  19. varly-1.0.0/docs/VIEWER.md +47 -0
  20. varly-1.0.0/docs/adrs/001-air-immutable.md +38 -0
  21. varly-1.0.0/docs/adrs/002-event-projection.md +46 -0
  22. varly-1.0.0/docs/adrs/003-two-edge-domains.md +48 -0
  23. varly-1.0.0/docs/adrs/004-functional-state.md +46 -0
  24. varly-1.0.0/docs/adrs/005-uuidv7-order.md +46 -0
  25. varly-1.0.0/docs/adrs/006-capture-boundaries.md +61 -0
  26. varly-1.0.0/docs/adrs/README.md +20 -0
  27. varly-1.0.0/docs/architecture/README.md +17 -0
  28. varly-1.0.0/docs/architecture/air-schema-1.0.0.md +108 -0
  29. varly-1.0.0/docs/architecture/capture-event-log-1.0.0.md +134 -0
  30. varly-1.0.0/docs/architecture/diagnostic-schema-1.0.0.md +121 -0
  31. varly-1.0.0/docs/architecture/langgraph-run-mapping.md +56 -0
  32. varly-1.0.0/docs/architecture/openai-run-mapping.md +57 -0
  33. varly-1.0.0/docs/policies/README.md +124 -0
  34. varly-1.0.0/docs/recipes/capture-run-recorder.md +146 -0
  35. varly-1.0.0/docs/workflows/baseline.md +59 -0
  36. varly-1.0.0/examples/.gitkeep +0 -0
  37. varly-1.0.0/examples/capture_recipe/README.md +13 -0
  38. varly-1.0.0/examples/capture_recipe/artifacts/run.json +50 -0
  39. varly-1.0.0/examples/capture_recipe/run.py +100 -0
  40. varly-1.0.0/examples/demo_agent/artifacts/mock_run.json +40 -0
  41. varly-1.0.0/examples/demo_agent/run.py +56 -0
  42. varly-1.0.0/examples/fixtures/recorded/README.md +12 -0
  43. varly-1.0.0/examples/fixtures/recorded/langgraph_callbacks_search.json +73 -0
  44. varly-1.0.0/examples/fixtures/recorded/openai_responses_search.json +42 -0
  45. varly-1.0.0/examples/langgraph_run_minimal.json +40 -0
  46. varly-1.0.0/examples/live/record_run.py +43 -0
  47. varly-1.0.0/examples/openai_run_minimal.json +42 -0
  48. varly-1.0.0/examples/policies/dev.yaml +29 -0
  49. varly-1.0.0/examples/policies/mvp.yaml +29 -0
  50. varly-1.0.0/examples/policies/strict.yaml +30 -0
  51. varly-1.0.0/examples/policy_mvp.yaml +13 -0
  52. varly-1.0.0/examples/trace_invalid_cycle.json +49 -0
  53. varly-1.0.0/examples/trace_invalid_missing_tool_return.json +62 -0
  54. varly-1.0.0/examples/trace_invalid_orphan.json +37 -0
  55. varly-1.0.0/examples/trace_valid_minimal.json +84 -0
  56. varly-1.0.0/mypy.ini +6 -0
  57. varly-1.0.0/pilot/FRICTION.md +20 -0
  58. varly-1.0.0/pilot/README.md +129 -0
  59. varly-1.0.0/pilot/artifacts/baseline_research_run.json +50 -0
  60. varly-1.0.0/pilot/artifacts/broken_research_run.json +40 -0
  61. varly-1.0.0/pilot/artifacts/research_run.json +50 -0
  62. varly-1.0.0/pilot/gemini_research_assistant/run.py +224 -0
  63. varly-1.0.0/pilot/gemini_research_assistant/tools.py +21 -0
  64. varly-1.0.0/pilot/policies/live.yaml +30 -0
  65. varly-1.0.0/pilot/scripts/verify_gate.py +40 -0
  66. varly-1.0.0/pyproject.toml +62 -0
  67. varly-1.0.0/ruff.toml +9 -0
  68. varly-1.0.0/scripts/ci/verify_golden_fixtures.py +176 -0
  69. varly-1.0.0/scripts/demo_60s.ps1 +2 -0
  70. varly-1.0.0/scripts/demo_60s.py +90 -0
  71. varly-1.0.0/src/varly/__init__.py +0 -0
  72. varly-1.0.0/src/varly/adapters/__init__.py +31 -0
  73. varly-1.0.0/src/varly/adapters/_mapping.py +50 -0
  74. varly-1.0.0/src/varly/adapters/_payload.py +30 -0
  75. varly-1.0.0/src/varly/adapters/_sequential.py +129 -0
  76. varly-1.0.0/src/varly/adapters/_source_hints.py +41 -0
  77. varly-1.0.0/src/varly/adapters/capture/__init__.py +1 -0
  78. varly-1.0.0/src/varly/adapters/capture/adapter.py +66 -0
  79. varly-1.0.0/src/varly/adapters/errors.py +17 -0
  80. varly-1.0.0/src/varly/adapters/json/__init__.py +0 -0
  81. varly-1.0.0/src/varly/adapters/json/adapter.py +25 -0
  82. varly-1.0.0/src/varly/adapters/langgraph/__init__.py +0 -0
  83. varly-1.0.0/src/varly/adapters/langgraph/adapter.py +73 -0
  84. varly-1.0.0/src/varly/adapters/langgraph/normalize.py +194 -0
  85. varly-1.0.0/src/varly/adapters/openai/__init__.py +0 -0
  86. varly-1.0.0/src/varly/adapters/openai/adapter.py +73 -0
  87. varly-1.0.0/src/varly/adapters/openai/normalize.py +151 -0
  88. varly-1.0.0/src/varly/analyzer/__init__.py +33 -0
  89. varly-1.0.0/src/varly/analyzer/diagnostic.py +29 -0
  90. varly-1.0.0/src/varly/analyzer/diff.py +62 -0
  91. varly-1.0.0/src/varly/analyzer/engine.py +18 -0
  92. varly-1.0.0/src/varly/analyzer/evaluator.py +55 -0
  93. varly-1.0.0/src/varly/analyzer/export.py +46 -0
  94. varly-1.0.0/src/varly/analyzer/reports.py +160 -0
  95. varly-1.0.0/src/varly/analyzer/state_builder.py +12 -0
  96. varly-1.0.0/src/varly/capture/__init__.py +11 -0
  97. varly-1.0.0/src/varly/capture/model.py +33 -0
  98. varly-1.0.0/src/varly/capture/recorder.py +144 -0
  99. varly-1.0.0/src/varly/contracts/__init__.py +22 -0
  100. varly-1.0.0/src/varly/contracts/builtins/__init__.py +23 -0
  101. varly-1.0.0/src/varly/contracts/builtins/business.py +159 -0
  102. varly-1.0.0/src/varly/contracts/builtins/metrics.py +87 -0
  103. varly-1.0.0/src/varly/contracts/builtins/semantic.py +84 -0
  104. varly-1.0.0/src/varly/contracts/builtins/structural.py +83 -0
  105. varly-1.0.0/src/varly/contracts/errors.py +21 -0
  106. varly-1.0.0/src/varly/contracts/loader.py +119 -0
  107. varly-1.0.0/src/varly/contracts/model.py +33 -0
  108. varly-1.0.0/src/varly/core/__init__.py +85 -0
  109. varly-1.0.0/src/varly/core/errors.py +35 -0
  110. varly-1.0.0/src/varly/core/labeling.py +31 -0
  111. varly-1.0.0/src/varly/core/ordering.py +69 -0
  112. varly-1.0.0/src/varly/core/state.py +60 -0
  113. varly-1.0.0/src/varly/core/topology.py +208 -0
  114. varly-1.0.0/src/varly/core/trace.py +68 -0
  115. varly-1.0.0/src/varly/core/types.py +44 -0
  116. varly-1.0.0/src/varly/interfaces/__init__.py +0 -0
  117. varly-1.0.0/src/varly/interfaces/cli/__init__.py +0 -0
  118. varly-1.0.0/src/varly/interfaces/cli/commands/__init__.py +0 -0
  119. varly-1.0.0/src/varly/interfaces/cli/commands/diff.py +93 -0
  120. varly-1.0.0/src/varly/interfaces/cli/commands/validate.py +53 -0
  121. varly-1.0.0/src/varly/interfaces/cli/commands/verify.py +169 -0
  122. varly-1.0.0/src/varly/interfaces/cli/commands/view.py +160 -0
  123. varly-1.0.0/src/varly/interfaces/cli/main.py +38 -0
  124. varly-1.0.0/src/varly/interfaces/cli/render.py +80 -0
  125. varly-1.0.0/src/varly/interfaces/library/__init__.py +21 -0
  126. varly-1.0.0/src/varly/interfaces/library/api.py +105 -0
  127. varly-1.0.0/src/varly/interfaces/viewer/.gitignore +1 -0
  128. varly-1.0.0/src/varly/interfaces/viewer/index.html +289 -0
  129. varly-1.0.0/src/varly/interfaces/viewer/report.py +140 -0
  130. varly-1.0.0/src/varly/parser/__init__.py +20 -0
  131. varly-1.0.0/src/varly/parser/builder.py +114 -0
  132. varly-1.0.0/src/varly/parser/errors.py +13 -0
  133. varly-1.0.0/src/varly/parser/json_loader.py +47 -0
  134. varly-1.0.0/src/varly/parser/schema.py +133 -0
  135. varly-1.0.0/src/varly/resources/__init__.py +16 -0
  136. varly-1.0.0/src/varly/resources/fixtures/__init__.py +0 -0
  137. varly-1.0.0/src/varly/resources/fixtures/mock_run.json +40 -0
  138. varly-1.0.0/src/varly/resources/policies/__init__.py +0 -0
  139. varly-1.0.0/src/varly/resources/policies/dev.yaml +29 -0
  140. varly-1.0.0/src/varly/resources/policies/mvp.yaml +29 -0
  141. varly-1.0.0/src/varly/resources/policies/strict.yaml +30 -0
  142. varly-1.0.0/tests/__init__.py +0 -0
  143. varly-1.0.0/tests/e2e/__init__.py +0 -0
  144. varly-1.0.0/tests/e2e/test_capture_recipe.py +40 -0
  145. varly-1.0.0/tests/e2e/test_demo_60s.py +21 -0
  146. varly-1.0.0/tests/e2e/test_golden_fixtures_ci.py +22 -0
  147. varly-1.0.0/tests/e2e/test_live_record_stub.py +60 -0
  148. varly-1.0.0/tests/e2e/test_mock_agent_pipeline.py +38 -0
  149. varly-1.0.0/tests/e2e/test_mvp_flow.py +57 -0
  150. varly-1.0.0/tests/e2e/test_pilot_diff_gate.py +58 -0
  151. varly-1.0.0/tests/e2e/test_pilot_dry_run.py +53 -0
  152. varly-1.0.0/tests/integration/__init__.py +0 -0
  153. varly-1.0.0/tests/integration/adapters/test_adapters.py +57 -0
  154. varly-1.0.0/tests/integration/adapters/test_recorded_fixtures.py +46 -0
  155. varly-1.0.0/tests/integration/parser/__init__.py +0 -0
  156. varly-1.0.0/tests/integration/parser/test_parser.py +62 -0
  157. varly-1.0.0/tests/integration/test_cli.py +42 -0
  158. varly-1.0.0/tests/integration/test_cli_render.py +41 -0
  159. varly-1.0.0/tests/integration/test_diff_cli.py +47 -0
  160. varly-1.0.0/tests/integration/test_library_api.py +55 -0
  161. varly-1.0.0/tests/integration/test_policy_packs.py +59 -0
  162. varly-1.0.0/tests/integration/test_verify_cli.py +161 -0
  163. varly-1.0.0/tests/integration/test_view_cli.py +80 -0
  164. varly-1.0.0/tests/unit/__init__.py +0 -0
  165. varly-1.0.0/tests/unit/adapters/test_source_hints.py +44 -0
  166. varly-1.0.0/tests/unit/analyzer/__init__.py +0 -0
  167. varly-1.0.0/tests/unit/analyzer/test_business.py +132 -0
  168. varly-1.0.0/tests/unit/analyzer/test_diff.py +54 -0
  169. varly-1.0.0/tests/unit/analyzer/test_evaluator.py +157 -0
  170. varly-1.0.0/tests/unit/analyzer/test_export.py +69 -0
  171. varly-1.0.0/tests/unit/analyzer/test_metrics.py +110 -0
  172. varly-1.0.0/tests/unit/analyzer/test_reports.py +71 -0
  173. varly-1.0.0/tests/unit/analyzer/test_semantic.py +139 -0
  174. varly-1.0.0/tests/unit/contracts/test_loader.py +37 -0
  175. varly-1.0.0/tests/unit/core/__init__.py +0 -0
  176. varly-1.0.0/tests/unit/core/test_ordering.py +96 -0
  177. varly-1.0.0/tests/unit/core/test_state.py +65 -0
  178. varly-1.0.0/tests/unit/core/test_topology.py +196 -0
  179. varly-1.0.0/tests/unit/interfaces/test_viewer_report.py +49 -0
  180. varly-1.0.0/uv.lock +1097 -0
@@ -0,0 +1,8 @@
1
+ # Local secrets — copy this file to `.env` and fill in your values.
2
+ # `.env` is in .gitignore and will NEVER be committed to GitHub.
3
+
4
+ PILOT_LIVE=1
5
+ GOOGLE_API_KEY=paste_your_gemini_api_key_here
6
+
7
+ # Optional: override model (default: gemini-3.6-flash)
8
+ # PILOT_GEMINI_MODEL=gemini-3.6-flash
@@ -0,0 +1,75 @@
1
+ name: Verify AIR Trace
2
+ description: Validate and verify a trace against an varly contract policy.
3
+
4
+ inputs:
5
+ trace-file:
6
+ description: Path to the trace or capture log file.
7
+ required: true
8
+ contract-file:
9
+ description: Path to the contract policy YAML or JSON file.
10
+ required: true
11
+ source:
12
+ description: Trace source adapter (air, capture, langgraph, openai).
13
+ required: false
14
+ default: air
15
+ working-directory:
16
+ description: Repository root containing pyproject.toml.
17
+ required: false
18
+ default: .
19
+ report-format:
20
+ description: Report format written to report-file (json, junit, or sarif).
21
+ required: false
22
+ default: sarif
23
+ report-file:
24
+ description: Path for the uploaded diagnostic report.
25
+ required: false
26
+ default: varly-report.sarif
27
+
28
+ runs:
29
+ using: composite
30
+ steps:
31
+ - name: Install uv
32
+ uses: astral-sh/setup-uv@v5
33
+ with:
34
+ enable-cache: true
35
+
36
+ - name: Set up Python
37
+ uses: actions/setup-python@v5
38
+ with:
39
+ python-version: "3.12"
40
+
41
+ - name: Install varly
42
+ shell: bash
43
+ working-directory: ${{ inputs.working-directory }}
44
+ run: uv sync --frozen
45
+
46
+ - name: Validate AIR trace
47
+ if: inputs.source == 'air'
48
+ shell: bash
49
+ working-directory: ${{ inputs.working-directory }}
50
+ run: uv run varly validate "${{ inputs.trace-file }}"
51
+
52
+ - name: Verify trace against contract
53
+ shell: bash
54
+ working-directory: ${{ inputs.working-directory }}
55
+ run: >
56
+ uv run varly verify "${{ inputs.trace-file }}"
57
+ --contract "${{ inputs.contract-file }}"
58
+ --source "${{ inputs.source }}"
59
+ --format "${{ inputs.report-format }}"
60
+ --output "${{ inputs.report-file }}"
61
+
62
+ - name: Upload verification report
63
+ if: ${{ always() }}
64
+ uses: actions/upload-artifact@v4
65
+ with:
66
+ name: varly-report
67
+ path: ${{ inputs.working-directory }}/${{ inputs.report-file }}
68
+ if-no-files-found: warn
69
+
70
+ - name: Upload SARIF
71
+ if: ${{ always() && inputs.report-format == 'sarif' }}
72
+ continue-on-error: true
73
+ uses: github/codeql-action/upload-sarif@v3
74
+ with:
75
+ sarif_file: ${{ inputs.working-directory }}/${{ inputs.report-file }}
@@ -0,0 +1,124 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ quality:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v5
17
+ with:
18
+ enable-cache: true
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.12"
24
+
25
+ - name: Install dependencies
26
+ run: uv sync --frozen
27
+
28
+ - name: Ruff lint
29
+ run: uv run ruff check .
30
+
31
+ - name: Ruff format
32
+ run: uv run ruff format --check .
33
+
34
+ - name: Mypy
35
+ run: uv run mypy src
36
+
37
+ - name: Pytest
38
+ shell: bash
39
+ run: |
40
+ set +e
41
+ uv run pytest
42
+ exit_code=$?
43
+ if [ "$exit_code" -eq 0 ] || [ "$exit_code" -eq 5 ]; then
44
+ if [ "$exit_code" -eq 5 ]; then
45
+ echo "No tests collected — acceptable for bootstrap phase."
46
+ fi
47
+ exit 0
48
+ fi
49
+ exit "$exit_code"
50
+
51
+ golden-fixtures:
52
+ runs-on: ubuntu-latest
53
+ steps:
54
+ - uses: actions/checkout@v4
55
+
56
+ - name: Install uv
57
+ uses: astral-sh/setup-uv@v5
58
+ with:
59
+ enable-cache: true
60
+
61
+ - name: Set up Python
62
+ uses: actions/setup-python@v5
63
+ with:
64
+ python-version: "3.12"
65
+
66
+ - name: Install dependencies
67
+ run: uv sync --frozen
68
+
69
+ - name: Verify golden fixtures
70
+ run: uv run python scripts/ci/verify_golden_fixtures.py
71
+
72
+ mock-agent-pipeline:
73
+ runs-on: ubuntu-latest
74
+ permissions:
75
+ contents: read
76
+ security-events: write
77
+ actions: read
78
+ steps:
79
+ - uses: actions/checkout@v4
80
+
81
+ - name: Install uv
82
+ uses: astral-sh/setup-uv@v5
83
+ with:
84
+ enable-cache: true
85
+
86
+ - name: Set up Python
87
+ uses: actions/setup-python@v5
88
+ with:
89
+ python-version: "3.12"
90
+
91
+ - name: Install dependencies
92
+ run: uv sync --frozen
93
+
94
+ - name: Run deterministic mock agent
95
+ run: uv run python examples/demo_agent/run.py --output /tmp/mock_run.json
96
+
97
+ - name: Verify mock agent capture log
98
+ uses: ./.github/actions/verify-trace
99
+ with:
100
+ trace-file: /tmp/mock_run.json
101
+ contract-file: examples/policies/mvp.yaml
102
+ source: capture
103
+
104
+ package-smoke:
105
+ runs-on: ubuntu-latest
106
+ steps:
107
+ - uses: actions/checkout@v4
108
+
109
+ - name: Install uv
110
+ uses: astral-sh/setup-uv@v5
111
+
112
+ - name: Set up Python
113
+ uses: actions/setup-python@v5
114
+ with:
115
+ python-version: "3.12"
116
+
117
+ - name: Build wheel
118
+ run: uv build
119
+
120
+ - name: Install wheel and run bundled demo
121
+ run: |
122
+ pip install dist/varly-*.whl
123
+ varly verify --demo
124
+ varly --help
@@ -0,0 +1,25 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ permissions:
9
+ id-token: write
10
+
11
+ jobs:
12
+ publish:
13
+ runs-on: ubuntu-latest
14
+ environment: pypi
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - name: Install uv
19
+ uses: astral-sh/setup-uv@v5
20
+
21
+ - name: Build package
22
+ run: uv build
23
+
24
+ - name: Publish to PyPI
25
+ uses: pypa/gh-action-pypi-publish@release/v1
varly-1.0.0/.gitignore ADDED
@@ -0,0 +1,222 @@
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
+ # uv.lock is versioned for reproducible CI and local development.
99
+
100
+ # poetry
101
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
102
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
103
+ # commonly ignored for libraries.
104
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
105
+ # poetry.lock
106
+ # poetry.toml
107
+
108
+ # pdm
109
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
110
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
111
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
112
+ # pdm.lock
113
+ # pdm.toml
114
+ .pdm-python
115
+ .pdm-build/
116
+
117
+ # pixi
118
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
119
+ # pixi.lock
120
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
121
+ # in the .venv directory. It is recommended not to include this directory in version control.
122
+ .pixi
123
+
124
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
125
+ __pypackages__/
126
+
127
+ # Celery stuff
128
+ celerybeat-schedule
129
+ celerybeat.pid
130
+
131
+ # Redis
132
+ *.rdb
133
+ *.aof
134
+ *.pid
135
+
136
+ # RabbitMQ
137
+ mnesia/
138
+ rabbitmq/
139
+ rabbitmq-data/
140
+
141
+ # ActiveMQ
142
+ activemq-data/
143
+
144
+ # SageMath parsed files
145
+ *.sage.py
146
+
147
+ # Environments
148
+ .env
149
+ .envrc
150
+ .venv
151
+ env/
152
+ venv/
153
+ ENV/
154
+ env.bak/
155
+ venv.bak/
156
+
157
+ # Spyder project settings
158
+ .spyderproject
159
+ .spyproject
160
+
161
+ # Rope project settings
162
+ .ropeproject
163
+
164
+ # mkdocs documentation
165
+ /site
166
+
167
+ # mypy
168
+ .mypy_cache/
169
+ .dmypy.json
170
+ dmypy.json
171
+
172
+ # Pyre type checker
173
+ .pyre/
174
+
175
+ # pytype static type analyzer
176
+ .pytype/
177
+
178
+ # Cython debug symbols
179
+ cython_debug/
180
+
181
+ # PyCharm
182
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
183
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
184
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
185
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
186
+ # .idea/
187
+
188
+ # Abstra
189
+ # Abstra is an AI-powered process automation framework.
190
+ # Ignore directories containing user credentials, local state, and settings.
191
+ # Learn more at https://abstra.io/docs
192
+ .abstra/
193
+
194
+ # Visual Studio Code
195
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
196
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
197
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
198
+ # you could uncomment the following to ignore the entire vscode folder
199
+ # .vscode/
200
+ # Temporary file for partial code execution
201
+ tempCodeRunnerFile.py
202
+
203
+ # Ruff stuff:
204
+ .ruff_cache/
205
+
206
+ # PyPI configuration file
207
+ .pypirc
208
+
209
+ # Marimo
210
+ marimo/_static/
211
+ marimo/_lsp/
212
+ __marimo__/
213
+
214
+ # Streamlit
215
+ .streamlit/secrets.toml
216
+
217
+ # Local CLI report artifacts (verify --output examples)
218
+ /report.xml
219
+ /report.sarif
220
+ /diagnostic.json
221
+ /varly-report.sarif
222
+ /varly-report.xml
@@ -0,0 +1,28 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v5.0.0
4
+ hooks:
5
+ - id: trailing-whitespace
6
+ - id: end-of-file-fixer
7
+ - id: check-yaml
8
+ - id: check-toml
9
+ - id: check-added-large-files
10
+
11
+ - repo: https://github.com/astral-sh/ruff-pre-commit
12
+ rev: v0.11.2
13
+ hooks:
14
+ - id: ruff
15
+ args: [--fix, .]
16
+ pass_filenames: false
17
+ - id: ruff-format
18
+ args: [.]
19
+ pass_filenames: false
20
+
21
+ - repo: local
22
+ hooks:
23
+ - id: mypy
24
+ name: mypy
25
+ entry: uv run mypy src
26
+ language: system
27
+ types: [python]
28
+ pass_filenames: false
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,56 @@
1
+ # Changelog
2
+
3
+ All notable changes to varly are documented here.
4
+
5
+ Format follows [Keep a Changelog](https://keepachangelog.com/). Versioning aims at [SemVer](https://semver.org/).
6
+
7
+ ## [1.0.0] — 2026-08-29
8
+
9
+ First **PyPI** release. Product phases P0–P6 complete; distribution (P1) ships here.
10
+
11
+ ### Added
12
+
13
+ - **`pip install varly`** — bundled policies (`mvp`, `strict`, `dev`) and mock fixture
14
+ - **`varly verify --demo`** — smoke test without cloning the repo
15
+ - **`varly view`** — local browser diagnostic viewer with run summary and timeline
16
+ - Pilot Gemini capture, regression `diff` gate, capture recipe, source hints, `demo_60s` script
17
+ - Publish workflow (`.github/workflows/publish.yml`) for tags `v*`
18
+
19
+ ### Changed
20
+
21
+ - **Product name:** `air-engine` → **Varly** (`pip install varly`, CLI `varly`)
22
+ - Version `1.0.0` (from `0.1.0` / `v1.0.0-beta` tag)
23
+ - Development status: Beta
24
+
25
+ [1.0.0]: https://github.com/Hugoesin19/air-engine/compare/v1.0.0-beta...v1.0.0
26
+
27
+ ## [1.0.0-beta] — 2026-08-29
28
+
29
+ First tagged baseline after the v1 engine (MVP + post-MVP sprints 6–12).
30
+
31
+ ### Added
32
+
33
+ - **AIR core** — immutable causal graphs, structural validation, state reconstruction
34
+ - **Contracts** — YAML policies; structural, semantic, metric, and business-rule invariants
35
+ - **CLI** — `validate`, `verify`, `diff`
36
+ - **Adapters** — canonical AIR JSON, capture logs, LangGraph, OpenAI (including recorded Responses shape)
37
+ - **Capture** — `RunRecorder` and deterministic mock agent (`examples/demo_agent/`)
38
+ - **CI** — GitHub Action, golden fixtures, mock-agent pipeline; reports as JSON / JUnit / SARIF
39
+ - **Policy packs** — `mvp`, `strict`, `dev` under `examples/policies/`
40
+ - **Regression gate** — `diff` compares violation sets against a baseline trace
41
+ - **Docs** — architecture specs, policy reference, baseline workflow, product and next-steps roadmaps
42
+
43
+ ### Does not include (yet)
44
+
45
+ - Published PyPI package (install from source with `uv`)
46
+ - One-click capture for every framework (recipes are partial; see `docs/architecture/`)
47
+ - Web UI or hosted SaaS
48
+ - Contract DSL (v2 roadmap)
49
+ - Live API calls in CI (mock-first by design)
50
+
51
+ ### Requirements
52
+
53
+ - Python 3.12+
54
+ - [uv](https://docs.astral.sh/uv/) recommended
55
+
56
+ [1.0.0-beta]: https://github.com/Hugoesin19/air-engine/compare/mvp-v0.1.0...v1.0.0-beta
varly-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Hugoesin19
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.