antemortem-structural-lab 0.7.0a1__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.
- antemortem_structural_lab-0.7.0a1/.github/workflows/tests.yml +120 -0
- antemortem_structural_lab-0.7.0a1/CHANGELOG.md +72 -0
- antemortem_structural_lab-0.7.0a1/CONTRIBUTING.md +30 -0
- antemortem_structural_lab-0.7.0a1/JEV_CONNECTION_CHANGELOG.md +21 -0
- antemortem_structural_lab-0.7.0a1/LICENSE +202 -0
- antemortem_structural_lab-0.7.0a1/MANIFEST.in +32 -0
- antemortem_structural_lab-0.7.0a1/PHASE_C_README_KO.md +107 -0
- antemortem_structural_lab-0.7.0a1/PHASE_C_VALIDATION.md +11 -0
- antemortem_structural_lab-0.7.0a1/PKG-INFO +311 -0
- antemortem_structural_lab-0.7.0a1/PUBLIC_IMPORT_NOTICE.md +15 -0
- antemortem_structural_lab-0.7.0a1/README.ko.md +352 -0
- antemortem_structural_lab-0.7.0a1/README.md +292 -0
- antemortem_structural_lab-0.7.0a1/SECURITY.md +125 -0
- antemortem_structural_lab-0.7.0a1/VALIDATION_REPORT.md +22 -0
- antemortem_structural_lab-0.7.0a1/antemortem_structural_lab.egg-info/PKG-INFO +311 -0
- antemortem_structural_lab-0.7.0a1/antemortem_structural_lab.egg-info/SOURCES.txt +199 -0
- antemortem_structural_lab-0.7.0a1/antemortem_structural_lab.egg-info/dependency_links.txt +1 -0
- antemortem_structural_lab-0.7.0a1/antemortem_structural_lab.egg-info/entry_points.txt +2 -0
- antemortem_structural_lab-0.7.0a1/antemortem_structural_lab.egg-info/requires.txt +10 -0
- antemortem_structural_lab-0.7.0a1/antemortem_structural_lab.egg-info/top_level.txt +1 -0
- antemortem_structural_lab-0.7.0a1/baselines/crosshair_claim_contracts.py +51 -0
- antemortem_structural_lab-0.7.0a1/benchmarks/e5_public_cases.py +133 -0
- antemortem_structural_lab-0.7.0a1/benchmarks/e6_public_cases.py +238 -0
- antemortem_structural_lab-0.7.0a1/containers/e5-generator.Dockerfile +6 -0
- antemortem_structural_lab-0.7.0a1/containers/e6-generator.Dockerfile +6 -0
- antemortem_structural_lab-0.7.0a1/containers/e7-generator.Dockerfile +5 -0
- antemortem_structural_lab-0.7.0a1/docs/E3_EVALUATION.md +50 -0
- antemortem_structural_lab-0.7.0a1/docs/E4_IMPLEMENTATION.md +102 -0
- antemortem_structural_lab-0.7.0a1/docs/E5_EVALUATION_CONTRACT.json +97 -0
- antemortem_structural_lab-0.7.0a1/docs/E5_EVALUATION_REPORT.md +50 -0
- antemortem_structural_lab-0.7.0a1/docs/E5_INTEGRATION.md +105 -0
- antemortem_structural_lab-0.7.0a1/docs/E5_RESULTS.json +291 -0
- antemortem_structural_lab-0.7.0a1/docs/E6_CODE_FREEZE.json +56 -0
- antemortem_structural_lab-0.7.0a1/docs/E6_EVALUATION_CONTRACT.json +96 -0
- antemortem_structural_lab-0.7.0a1/docs/E6_EVALUATION_REPORT.md +69 -0
- antemortem_structural_lab-0.7.0a1/docs/E6_INTEGRATION.md +109 -0
- antemortem_structural_lab-0.7.0a1/docs/E6_RESULTS.json +1118 -0
- antemortem_structural_lab-0.7.0a1/docs/E7_CODE_FREEZE.json +64 -0
- antemortem_structural_lab-0.7.0a1/docs/E7_EVALUATION_CONTRACT.json +389 -0
- antemortem_structural_lab-0.7.0a1/docs/E7_EVALUATION_REPORT.md +82 -0
- antemortem_structural_lab-0.7.0a1/docs/E7_KNOWLEDGE.md +113 -0
- antemortem_structural_lab-0.7.0a1/docs/E7_RESULTS.json +867 -0
- antemortem_structural_lab-0.7.0a1/docs/RELEASE_VALIDATION.md +111 -0
- antemortem_structural_lab-0.7.0a1/docs/THIRD_PARTY.md +19 -0
- antemortem_structural_lab-0.7.0a1/docs/releases/v0.1.0.md +9 -0
- antemortem_structural_lab-0.7.0a1/docs/releases/v0.1.1.md +7 -0
- antemortem_structural_lab-0.7.0a1/docs/releases/v0.2.0.md +13 -0
- antemortem_structural_lab-0.7.0a1/docs/releases/v0.3.0a1.md +37 -0
- antemortem_structural_lab-0.7.0a1/docs/releases/v0.4.0a1.md +25 -0
- antemortem_structural_lab-0.7.0a1/docs/releases/v0.5.0a1.md +26 -0
- antemortem_structural_lab-0.7.0a1/docs/releases/v0.6.0a1.md +26 -0
- antemortem_structural_lab-0.7.0a1/docs/releases/v0.7.0a1.md +25 -0
- antemortem_structural_lab-0.7.0a1/examples/claim_only/monotone_bug.py +8 -0
- antemortem_structural_lab-0.7.0a1/examples/claim_only/shift_bug.py +8 -0
- antemortem_structural_lab-0.7.0a1/examples/claim_only/sum_clean.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/claim_only/symmetric_not_sum.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/claim_only/symmetry_bug.py +8 -0
- antemortem_structural_lab-0.7.0a1/examples/correct.py +11 -0
- antemortem_structural_lab-0.7.0a1/examples/discovery/sequence-renamed-spec.json +9 -0
- antemortem_structural_lab-0.7.0a1/examples/discovery/sequence-spec.json +9 -0
- antemortem_structural_lab-0.7.0a1/examples/discovery/sequence_oracle.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/discovery/sequence_renamed.py +10 -0
- antemortem_structural_lab-0.7.0a1/examples/discovery/sequence_target.py +10 -0
- antemortem_structural_lab-0.7.0a1/examples/discovery/state-spec.json +5 -0
- antemortem_structural_lab-0.7.0a1/examples/discovery/state_oracle.py +11 -0
- antemortem_structural_lab-0.7.0a1/examples/discovery/state_target.py +12 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/clean.py +4 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/corroboration.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/corroboration_oracle.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/counterevidence.json +842 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/observations.json +1682 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/public_model.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/source-failures.json +90 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/source-ir.json +149 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/source-provenance.json +10 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/source-spec.json +34 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/source.py +3 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/source_oracle.py +3 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/target-ir.json +149 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/target-provenance.json +10 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/target-spec.json +34 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/target.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/knowledge/target_oracle.py +3 -0
- antemortem_structural_lab-0.7.0a1/examples/mold/oracle.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/mold/renamed-spec.json +11 -0
- antemortem_structural_lab-0.7.0a1/examples/mold/spec.json +11 -0
- antemortem_structural_lab-0.7.0a1/examples/mold/target.py +5 -0
- antemortem_structural_lab-0.7.0a1/examples/nested_equal.py +11 -0
- antemortem_structural_lab-0.7.0a1/examples/nested_ge_le.py +11 -0
- antemortem_structural_lab-0.7.0a1/examples/nested_lt_eq.py +11 -0
- antemortem_structural_lab-0.7.0a1/examples/temporal/clean_target.py +21 -0
- antemortem_structural_lab-0.7.0a1/examples/temporal/renamed-contract.json +133 -0
- antemortem_structural_lab-0.7.0a1/examples/temporal/renamed_oracle.py +21 -0
- antemortem_structural_lab-0.7.0a1/examples/temporal/renamed_target.py +25 -0
- antemortem_structural_lab-0.7.0a1/examples/temporal/stack-contract.json +133 -0
- antemortem_structural_lab-0.7.0a1/examples/temporal/stack_oracle.py +21 -0
- antemortem_structural_lab-0.7.0a1/examples/temporal/stack_target.py +22 -0
- antemortem_structural_lab-0.7.0a1/examples/two_paths.py +14 -0
- antemortem_structural_lab-0.7.0a1/pyproject.toml +40 -0
- antemortem_structural_lab-0.7.0a1/scripts/check-discovery-isolation.py +47 -0
- antemortem_structural_lab-0.7.0a1/scripts/check-e6-freeze.py +33 -0
- antemortem_structural_lab-0.7.0a1/scripts/check-e7-freeze.py +37 -0
- antemortem_structural_lab-0.7.0a1/scripts/check-isolation.py +39 -0
- antemortem_structural_lab-0.7.0a1/scripts/check-knowledge-isolation.py +46 -0
- antemortem_structural_lab-0.7.0a1/scripts/check-public-scope.py +75 -0
- antemortem_structural_lab-0.7.0a1/scripts/check-temporal-isolation.py +45 -0
- antemortem_structural_lab-0.7.0a1/scripts/check-wheel.py +123 -0
- antemortem_structural_lab-0.7.0a1/scripts/connect-typesafe-jev.ps1 +37 -0
- antemortem_structural_lab-0.7.0a1/scripts/evaluate-e4.py +110 -0
- antemortem_structural_lab-0.7.0a1/scripts/evaluate-e5.py +742 -0
- antemortem_structural_lab-0.7.0a1/scripts/evaluate-e6.py +786 -0
- antemortem_structural_lab-0.7.0a1/scripts/evaluate-e7.py +614 -0
- antemortem_structural_lab-0.7.0a1/scripts/publish-e4.py +72 -0
- antemortem_structural_lab-0.7.0a1/scripts/publish-e5.py +196 -0
- antemortem_structural_lab-0.7.0a1/scripts/publish-e6.py +42 -0
- antemortem_structural_lab-0.7.0a1/scripts/publish-e7.py +65 -0
- antemortem_structural_lab-0.7.0a1/scripts/publish-github.ps1 +54 -0
- antemortem_structural_lab-0.7.0a1/scripts/release-update.ps1 +76 -0
- antemortem_structural_lab-0.7.0a1/setup.cfg +4 -0
- antemortem_structural_lab-0.7.0a1/tests/test_claim.py +139 -0
- antemortem_structural_lab-0.7.0a1/tests/test_discovery_analysis.py +187 -0
- antemortem_structural_lab-0.7.0a1/tests/test_discovery_engine.py +217 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e4_boundary.py +140 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e4_cli.py +37 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e5_core.py +185 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e5_evaluation.py +144 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e5_publish.py +305 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e5_service.py +148 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e5_testing.py +188 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e6_cli_boundary.py +122 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e6_code_freeze.py +32 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e6_efficiency.py +100 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e6_evaluation.py +227 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e6_publish.py +81 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e6_service.py +232 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e6_temporal.py +382 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e7_cli_boundary.py +153 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e7_engine.py +262 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e7_evaluation.py +184 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e7_freeze.py +27 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e7_knowledge.py +385 -0
- antemortem_structural_lab-0.7.0a1/tests/test_e7_publish.py +104 -0
- antemortem_structural_lab-0.7.0a1/tests/test_lab.py +364 -0
- antemortem_structural_lab-0.7.0a1/tests/test_mold_boundary.py +87 -0
- antemortem_structural_lab-0.7.0a1/tests/test_mold_engine.py +253 -0
- antemortem_structural_lab-0.7.0a1/tests/test_property_testing.py +128 -0
- antemortem_structural_lab-0.7.0a1/tests/test_structural_constraints.py +162 -0
- antemortem_structural_lab-0.7.0a1/tomolab/__init__.py +0 -0
- antemortem_structural_lab-0.7.0a1/tomolab/__main__.py +4 -0
- antemortem_structural_lab-0.7.0a1/tomolab/cast.py +66 -0
- antemortem_structural_lab-0.7.0a1/tomolab/claim.py +315 -0
- antemortem_structural_lab-0.7.0a1/tomolab/cli.py +517 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/__init__.py +14 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/analysis.py +168 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/boundary.py +20 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/efficient.py +279 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/engine.py +551 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/features.py +168 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/hypothesis_adapter.py +188 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/knowledge.py +559 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/knowledge_boundary.py +43 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/knowledge_engine.py +307 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/knowledge_examples.py +94 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/knowledge_protocol.py +66 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/knowledge_service.py +349 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/knowledge_store.py +96 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/knowledge_worker.py +94 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/native_stateful.py +338 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/predicates.py +350 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/protocol.py +68 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/schema.py +230 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/service.py +224 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/solver.py +231 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/stateful.py +179 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/store.py +53 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/symbolic.py +212 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/temporal.py +324 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/temporal_boundary.py +36 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/temporal_engine.py +490 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/temporal_protocol.py +86 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/temporal_service.py +228 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/temporal_transfer.py +187 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/temporal_worker.py +97 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/transfer.py +79 -0
- antemortem_structural_lab-0.7.0a1/tomolab/discovery/worker.py +75 -0
- antemortem_structural_lab-0.7.0a1/tomolab/engine.py +171 -0
- antemortem_structural_lab-0.7.0a1/tomolab/jev.py +147 -0
- antemortem_structural_lab-0.7.0a1/tomolab/knowledge_cli.py +183 -0
- antemortem_structural_lab-0.7.0a1/tomolab/model.py +119 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/__init__.py +6 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/boundary.py +193 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/engine.py +305 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/property_testing.py +222 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/protocol.py +64 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/relations.py +127 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/schema.py +99 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/service.py +97 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/structural.py +290 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mold/worker.py +81 -0
- antemortem_structural_lab-0.7.0a1/tomolab/mri.py +107 -0
- antemortem_structural_lab-0.7.0a1/tomolab/replay.py +57 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
name: Python tests
|
|
2
|
+
permissions:
|
|
3
|
+
contents: read
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
tags: ['v*']
|
|
8
|
+
pull_request:
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
jobs:
|
|
11
|
+
tests:
|
|
12
|
+
runs-on: ${{ matrix.os }}
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
os: [ubuntu-latest, windows-latest]
|
|
17
|
+
python-version: ['3.11', '3.12', '3.13']
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
- name: Install package and optional QA, solver and analysis integrations
|
|
24
|
+
run: python -m pip install -e ".[solver,qa,analysis]"
|
|
25
|
+
- name: Install test and build tools
|
|
26
|
+
run: python -m pip install pytest build twine
|
|
27
|
+
- name: Test
|
|
28
|
+
run: python -m pytest -q --junitxml=test-results.xml
|
|
29
|
+
- name: Build source distribution and wheel
|
|
30
|
+
run: python -m build
|
|
31
|
+
- name: Check distribution metadata
|
|
32
|
+
run: python -m twine check dist/*
|
|
33
|
+
- name: Check public source and artifact contents
|
|
34
|
+
run: python scripts/check-public-scope.py
|
|
35
|
+
- name: Verify committed E7 research product bytes
|
|
36
|
+
run: python scripts/check-e7-freeze.py
|
|
37
|
+
- name: Check wheel outside the source checkout
|
|
38
|
+
run: python scripts/check-wheel.py
|
|
39
|
+
- name: Check optional QA integration in the installed wheel
|
|
40
|
+
run: python scripts/check-wheel.py --qa
|
|
41
|
+
- name: Run preserved E4 public regression fixtures
|
|
42
|
+
run: python scripts/evaluate-e4.py --output e4-validation.json
|
|
43
|
+
- uses: actions/upload-artifact@v4
|
|
44
|
+
with:
|
|
45
|
+
name: validation-${{ matrix.os }}-${{ matrix.python-version }}
|
|
46
|
+
path: |
|
|
47
|
+
test-results.xml
|
|
48
|
+
e4-validation.json
|
|
49
|
+
generator-isolation:
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
steps:
|
|
52
|
+
- uses: actions/checkout@v4
|
|
53
|
+
- uses: actions/setup-python@v5
|
|
54
|
+
with:
|
|
55
|
+
python-version: '3.12'
|
|
56
|
+
- run: python -m pip install -e .
|
|
57
|
+
- run: docker pull python:3.12-slim
|
|
58
|
+
- name: Verify restricted generator filesystem and network
|
|
59
|
+
run: python scripts/check-isolation.py
|
|
60
|
+
unified-generator-isolation:
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/checkout@v4
|
|
64
|
+
- uses: actions/setup-python@v5
|
|
65
|
+
with:
|
|
66
|
+
python-version: '3.12'
|
|
67
|
+
- run: python -m pip install -e ".[qa,solver]"
|
|
68
|
+
- name: Build reviewed dependency-only E5 generator image
|
|
69
|
+
run: docker build -f containers/e5-generator.Dockerfile -t tomolab-e5-generator:local containers
|
|
70
|
+
- name: Verify actual E5 access control and integrated discovery
|
|
71
|
+
run: python scripts/check-discovery-isolation.py
|
|
72
|
+
temporal-generator-isolation:
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@v4
|
|
76
|
+
- uses: actions/setup-python@v5
|
|
77
|
+
with:
|
|
78
|
+
python-version: '3.12'
|
|
79
|
+
- run: python -m pip install -e ".[qa,solver]"
|
|
80
|
+
- name: Build reviewed dependency-only E6 generator image
|
|
81
|
+
run: docker build -f containers/e6-generator.Dockerfile -t tomolab-e6-generator:local containers
|
|
82
|
+
- name: Verify E6 access controls, native state learning and replay
|
|
83
|
+
run: python scripts/check-temporal-isolation.py
|
|
84
|
+
knowledge-generator-isolation:
|
|
85
|
+
runs-on: ubuntu-latest
|
|
86
|
+
steps:
|
|
87
|
+
- uses: actions/checkout@v4
|
|
88
|
+
- uses: actions/setup-python@v5
|
|
89
|
+
with:
|
|
90
|
+
python-version: '3.12'
|
|
91
|
+
- run: python -m pip install -e ".[qa,solver]"
|
|
92
|
+
- name: Build reviewed dependency-only E7 generator image
|
|
93
|
+
run: docker build -f containers/e7-generator.Dockerfile -t tomolab-e7-generator:local containers
|
|
94
|
+
- name: Verify E7 access controls and evidence-qualified native discovery
|
|
95
|
+
run: python scripts/check-knowledge-isolation.py
|
|
96
|
+
prerelease:
|
|
97
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
98
|
+
needs: [tests, generator-isolation, unified-generator-isolation, temporal-generator-isolation, knowledge-generator-isolation]
|
|
99
|
+
runs-on: ubuntu-latest
|
|
100
|
+
permissions:
|
|
101
|
+
contents: write
|
|
102
|
+
steps:
|
|
103
|
+
- uses: actions/checkout@v4
|
|
104
|
+
- uses: actions/setup-python@v5
|
|
105
|
+
with:
|
|
106
|
+
python-version: '3.12'
|
|
107
|
+
- run: python -m pip install build twine
|
|
108
|
+
- run: python -m build
|
|
109
|
+
- run: python -m twine check dist/*
|
|
110
|
+
- run: python scripts/check-public-scope.py
|
|
111
|
+
- run: python scripts/check-wheel.py
|
|
112
|
+
- run: python scripts/check-e7-freeze.py
|
|
113
|
+
- name: Verify draft and publish experimental E7 prerelease
|
|
114
|
+
env:
|
|
115
|
+
GH_TOKEN: ${{ github.token }}
|
|
116
|
+
run: python scripts/publish-e7.py
|
|
117
|
+
- uses: actions/upload-artifact@v4
|
|
118
|
+
with:
|
|
119
|
+
name: release-receipt
|
|
120
|
+
path: release-receipt.json
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All versions are experimental. Versions v0.1.0 through v0.2.0 were retrospective imports of archived snapshots; those commit timestamps **do not** represent the dates when the experiments were originally performed. Later changes are developed in the public repository without rewriting historical tags.
|
|
4
|
+
|
|
5
|
+
## v0.7.0a1 — Evidence-gated structural knowledge
|
|
6
|
+
|
|
7
|
+
- 기존 E5/E6 Version Space와 공통 Typed IR을 재사용해 가설·독립 개발 지지·반증·적용 범위와 출처를 보존합니다.
|
|
8
|
+
- 검토된 별도 구현의 contrastive evidence와 계약이 충족된 관계만 실제 후보 순서·incremental Z3 witness에 사용합니다. 자격 있는 지식이 없으면 native Hypothesis 경로를 실행합니다.
|
|
9
|
+
- append-only·idempotent 저장, 과거 상태 복귀 차단, 부모 해시와 전체 기록을 보존하는 명시적 개발 세대 재개, 내용·검증 버전에 묶인 검증 캐시를 추가했습니다.
|
|
10
|
+
- `knowledge-inspect/learn/update/plan/run/demo`, 전송 전·worker 검증, 실제 E7 Docker 접근 통제·설치된 wheel 검사를 추가했습니다.
|
|
11
|
+
- 기존322개 검사·E1~E6 동결 결과와 태그를 보존하며 실제 프로젝트의 새 독립 평가를 별도 사전 계약으로 수행합니다. [구현과 신뢰 계약](docs/E7_KNOWLEDGE.md) · [평가·한계](docs/E7_EVALUATION_REPORT.md).
|
|
12
|
+
- E5의 검증된 draft/source/hash 검사와 E6 현재 main 정책을 재사용합니다. 새 Draft 생성 후 성공한 빈 목록 조회만 유한 재확인하며 API/권한 오류는 재시도하지 않습니다.
|
|
13
|
+
- 개발 v1의 Oracle 오류와 과장된 발견 해석을 철회하고 원본127개 파일을 보존했습니다. 정확 산술 Oracle를 독립 검토한 v2 최종 비교72건은 54 COMPLETE·18 NOT_COMPARABLE, 필수 방법 오류·오탐·feedback0, 모든 방법 발견0·qualified0으로 연구 판정은 INCONCLUSIVE입니다. 이 결과를 성능 향상이나 일반화 성공으로 홍보하지 않습니다.
|
|
14
|
+
|
|
15
|
+
## v0.6.0a1 — Stateful structural mold and Hypothesis-first discovery
|
|
16
|
+
|
|
17
|
+
- 공개 EFSM 상태·행동·순서·전제조건·불변식과 첫 실패 전이를 E5의 공유 Version Space·반증 제거에 연결했습니다.
|
|
18
|
+
- Native RuleBasedStateMachine의 rule/precondition/invariant/Bundle, 동결 후 native shrinking, 실제 callback 계측·두 번 재실행을 통합했습니다.
|
|
19
|
+
- 첫 qualified evidence의 lazy pool/grammar 활성화, incremental Z3 witness·정규화 캐시, 중복 생성 방지와 비용 phase 계측을 추가했습니다.
|
|
20
|
+
- 이름·내부 표현이 다른 대상의 4-way 전이 gate와 frozen 계획, 전송 전 등록/feedback 차단 및 별도 E6 Docker 검사를 추가했습니다.
|
|
21
|
+
- `stateful-inspect/demo/run/plan`, 명시적 bounded 지원 범위, 새 독립 평가 계약·강한 기준선 비교·한국어 문서를 추가했습니다.
|
|
22
|
+
- 기존 250개 테스트·E1~E5 결과·태그·자료 경계를 보존합니다. 연구 결과와 일반화 범위는 [E6 평가](docs/E6_EVALUATION_REPORT.md)에 별도로 기록합니다.
|
|
23
|
+
- 새 독립 동결 최종84 records와 개발 모두 NO_IMPROVEMENT입니다. 12/13 개발 후보 반증·OUT_OF_GRAMMAR1건·PARTIAL 표현 해결·외부 실제 프로젝트 NOT_EXECUTED를 공개합니다. 실행 후 제품·계약·가설·설정은 변경하지 않았습니다.
|
|
24
|
+
- 배포는 검증된 E5 draft 목록/ID 조회·해시 검사 구현을 재사용하며 E6 현재 main만 annotated tag/prerelease로 공개합니다. PyPI는 게시하지 않습니다.
|
|
25
|
+
|
|
26
|
+
## v0.5.0a1 — Unified structural discovery engine
|
|
27
|
+
|
|
28
|
+
- 공개 typed AST guard를 실제 Version Space·Active Query에 연결하고 반증에 따라 다음 query가 바뀌는 통합 discovery 엔진을 추가했습니다.
|
|
29
|
+
- native Hypothesis 복합 Strategy·fresh 후보·축소, 실제 선택되는 Z3 witness, typed/role/graph/contract 전이와 counterevidence를 연결했습니다.
|
|
30
|
+
- int/finite float/str/list/tuple/dict 입력, bounded state trace, 명시적 예외 계약, 동결 snapshot과 실제 호출·시간·process tree 계측을 제공합니다.
|
|
31
|
+
- `discovery-inspect`, `discovery-demo`, `discovery-run`, `discovery-plan`, `analysis` extra와 dependency-only Docker 생성기 이미지를 추가했습니다.
|
|
32
|
+
- 기존 145개 포함 로컬 243 tests 통과; 기존 MRI·CAST·Claim·E4 API와 E1~E4 증거·태그를 보존했습니다.
|
|
33
|
+
- 개발 비교는 `NO_IMPROVEMENT`: E5/Hypothesis paired wall 중앙 비율 2.660 / 최초 발견 호출 비율 1.0. 외적 일반화는 미입증입니다.
|
|
34
|
+
- 최종 source·코드·계약·mold 동결, once-only 독립 평가, annotated tag와 검증된 draft 후 prerelease 공개를 강제합니다. 비공개 final source·원시 기록은 공개하지 않습니다.
|
|
35
|
+
- [E5 구현·평가·한계](docs/E5_INTEGRATION.md) · [릴리스 노트](docs/releases/v0.5.0a1.md).
|
|
36
|
+
|
|
37
|
+
## v0.4.0a1 — E4 Structural QA integration
|
|
38
|
+
|
|
39
|
+
- 기존 Mold·Version Space에 Hypothesis 생성·축소, 중복 평가 캐시와 실제 호출·다양성·시간 계측을 연결했습니다.
|
|
40
|
+
- AST 정수 관계식, enum/Z3 일관성, SAT witness 재검증, UNSAT core와 구조 증거 기반 가설 필터 API를 추가했습니다.
|
|
41
|
+
- Generator 전송 전 typed 검증·동결 후 feedback 차단을 강화하고 결정론적 Oracle과 주관적 평가를 분리했습니다.
|
|
42
|
+
- `pbt-demo`, `pbt-run`, `constraints-check`, `qa` extra, 별도 최종 검증·설치 검사를 추가했습니다.
|
|
43
|
+
- 기존76+신규69, 로컬 총145개 검사 통과.6개 OS/Python CI와 Docker 경계 검사가 릴리스 전제입니다.
|
|
44
|
+
- E1/E2/E3·기존 태그 보존. 공개 합성 검증은 블라인드가 아니며 외적 일반화·우위는 미입증입니다.
|
|
45
|
+
- [E4 구현·제한](docs/E4_IMPLEMENTATION.md) · [릴리스 노트](docs/releases/v0.4.0a1.md).
|
|
46
|
+
|
|
47
|
+
## v0.3.0a1 — Integrated Mold engine
|
|
48
|
+
|
|
49
|
+
- Added a bounded typed relation grammar, counterexample-guided version-space updates, disagreement queries and a diversity archive.
|
|
50
|
+
- Added explicit evidence, contradiction, provenance, competing-hypothesis and applicability records. Renamed roles can transfer for probing when declared contracts match; this does not prove bug recurrence.
|
|
51
|
+
- Added `mold-demo`, `mold-run` and frozen `mold-plan` commands; existing MRI, CAST, Claim-to-Witness and optional Jev paths remain available.
|
|
52
|
+
- Added a separate generator process with JSON-only communication and an optional restricted Docker generator. Host execution of targets and Oracles still requires trust.
|
|
53
|
+
- Added optional Z3 support alongside dependency-free bounded enumeration, subpackage-aware packaging, installed-wheel checks and version-independent release checks.
|
|
54
|
+
- Reworked the Korean user guide and aligned English documentation. Preserved E1/E2 `NO_IMPROVEMENT` conclusions; see [release validation](docs/RELEASE_VALIDATION.md) for E3's separate evidence and limits.
|
|
55
|
+
- No PyPI publication is implied. Private E1/E2 archives, hidden evaluation sources and raw research records are excluded from public artifacts.
|
|
56
|
+
|
|
57
|
+
## v0.2.0 — Phase C0
|
|
58
|
+
|
|
59
|
+
- Exact-template (six strings) claim-to-metamorphic-relation compilation.
|
|
60
|
+
- No-reference-function counterexample search/replay with relation and source hashes.
|
|
61
|
+
- CrossHair assert-based comparison fixture and additional 16 tests (45 total).
|
|
62
|
+
- Added explicit limitation: unproven original-claim/obligation semantic fidelity, no established SOTA advantage.
|
|
63
|
+
- Before first publication: bilingual README editing, UTF-8 test reading on Windows, installed-wheel example lookup and packaging, plus source/wheel CI checks. Probe and claim algorithms are unchanged.
|
|
64
|
+
|
|
65
|
+
## v0.1.1
|
|
66
|
+
|
|
67
|
+
- Direct TypeSafe Jev adapter, alongside Vercel pathway; separate authentication and no unrequested cross-provider paid failover.
|
|
68
|
+
- Mock transport/response validation and smoke-test script; 29 tests.
|
|
69
|
+
|
|
70
|
+
## v0.1.0
|
|
71
|
+
|
|
72
|
+
- Initial MRI/CAST cross-feedback laboratory, synthetic branch fixtures, reference-function comparison and replay; 21 tests.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Contributing / 기여 안내
|
|
2
|
+
|
|
3
|
+
관측한 실행 결과, 명시적인 계약, 유한 영역의 검사, 독립적인 증명을 구분합니다. 새 기능은 재현 가능한 예제와 실패 조건, 지원 범위를 함께 제시해 주세요. 기존 명령의 동작과 공개 버전 이력을 보존합니다.
|
|
4
|
+
|
|
5
|
+
## 개발 환경
|
|
6
|
+
|
|
7
|
+
Python 3.11 이상:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
python -m pip install -e .
|
|
11
|
+
python -m pip install pytest build twine
|
|
12
|
+
python -m pytest -q
|
|
13
|
+
python -m build
|
|
14
|
+
python -m twine check dist/*
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Z3 경로를 검사하려면 `python -m pip install -e ".[solver]"`로 선택적 의존성을 설치합니다. 기본 실행은 유한 영역 열거를 사용합니다. Docker 생성기는 Docker Engine과 명시적으로 받은 `python:3.12-slim` 이미지가 필요합니다. 설치한 wheel에서도 새 하위 패키지와 CLI 예제가 실행되는지 확인해야 합니다.
|
|
18
|
+
|
|
19
|
+
## 변경 검토 기준
|
|
20
|
+
|
|
21
|
+
- 정상 실행뿐 아니라 잘못된 증거·명세·전이 계약 거부, 경쟁 가설과 반증 기록, 동결 상태 보호를 검사합니다.
|
|
22
|
+
- Generator에 평가 소스나 정답을 전달하지 않습니다. 새로운 평가 자료는 엔진·후보 동결 전에 결과를 보고 고르지 않습니다.
|
|
23
|
+
- 성능 비교는 같은 예산·명세·판정 기준을 사용하고 실패 입력 수, 독립 결함 수, 반복 시드의 발견 수를 구분합니다.
|
|
24
|
+
- 한국어 README와 영어 README의 기능·명령·제한을 함께 수정합니다. 예제 명령과 상대 링크를 실제로 검사합니다.
|
|
25
|
+
- `results/`, `research/`, `PRIVATE_*`, 원시 연구 기록, 개인 경로, `.env`, API 키, 이전 증거 ZIP 및 빌드 임시 파일을 커밋하지 않습니다. 파일을 개별 검토해 명시적으로 staging합니다.
|
|
26
|
+
- wheel·sdist·Release 자산도 검사합니다. Git에서 제외된 파일이 패키지에도 자동으로 제외된다고 가정하지 않습니다.
|
|
27
|
+
|
|
28
|
+
[이슈](https://github.com/hibou04-ops/antemortem-structural-lab/issues)에 문제와 기대 동작을 남기거나 PR에 재현·검증 결과를 적어 주세요. 기존 태그를 이동하거나 검토 정책을 우회하지 않습니다. [보안 모델](SECURITY.md), [검증 기록](docs/RELEASE_VALIDATION.md), [라이선스](LICENSE)를 참고하세요.
|
|
29
|
+
|
|
30
|
+
Contributions must preserve the difference between observed executions, declared contracts, bounded checks and independent proof. Keep Korean and English guidance aligned, test installed artifacts, and do not publish private evidence or infer general superiority from synthetic fixtures.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Jev Provider Integration — 2026-10-24
|
|
2
|
+
|
|
3
|
+
**Base:** v0.1.0. **Integration version:** v0.1.1. The v0.1.0 archive and the existing public `antemortem-cli` GitHub repository are not modified.
|
|
4
|
+
|
|
5
|
+
## Verified contracts
|
|
6
|
+
|
|
7
|
+
- Direct TypeSafe: `https://api.typesafe.ai/v1/systemone`, model `jev-latest`, key `TYPESAFE_API_KEY` (TypeSafe official documentation)
|
|
8
|
+
- Vercel AI Gateway: `https://ai-gateway.vercel.sh/v1/evaluate`, model `typesafe-ai/jev`, key `AI_GATEWAY_API_KEY` (Vercel official documentation)
|
|
9
|
+
- TypeSafe provider is auto-preferred only when both keys exist; explicit `--jev-provider` pins one backend. Provider failures do not fail over to another billable provider.
|
|
10
|
+
- The only outbound evaluation data consists of a bounded number of small numeric probe values and flags, not source code or file paths.
|
|
11
|
+
- Real credentials must never enter source, the ZIP, logs, screenshots, chat or test artifacts.
|
|
12
|
+
|
|
13
|
+
## Evidence status
|
|
14
|
+
|
|
15
|
+
- Mock transport and response validation: tested offline. Run `python -m pytest -q`.
|
|
16
|
+
- Real billing account, live request, runtime performance or superiority: **NOT TESTED**. Only a user-controlled environment with their real key can check this.
|
|
17
|
+
- The smoke script executes one TypeSafe API request on a bundled, deliberately faulty but locally trusted fixture and checks the output's decision-provider label, NOT that the result is objectively best.
|
|
18
|
+
|
|
19
|
+
## Next checkpoint to append to the existing private archive
|
|
20
|
+
|
|
21
|
+
Once live tested, record date, executed command, result status, test count, cost visible in TypeSafe usage, provider model version, and a checksum of the v0.1.1 ZIP. Do **not** record the API key or request headers. Keep results separate from the previous v0.1.0 immutable archive.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
|
|
2
|
+
Apache License
|
|
3
|
+
Version 2.0, January 2004
|
|
4
|
+
http://www.apache.org/licenses/
|
|
5
|
+
|
|
6
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
7
|
+
|
|
8
|
+
1. Definitions.
|
|
9
|
+
|
|
10
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
11
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
12
|
+
|
|
13
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
14
|
+
the copyright owner that is granting the License.
|
|
15
|
+
|
|
16
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
17
|
+
other entities that control, are controlled by, or are under common
|
|
18
|
+
control with that entity. For the purposes of this definition,
|
|
19
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
20
|
+
direction or management of such entity, whether by contract or
|
|
21
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
22
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
23
|
+
|
|
24
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
25
|
+
exercising permissions granted by this License.
|
|
26
|
+
|
|
27
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
28
|
+
including but not limited to software source code, documentation
|
|
29
|
+
source, and configuration files.
|
|
30
|
+
|
|
31
|
+
"Object" form shall mean any form resulting from mechanical
|
|
32
|
+
transformation or translation of a Source form, including but
|
|
33
|
+
not limited to compiled object code, generated documentation,
|
|
34
|
+
and conversions to other media types.
|
|
35
|
+
|
|
36
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
37
|
+
Object form, made available under the License, as indicated by a
|
|
38
|
+
copyright notice that is included in or attached to the work
|
|
39
|
+
(an example is provided in the Appendix below).
|
|
40
|
+
|
|
41
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
42
|
+
form, that is based on (or derived from) the Work and for which the
|
|
43
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
44
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
45
|
+
of this License, Derivative Works shall not include works that remain
|
|
46
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
47
|
+
the Work and Derivative Works thereof.
|
|
48
|
+
|
|
49
|
+
"Contribution" shall mean any work of authorship, including
|
|
50
|
+
the original version of the Work and any modifications or additions
|
|
51
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
52
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
53
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
54
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
55
|
+
means any form of electronic, verbal, or written communication sent
|
|
56
|
+
to the Licensor or its representatives, including but not limited to
|
|
57
|
+
communication on electronic mailing lists, source code control systems,
|
|
58
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
59
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
60
|
+
excluding communication that is conspicuously marked or otherwise
|
|
61
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
62
|
+
|
|
63
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
64
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
65
|
+
subsequently incorporated within the Work.
|
|
66
|
+
|
|
67
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
68
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
69
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
70
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
71
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
72
|
+
Work and such Derivative Works in Source or Object form.
|
|
73
|
+
|
|
74
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
75
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
76
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
77
|
+
(except as stated in this section) patent license to make, have made,
|
|
78
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
79
|
+
where such license applies only to those patent claims licensable
|
|
80
|
+
by such Contributor that are necessarily infringed by their
|
|
81
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
82
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
83
|
+
institute patent litigation against any entity (including a
|
|
84
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
85
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
86
|
+
or contributory patent infringement, then any patent licenses
|
|
87
|
+
granted to You under this License for that Work shall terminate
|
|
88
|
+
as of the date such litigation is filed.
|
|
89
|
+
|
|
90
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
91
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
92
|
+
modifications, and in Source or Object form, provided that You
|
|
93
|
+
meet the following conditions:
|
|
94
|
+
|
|
95
|
+
(a) You must give any other recipients of the Work or
|
|
96
|
+
Derivative Works a copy of this License; and
|
|
97
|
+
|
|
98
|
+
(b) You must cause any modified files to carry prominent notices
|
|
99
|
+
stating that You changed the files; and
|
|
100
|
+
|
|
101
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
102
|
+
that You distribute, all copyright, patent, trademark, and
|
|
103
|
+
attribution notices from the Source form of the Work,
|
|
104
|
+
excluding those notices that do not pertain to any part of
|
|
105
|
+
the Derivative Works; and
|
|
106
|
+
|
|
107
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
108
|
+
distribution, then any Derivative Works that You distribute must
|
|
109
|
+
include a readable copy of the attribution notices contained
|
|
110
|
+
within such NOTICE file, excluding those notices that do not
|
|
111
|
+
pertain to any part of the Derivative Works, in at least one
|
|
112
|
+
of the following places: within a NOTICE text file distributed
|
|
113
|
+
as part of the Derivative Works; within the Source form or
|
|
114
|
+
documentation, if provided along with the Derivative Works; or,
|
|
115
|
+
within a display generated by the Derivative Works, if and
|
|
116
|
+
wherever such third-party notices normally appear. The contents
|
|
117
|
+
of the NOTICE file are for informational purposes only and
|
|
118
|
+
do not modify the License. You may add Your own attribution
|
|
119
|
+
notices within Derivative Works that You distribute, alongside
|
|
120
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
121
|
+
that such additional attribution notices cannot be construed
|
|
122
|
+
as modifying the License.
|
|
123
|
+
|
|
124
|
+
You may add Your own copyright statement to Your modifications and
|
|
125
|
+
may provide additional or different license terms and conditions
|
|
126
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
127
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
128
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
129
|
+
the conditions stated in this License.
|
|
130
|
+
|
|
131
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
132
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
133
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
134
|
+
this License, without any additional terms or conditions.
|
|
135
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
136
|
+
the terms of any separate license agreement you may have executed
|
|
137
|
+
with Licensor regarding such Contributions.
|
|
138
|
+
|
|
139
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
140
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
141
|
+
except as required for reasonable and customary use in describing the
|
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
143
|
+
|
|
144
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
145
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
146
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
147
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
148
|
+
implied, including, without limitation, any warranties or conditions
|
|
149
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
150
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
151
|
+
appropriateness of using or redistributing the Work and assume any
|
|
152
|
+
risks associated with Your exercise of permissions under this License.
|
|
153
|
+
|
|
154
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
155
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
156
|
+
unless required by applicable law (such as deliberate and grossly
|
|
157
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
158
|
+
liable to You for damages, including any direct, indirect, special,
|
|
159
|
+
incidental, or consequential damages of any character arising as a
|
|
160
|
+
result of this License or out of the use or inability to use the
|
|
161
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
162
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
163
|
+
other commercial damages or losses), even if such Contributor
|
|
164
|
+
has been advised of the possibility of such damages.
|
|
165
|
+
|
|
166
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
+
or other liability obligations and/or rights consistent with this
|
|
170
|
+
License. However, in accepting such obligations, You may act only
|
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
173
|
+
defend, and hold each Contributor harmless for any liability
|
|
174
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
175
|
+
of your accepting any such warranty or additional liability.
|
|
176
|
+
|
|
177
|
+
END OF TERMS AND CONDITIONS
|
|
178
|
+
|
|
179
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
180
|
+
|
|
181
|
+
To apply the Apache License to your work, attach the following
|
|
182
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
183
|
+
replaced with your own identifying information. (Don't include
|
|
184
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
185
|
+
comment syntax for the file format. We also recommend that a
|
|
186
|
+
file or class name and description of purpose be included on the
|
|
187
|
+
same "printed page" as the copyright notice for easier
|
|
188
|
+
identification within third-party archives.
|
|
189
|
+
|
|
190
|
+
Copyright [yyyy] [name of copyright owner]
|
|
191
|
+
|
|
192
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
193
|
+
you may not use this file except in compliance with the License.
|
|
194
|
+
You may obtain a copy of the License at
|
|
195
|
+
|
|
196
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
197
|
+
|
|
198
|
+
Unless required by applicable law or agreed to in writing, software
|
|
199
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
200
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
201
|
+
See the License for the specific language governing permissions and
|
|
202
|
+
limitations under the License.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
include README.md README.ko.md LICENSE CHANGELOG.md PUBLIC_IMPORT_NOTICE.md
|
|
2
|
+
include SECURITY.md CONTRIBUTING.md PHASE_C_README_KO.md PHASE_C_VALIDATION.md
|
|
3
|
+
include VALIDATION_REPORT.md JEV_CONNECTION_CHANGELOG.md
|
|
4
|
+
recursive-include examples *.py
|
|
5
|
+
recursive-include examples/mold *.json
|
|
6
|
+
recursive-include baselines *.py
|
|
7
|
+
recursive-include benchmarks *.py
|
|
8
|
+
recursive-include tests *.py
|
|
9
|
+
recursive-include docs *.md
|
|
10
|
+
include docs/E5_EVALUATION_CONTRACT.json
|
|
11
|
+
include docs/E5_RESULTS.json
|
|
12
|
+
include docs/E6_EVALUATION_CONTRACT.json
|
|
13
|
+
include docs/E6_RESULTS.json
|
|
14
|
+
include docs/E6_CODE_FREEZE.json
|
|
15
|
+
include docs/E7_EVALUATION_CONTRACT.json
|
|
16
|
+
include docs/E7_RESULTS.json
|
|
17
|
+
include docs/E7_CODE_FREEZE.json
|
|
18
|
+
recursive-include examples/discovery *.json
|
|
19
|
+
recursive-include examples/temporal *.json
|
|
20
|
+
recursive-include examples/knowledge *.json
|
|
21
|
+
recursive-include containers *.Dockerfile
|
|
22
|
+
recursive-include scripts *.ps1
|
|
23
|
+
recursive-include scripts *.py
|
|
24
|
+
recursive-include .github *.yml
|
|
25
|
+
prune research/e1
|
|
26
|
+
prune research/e2
|
|
27
|
+
prune research/e3
|
|
28
|
+
prune research/e4
|
|
29
|
+
prune research/e5
|
|
30
|
+
prune research/e6
|
|
31
|
+
prune research/e7
|
|
32
|
+
global-exclude PRIVATE_* *EVIDENCE*.zip
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Phase C — Claim-to-Witness (오라클 없는 조건부 반례 탐색)
|
|
2
|
+
|
|
3
|
+
**상태:** `v0.2.0` 독립 실험판 / 합성 시험 데이터 / 외부 SOTA 우위 미입증 / 프로덕션 금지.
|
|
4
|
+
|
|
5
|
+
## 연구 질문과 정확한 범위
|
|
6
|
+
|
|
7
|
+
> `implementation`과 `reference`를 비교하지 않고, **자연어 주장 → 구체적인 관계식 → 실제 반증 입력 → 동일 소스에서의 재현**을 수행할 수 있는가?
|
|
8
|
+
|
|
9
|
+
이번 버전에서는 **그렇다. 단, 문장 6종의 정확한 화이트리스트에 대해서만.** arbitrary 자연어 주장을 이해하는 엔진이나 검증 의무를 새로 발견하는 LLM은 아직 없다. 즉 **'오라클 없는 실험'은 실행 가능한 정답 함수가 없다는 뜻**이지, 판단 기준이 전혀 없다는 뜻이 아니다. 사용자 주장으로부터 **관계형 계약(metamorphic relation)**을 명확히 정의해야 한다.
|
|
10
|
+
|
|
11
|
+
코드가 '정답'이라는 증거는 없다. 유한한 실행에서 위반 예를 찾으면 해당 **관계식**은 거짓이라고 반증할 수 있지만, 위반 예가 없다는 사실로 일반적인 프로그램 정확성을 증명하지는 못한다. 원래 자연어 주장과 관계식이 진짜 동치라는 사실도 독립적으로 검증해야 한다.
|
|
12
|
+
|
|
13
|
+
## 먼저 실행할 명령 (Windows PowerShell)
|
|
14
|
+
|
|
15
|
+
프로젝트 압축 해제 폴더에서:
|
|
16
|
+
|
|
17
|
+
```powershell
|
|
18
|
+
# 1. 소스코드 실행 없이, 지원하는 정확한 문장만 형식 계약으로 변환
|
|
19
|
+
python -m tomolab claim-compile --claim '두 정수 입력의 순서를 바꿔도 반환값은 같다'
|
|
20
|
+
|
|
21
|
+
# 2. 참조 함수가 하나도 없는 synthetic target으로 실행 실험
|
|
22
|
+
python -m tomolab claim-run examples/claim_only/symmetry_bug.py --claim '두 정수 입력의 순서를 바꿔도 반환값은 같다' --mode cross --budget 12 --allow-local-execution --output results/claim_symmetry_pc.json
|
|
23
|
+
|
|
24
|
+
# 3. 계약 SHA256, 소스 SHA256 확인 후 같은 위반 입력 재실행
|
|
25
|
+
python -m tomolab claim-replay results/claim_symmetry_pc.json --allow-local-execution
|
|
26
|
+
|
|
27
|
+
# 4. MRI 단독 / CAST 단독 / 병렬 / 교차 탐색. 각 관계 검사는 대상 함수 3회 호출.
|
|
28
|
+
python -m tomolab claim-bench --seeds 30 --budget 12 --output results/claim_benchmark_pc.json
|
|
29
|
+
|
|
30
|
+
# 5. 모든 이전 및 신규 회귀 테스트
|
|
31
|
+
python -m pytest -q
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**TypeSafe API 키 불필요**. Phase C 최초 벤치마크에서는 Jev를 호출하지 않는다. v0.1.1에서 확인한 실제 Jev 연결의 성능 개선은 여전히 **미검증**이다.
|
|
35
|
+
|
|
36
|
+
## 실제로 구현한 정확한 계약 3종
|
|
37
|
+
|
|
38
|
+
| 자연어 주장(정확히 일치해야 함) | 컴파일된 검증 의무 |
|
|
39
|
+
|---|---|
|
|
40
|
+
| 두 정수 입력의 순서를 바꿔도 반환값은 같다 | `f(x,y) == f(y,x)` |
|
|
41
|
+
| 첫 번째 정수 입력을 1 증가시키면 반환값도 1 증가한다 | `f(x,y) == f(x-1,y)+1` |
|
|
42
|
+
| 첫 번째 정수 입력을 1 증가시키면 반환값이 감소하지 않는다 | `f(x,y) >= f(x-1,y)` |
|
|
43
|
+
|
|
44
|
+
영어로 된 3개의 정확한 동의 문장도 지원한다. 문구를 조금이라도 다르게 쓴 모호한 주장은 `UNSUPPORTED_CLAIM`을 내고 종료한다. **기계적으로 확정한 계약만 테스트**한다. 자연어를 멋대로 해석해 과도한 신뢰를 만드는 것을 피하기 위한 의도적인 제약이다.
|
|
45
|
+
|
|
46
|
+
가정: 순수·결정적 함수, 정수 인자 2개, 정수 반환형, 입력 범위 기본 `-25..25`. 예외·지원 밖 반환형·반복 실행 불일치는 결함 확증으로 판정하지 않는다. 동일한 첫 입력을 한 번 더 실행해 결정성의 일부를 확인하지만 **전체 순수성을 증명한 것은 아니다**.
|
|
47
|
+
|
|
48
|
+
## 증거 계약
|
|
49
|
+
|
|
50
|
+
`tomolab-claim-evidence-v1`의 결과 상태:
|
|
51
|
+
|
|
52
|
+
- `CLAIM_REFUTED`: 실제 관측값이 컴파일한 **정확한 관계**를 위반하는 재현 가능한 입력쌍 발견.
|
|
53
|
+
- `NOT_REFUTED_WITHIN_BUDGET`: 제한된 실행 안에서 반례 발견 못함. **PASS 또는 VERIFIED가 아님.**
|
|
54
|
+
- `INCONCLUSIVE_EXECUTION`: 판단 가능한 결과가 없음. 계약 또는 실행 환경 재검토 필요.
|
|
55
|
+
- Replay: `REPRODUCED` / `NOT_REPRODUCED` / `SOURCE_DRIFT` / `CONTRACT_DRIFT` / `NO_FINDINGS`.
|
|
56
|
+
|
|
57
|
+
증거는 계약 ID와 SHA256, 소스 SHA256, 양쪽 입력과 출력, 3회 실행의 관측 줄, 교차 피드백 이유, 예산, 정보 부족 사항을 담는다. **증거 SHA256은 원본 동일성을 확인할 뿐 디지털 서명이나 의도 검증은 아니다.** 외부 의존성과 런타임 환경의 변경까지 암호학적으로 보호하지 않는다.
|
|
58
|
+
|
|
59
|
+
## 합성 벤치마크 관측값 (프로토타입 기능 시험)
|
|
60
|
+
|
|
61
|
+
Python 3.13, 기본 seed 0~29, 결함 3종 × 30 seed = 90회, 정상 대조군 4종 관계 설정 × 30 seed = 120회/모드, 대상 함수 호출 최대 12회/시행.
|
|
62
|
+
|
|
63
|
+
| 탐색 방식 | 주장 위반 반례 발견 | 정상 계약에 대한 허위 반증 |
|
|
64
|
+
|---|---:|---:|
|
|
65
|
+
| CAST 단독 | 3/90 | 0/120 |
|
|
66
|
+
| MRI 단독 | 0/90 | 0/120 |
|
|
67
|
+
| 단순 병렬 | 0/90 | 0/120 |
|
|
68
|
+
| MRI ↔ CAST | **90/90** | 0/120 |
|
|
69
|
+
|
|
70
|
+
교차 탐사는 모든 결함에서 **6회 대상 함수 호출(3회/계약 검사 × 2검사)**. 이번 fixture는 **엔진이 쉽게 성공하도록 지원하는 동일한 중첩 if 문법으로 작성한 비블라인드 데이터**다. 시드 30개는 30개의 서로 다른 결함이 아니며, 결과를 현실 코드나 CrossHair보다 우수하다는 증거로 써서는 안 된다.
|
|
71
|
+
|
|
72
|
+
정상 대조 `symmetric_not_sum.py`는 `x*x+y*y`를 반환하지만 두 입력을 바꾸어도 결과가 같아 **swap 검사를 통과**한다. 이 사례가 중요하다. `f(x,y)=f(y,x)`를 검증했다는 사실이 `f(x,y)=x+y`를 검증했다는 뜻은 아니다. 검증 의무가 **너무 약하면 결함을 놓친다**.
|
|
73
|
+
|
|
74
|
+
## CrossHair와의 정면 비교 (PC 실행)
|
|
75
|
+
|
|
76
|
+
CrossHair 공식 문서에서 `--analysis_kind=asserts`는 함수 첫 `assert`를 사전조건, 다음 `assert`를 검증조건으로 사용한다. 이번 baseline은 **실행 가능한 참조 함수가 전혀 없고**, Structural Lab과 **같은 관계식**을 검사한다.
|
|
77
|
+
|
|
78
|
+
```powershell
|
|
79
|
+
python -m crosshair check --analysis_kind=asserts baselines/crosshair_claim_contracts.py
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
이 스크립트에는 합성 결함 주장 3종 및 정상 대조 주장 3종이 들어 있다. 공개 전 Windows / Python 3.12 검사에서 CrossHair 0.0.112도 같은 결함 관계식 세 종류의 반례를 모두 찾았다. 따라서 이 사례들은 기존 도구 대비 우위를 보여주지 않는다. 반례 발견에 따른 종료 코드 1은 이 비교에서 예상되는 결과다. 서로 다른 탐색 비용이나 속도의 우열은 여기서 판단하지 않는다.
|
|
83
|
+
|
|
84
|
+
공정한 비교를 위해 총 벽시계 시간과 결함 탐지 여부를 기록한다. CrossHair의 솔버 반복 횟수와 Phase C의 대상 함수 호출 수는 동등한 비용 단위가 아니므로 직접 비교하지 않는다.
|
|
85
|
+
|
|
86
|
+
## 진짜 후속 연구: 의미의 검증
|
|
87
|
+
|
|
88
|
+
**Phase C0(이번)**: 화이트리스트 주장 → 관계식 → 실행 반례, 재현 가능성.
|
|
89
|
+
|
|
90
|
+
**Phase C1**: 다른 프로젝트의 *공식 문서만*으로 AI가 검증 의무를 제안. 소스코드나 숨겨둔 결함을 본 다음 계약을 선택하는 정보 누출을 막는다.
|
|
91
|
+
|
|
92
|
+
**Phase C2**: 전문가가 작성한 계약과 제안 계약의 의미적 일치도, 오탐과 거짓 계약에 의한 허위 반증, 반례를 찾지 못한 경우의 UNKNOWN 분리.
|
|
93
|
+
|
|
94
|
+
**Phase C3**: 독립적인 제3자 benchmark를 확보하고, CrossHair 및 Hypothesis + 전문가 계약 등 강력한 baseline과 대조. 평가 자료의 버전·라이선스·독립성·실행 환경을 실제로 확인한 뒤 수행한다. 아직 확보·검증한 비교 결과는 없다.
|
|
95
|
+
|
|
96
|
+
**중단 조건:** 단순 계약 컴파일과 기존 CrossHair/Hypothesis에 작은 접착 코드만 붙인 것과 비교해 의미 충실도나 결함 발견 효율이 개선되지 않으면 별도 제품화 금지.
|
|
97
|
+
|
|
98
|
+
## 보안 및 비공개 정책
|
|
99
|
+
|
|
100
|
+
`claim-compile`은 파일을 실행하지 않는다. `claim-run`, `claim-replay`, `claim-bench`는 **Python 코드를 실제 실행한다. OS 샌드박스·타임아웃 없음. 외부에서 받은 소스나 악성 코드를 실행하지 말 것.**
|
|
101
|
+
|
|
102
|
+
API 키·개인 연구·비공개 전략 내용은 포함하지 않았다. 이전 v0.1.1은 별도 ZIP으로 보존하고 본 버전과 혼동하지 않는다. Google Drive 연구 폴더에는 별도 추가 체크포인트로 보관한다.
|
|
103
|
+
|
|
104
|
+
기술 근거:
|
|
105
|
+
- https://crosshair.readthedocs.io/en/stable/kinds_of_contracts.html
|
|
106
|
+
- https://crosshair.readthedocs.io/en/stable/contracts.html
|
|
107
|
+
- https://doi.org/10.1109/TSE.2013.46
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Phase C v0.2.0 검증 체크포인트
|
|
2
|
+
|
|
3
|
+
- 2026-10-24: 부모 v0.1.1 ZIP을 복사해 **새 버전**을 작성. 부모 파일은 덮어쓰지 않음.
|
|
4
|
+
- 실행환경: Python 3.13, pytest (현재 생성 환경). CrossHair 설치되지 않아 **외부 SMT baseline 미실행**.
|
|
5
|
+
- 신규 실험 범위: 순수 두 정수 인자 함수, 정확한 한국어/영어 관계형 주장 6종, 조건식 AST 및 실행 줄 피드백.
|
|
6
|
+
- 실측 결과: `python -m pytest -q`: **45 passed**, `claim-run` 3개 유형 각 반례 발견, `claim-replay` 동일 증거 재현.
|
|
7
|
+
- `claim-bench`: 시드 30 × 결함 유형 3; MRI↔CAST 90/90, CAST 3/90, MRI 0/90, 병렬 0/90. 정상 관계 4개 × 시드 30: 허위 반증 0/120(각 모드).
|
|
8
|
+
- 실측은 비블라인드 인위적인 작은 사례에서의 기능 테스트. 일반화, 정확한 자연어 해석, 대규모 문서 기반 의무 발견, 타 도구 대비 성능 개선은 **미검증**.
|
|
9
|
+
- CrossHair baseline 명령어는 `PHASE_C_README_KO.md` 참조. 사용자 PC에서 실행해 얻은 로그를 별도 보관할 것.
|
|
10
|
+
- 계약의 SHA256이 바뀌거나 코드 해시가 바뀌면 재현 검사를 중단한다. Python 환경의 전이적 종속성은 보호하지 못한다.
|
|
11
|
+
- Jev 실 API 연결의 기존 성공은 별도 v0.1.1 연결 증거. **Phase C 결과는 Jev 모델의 기여가 0** (실제 호출 없음).
|