codemble 0.22.0__tar.gz → 0.23.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.
- {codemble-0.22.0 → codemble-0.23.0}/.github/workflows/ci.yml +9 -1
- {codemble-0.22.0 → codemble-0.23.0}/CHANGELOG.md +140 -0
- {codemble-0.22.0 → codemble-0.23.0}/CLAUDE.md +321 -52
- codemble-0.23.0/CONTEXT.md +114 -0
- {codemble-0.22.0 → codemble-0.23.0}/PKG-INFO +40 -42
- {codemble-0.22.0 → codemble-0.23.0}/README.md +35 -39
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/python_ast.py +12 -7
- {codemble-0.22.0 → codemble-0.23.0}/codemble/checks/service.py +3 -1
- {codemble-0.22.0 → codemble-0.23.0}/codemble/cli.py +4 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/server/app.py +93 -2
- {codemble-0.22.0 → codemble-0.23.0}/codemble/server/project_activation.py +28 -0
- codemble-0.23.0/codemble/share/__init__.py +70 -0
- codemble-0.23.0/codemble/share/alerts.py +352 -0
- codemble-0.23.0/codemble/share/artifact.py +613 -0
- codemble-0.23.0/codemble/share/delivery.py +662 -0
- codemble-0.23.0/codemble/share/http_delivery.py +493 -0
- codemble-0.23.0/codemble/share/interpretation.py +588 -0
- codemble-0.23.0/codemble/share/operations.py +2514 -0
- codemble-0.23.0/codemble/share/ops_cli.py +446 -0
- codemble-0.23.0/codemble/share/persistent_storage.py +1097 -0
- codemble-0.23.0/codemble/share/preview.py +217 -0
- codemble-0.23.0/codemble/share/retirement.py +112 -0
- codemble-0.23.0/codemble/web_dist/assets/index--XyLmFn3.css +1 -0
- codemble-0.23.0/codemble/web_dist/assets/index-C2MgA6Qs.js +5667 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/index.html +2 -2
- codemble-0.23.0/docs/design/2026-09-10-planetary-expedition.md +79 -0
- codemble-0.23.0/docs/releases/v0.23.0.md +43 -0
- codemble-0.23.0/docs/research/2026-08-26-read-only-share-privacy-boundary.md +232 -0
- codemble-0.23.0/docs/superpowers/specs/2026-08-26-read-only-share-privacy-design.md +324 -0
- codemble-0.23.0/ops/share/Caddyfile.example +10 -0
- codemble-0.23.0/ops/share/README.md +243 -0
- codemble-0.23.0/ops/share/codemble-rest-server.service +21 -0
- codemble-0.23.0/ops/share/codemble-share-alert-tmpfiles.conf +5 -0
- codemble-0.23.0/ops/share/codemble-share-alert@.service +19 -0
- codemble-0.23.0/ops/share/codemble-share-operator.service +19 -0
- codemble-0.23.0/ops/share/codemble-share-operator.timer +11 -0
- codemble-0.23.0/ops/share/codemble-share-tmpfiles.conf +6 -0
- codemble-0.23.0/ops/share/codemble-share-writer.service +19 -0
- codemble-0.23.0/ops/share/codemble-share-writer.timer +11 -0
- codemble-0.23.0/ops/share/share-alert.toml.example +5 -0
- codemble-0.23.0/ops/share/share-journal-operator.toml.example +14 -0
- codemble-0.23.0/ops/share/share-operator.toml.example +25 -0
- codemble-0.23.0/ops/share/share-writer.toml.example +33 -0
- {codemble-0.22.0 → codemble-0.23.0}/pyproject.toml +15 -7
- codemble-0.23.0/scripts/serve_share_delivery_fixture.py +64 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_project_parser.py +23 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_python_resolution.py +20 -0
- codemble-0.23.0/tests/test_share_alerts.py +208 -0
- codemble-0.23.0/tests/test_share_artifact.py +915 -0
- codemble-0.23.0/tests/test_share_delivery.py +394 -0
- codemble-0.23.0/tests/test_share_http_delivery.py +449 -0
- codemble-0.23.0/tests/test_share_operations.py +1046 -0
- codemble-0.23.0/tests/test_share_operations_assets.py +149 -0
- codemble-0.23.0/tests/test_share_operations_identity.py +437 -0
- codemble-0.23.0/tests/test_share_ops_cli.py +322 -0
- codemble-0.23.0/tests/test_share_persistent_storage.py +539 -0
- codemble-0.23.0/tests/test_share_preview.py +582 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/package-lock.json +6 -6
- {codemble-0.22.0 → codemble-0.23.0}/web/package.json +8 -3
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/capture_product_shots.mjs +32 -6
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/capture_support.mjs +74 -5
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_canvas_occlusion.mjs +2 -2
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_capture_safety.mjs +9 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_celestial_bodies.mjs +7 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_galaxy_runtime.mjs +3 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_galaxy_view.mjs +32 -1
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_learner_session.mjs +224 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_name_atlas.mjs +16 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_panel_reach.mjs +140 -0
- codemble-0.23.0/web/scripts/check_planetary_graphics.mjs +91 -0
- codemble-0.23.0/web/scripts/check_planetary_interactions.mjs +57 -0
- codemble-0.23.0/web/scripts/check_planetary_visuals.mjs +59 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_public_site.mjs +51 -1
- codemble-0.23.0/web/scripts/check_share_delivery.mjs +280 -0
- codemble-0.23.0/web/scripts/check_share_preview_run.mjs +93 -0
- codemble-0.23.0/web/scripts/check_text_containment.mjs +162 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/App.jsx +61 -5
- {codemble-0.22.0 → codemble-0.23.0}/web/src/GalaxyCanvas.jsx +7 -1
- codemble-0.23.0/web/src/SharePreviewDialog.jsx +306 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/canvasOcclusion.js +2 -2
- {codemble-0.22.0 → codemble-0.23.0}/web/src/celestialBodies.js +134 -116
- {codemble-0.22.0 → codemble-0.23.0}/web/src/galaxyMaterials.js +73 -27
- {codemble-0.22.0 → codemble-0.23.0}/web/src/galaxyRuntime.js +44 -12
- {codemble-0.22.0 → codemble-0.23.0}/web/src/galaxyView.js +50 -2
- {codemble-0.22.0 → codemble-0.23.0}/web/src/learnerSession.js +191 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/nameAtlas.js +17 -6
- codemble-0.23.0/web/src/sharePreviewRun.js +214 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/styles.css +426 -1
- codemble-0.22.0/CONTEXT.md +0 -46
- codemble-0.22.0/codemble/web_dist/assets/index-C3498IDT.js +0 -5609
- codemble-0.22.0/codemble/web_dist/assets/index-ZndcOj-s.css +0 -1
- {codemble-0.22.0 → codemble-0.23.0}/.env.example +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.gitattributes +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.github/ISSUE_TEMPLATE/early_tester.yml +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.github/dependabot.yml +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.github/workflows/pages.yml +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.github/workflows/publish-pypi.yml +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.gitignore +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/.graphifyignore +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/AGENTS.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/CODE_OF_CONDUCT.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/CONTRIBUTING.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/LICENSE +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/NOTES.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/NOTICE +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/SECURITY.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/TESTING.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/assets/demo.gif +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/base.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/csharp_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/discovery.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/evidence_cache.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/go_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/java_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/parse_progress.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/php_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/project.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/role_rules.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/ruby_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/rust_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/source_text.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/tree_sitter_core.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/adapters/typescript_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/checks/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/graph/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/graph/finalize.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/graph/impact.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/graph/layout.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/graph/learning.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/graph/mapview.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/lens/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/lens/dynamic_languages.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/lens/javascript_typescript.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/lens/python.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/lens/systems_languages.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/llm/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/llm/local_status.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/llm/providers.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/llm/structural.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/llm/study.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/paths.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/progress/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/progress/store.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/server/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/server/parse_job.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/server/project_selection.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/server/runtime.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/shippori-mincho-latin-500-normal-C-QwvIb3.woff +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/shippori-mincho-latin-500-normal-XI1O8euf.woff2 +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/shippori-mincho-latin-700-normal-CkoCYOiI.woff +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/shippori-mincho-latin-700-normal-DHcmzUO5.woff2 +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/zen-kaku-gothic-new-latin-400-normal-BEdayliK.woff2 +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/codemble/web_dist/assets/zen-kaku-gothic-new-latin-400-normal-CPSmNJAU.woff +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/adr/README.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/plans/2026-07-19-audience-modes-and-local-narration-design.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/plans/2026-07-19-audience-modes-backend-plan.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/plans/2026-07-19-audience-modes-frontend-plan.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/plans/2026-07-19-install-ux-folder-picker-design.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/plans/2026-07-19-install-ux-folder-picker-plan.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/plans/2026-07-20-oss-inspired-map-and-constellations.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/plans/README.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/plans/phase-1.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/checklist.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.1.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.16.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.17.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.18.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.19.1.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.19.2.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.2.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.20.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.21.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.21.1.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.22.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.4.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.5.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.5.1.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.5.2.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.5.3.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.6.1.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.6.2.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.6.3.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.6.4.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.7.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/releases/v0.9.0.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/research/2026-07-20-opensource-graph-architecture-inspiration.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/research/2026-08-25-adventure-galaxy-and-ruby-php.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/research/README.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/plans/2026-07-19-galaxy-ux-phase-a.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/plans/2026-07-19-galaxy-ux-phase-b.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/plans/2026-07-19-galaxy-ux-phase-c.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/plans/2026-07-19-galaxy-ux-shared-contract.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/plans/2026-07-28-shell-space-budget.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/specs/2026-07-19-galaxy-ux-overhaul-design.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/specs/2026-07-21-navigation-design-clarity-design.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/specs/2026-07-22-cinematic-website-design.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/specs/2026-07-27-unsupported-source-reporting-design.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/specs/2026-07-28-product-screenshot-recapture-design.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/specs/2026-07-28-shell-space-budget-design.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/docs/superpowers/specs/2026-08-02-explorable-galaxy-redesign.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/scripts/audit_parser_evidence.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/scripts/benchmark_parser_scale.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/scripts/benchmark_study_queries.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/scripts/dev.sh +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/scripts/record_demo.sh +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/scripts/serve_large_project_gate.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/conftest.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/check_suites.json +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/concepts_sample.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/csharp_sample/obj/Debug/AssemblyInfo.cs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/csharp_sample/src/Broken.cs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/csharp_sample/src/Core/Shapes.cs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/csharp_sample/src/Core/Store.cs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/csharp_sample/src/Program.cs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/csharp_sample/src/Query/Reports.cs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/csharp_sample/src/Tests/StoreTests.cs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/go_sample/cmd/app/main.go +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/go_sample/go.mod +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/go_sample/internal/report/broken.go +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/go_sample/internal/report/report.go +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/go_sample/internal/store/store.go +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/go_sample/internal/store/store_test.go +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/go_sample/testdata/fake.go +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/go_sample/vendor/example.com/dep/dep.go +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/impact/alpha.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/impact/beta.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/impact/gamma.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/impact/helpers.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/impact/noisy.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/src/com/example/app/App.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/src/com/example/app/Broken.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/src/com/example/app/Service.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/src/com/example/model/Catalog.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/src/com/example/model/Shapes.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/src/com/example/util/Formatter.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/src/com/example/util/Helper.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/target/com/example/app/Generated.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/java_sample/test/com/example/app/AppTest.java +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/parser_evidence_oracle.json +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/php_sample/bin/atlas.php +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/php_sample/composer.json +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/php_sample/src/Broken.php +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/php_sample/src/Names.php +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/php_sample/src/Navigator.php +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/php_sample/src/Ship.php +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/polyglot/python_worker.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/polyglot/src/broken.ts +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/polyglot/src/legacy.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/polyglot/src/local.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/polyglot/src/main.ts +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/polyglot/src/reexport.ts +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/polyglot/src/util.ts +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/polyglot/src/widget.tsx +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/repeated_calls.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/ruby_sample/bin/atlas.rb +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/ruby_sample/lib/atlas/navigation.rb +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/ruby_sample/lib/atlas.rb +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/ruby_sample/lib/broken.rb +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/rust_sample/src/broken.rs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/rust_sample/src/lib.rs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/rust_sample/src/main.rs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/rust_sample/src/render.rs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/rust_sample/src/util.rs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/rust_sample/target/generated.rs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/.gitignore +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/ambiguous.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/api.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/app.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/broken.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/cli.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/pkg/__init__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/pkg/helpers.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/pkg/service.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/pkg/util.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/runner/__main__.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/fixtures/sampleproj/shared.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_checks.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_csharp_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_dependency_compatibility.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_discovery.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_explorer_trail.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_go_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_graph_finalization.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_impact.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_java_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_learning_journey.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_mapview.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_narration_rescue.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_parse_job.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_parse_progress.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_parser_evidence_oracle.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_parser_scale_benchmark.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_polyglot_composition.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_progress.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_project_activation.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_project_selection.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_providers.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_python_ast.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_role_evidence.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_ruby_php_adapters.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_rust_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_server.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_smoke.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_structural.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_study.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_tree_sitter_lifecycle.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_typescript_resolution.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/tests/test_typescript_tree_sitter.py +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/README.md +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/index.html +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/benchmark_learner_projection.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_camera_framing.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_escape_arbiter.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_escape_surfaces.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_first_flight.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_focus_handoffs.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_galaxy_effects.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_graph_data.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_interface_semantics.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_large_project.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_learner_projection.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_learning_journey.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_map_canvas_renderer.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_map_viewport.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_mode_gate_portal.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_orbit_pointer_guard.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_possible_routes.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_project_brief.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_project_mapping.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_sky_palette.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_space_budget.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_system_orbits.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/check_userflow_repairs.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/scripts/record_demo.mjs +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/GuidanceLayer.jsx +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/MapView.jsx +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/ModeControl.jsx +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/StudyPanel.jsx +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/SystemNavigator.jsx +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/cameraFraming.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/dawnSequence.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/escapeArbiter.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/firstFlight.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/galaxyEffects.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/graphData.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/learnerProjection.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/learningJourney.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/localServerErrors.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/main.jsx +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/mapCanvasRenderer.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/mapViewport.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/orbitPointerGuard.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/possibleRoutes.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/projectBrief.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/projectMapping.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/systemOrbits.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/src/tokens.css +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/web/vite.config.js +0 -0
- {codemble-0.22.0 → codemble-0.23.0}/workflows/cinematic-public-site-refinement.md +0 -0
|
@@ -94,11 +94,19 @@ jobs:
|
|
|
94
94
|
- name: Escape surfaces
|
|
95
95
|
if: ${{ !cancelled() }}
|
|
96
96
|
run: cd web && CODEMBLE_URL=http://127.0.0.1:8899 npm run check:escape
|
|
97
|
+
- name: Study text containment
|
|
98
|
+
if: ${{ !cancelled() }}
|
|
99
|
+
run: cd web && CODEMBLE_URL=http://127.0.0.1:8899 npm run check:text
|
|
97
100
|
# Owns separate project-bound and unbound-picker servers with disposable
|
|
98
101
|
# data roots, then exercises the repaired journeys in both browser engines.
|
|
99
102
|
- name: User-flow repairs
|
|
100
103
|
if: ${{ !cancelled() }}
|
|
101
104
|
run: cd web && npm run check:userflows
|
|
105
|
+
# Owns a disposable TLS endpoint and proves the capability viewer in both
|
|
106
|
+
# engines without connecting the local preview to upload or cloud state.
|
|
107
|
+
- name: Private share delivery
|
|
108
|
+
if: ${{ !cancelled() }}
|
|
109
|
+
run: cd web && npm run check:share-delivery
|
|
102
110
|
package-check:
|
|
103
111
|
runs-on: ubuntu-latest
|
|
104
112
|
steps:
|
|
@@ -109,4 +117,4 @@ jobs:
|
|
|
109
117
|
- name: Build wheel and verify packaged SPA
|
|
110
118
|
run: |
|
|
111
119
|
python -m pip wheel . --no-deps --wheel-dir /tmp/codemble-wheel
|
|
112
|
-
python -c 'import pathlib, zipfile; wheel = next(pathlib.Path("/tmp/codemble-wheel").glob("*.whl"));
|
|
120
|
+
python -c 'import pathlib, zipfile; wheel = next(pathlib.Path("/tmp/codemble-wheel").glob("*.whl")); archive = zipfile.ZipFile(wheel); names = archive.namelist(); metadata = archive.read(next(name for name in names if name.endswith(".dist-info/METADATA"))).decode(); assert "codemble/web_dist/index.html" in names; assert "codemble/share/http_delivery.py" in names; assert "codemble/share/persistent_storage.py" in names; assert "Requires-Dist: cryptography<51,>=45" in metadata; assert any(name.startswith("codemble/web_dist/assets/") for name in names)'
|
|
@@ -5,6 +5,146 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning:
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.23.0] - 2026-09-25
|
|
9
|
+
|
|
10
|
+
### Documentation
|
|
11
|
+
- Align the README, public site, installation guides, artifact ledger, and
|
|
12
|
+
release notes with v0.23.0, pin public assets to the exact tag, and refresh
|
|
13
|
+
Study captures with the selected world visible beside its parser evidence.
|
|
14
|
+
|
|
15
|
+
### Dependencies
|
|
16
|
+
- Accept cryptography 50, tree-sitter-go 0.25, tree-sitter-rust 0.24, and
|
|
17
|
+
JetBrains Mono 5.3 after focused compatibility, semantic-oracle, real-corpus,
|
|
18
|
+
package, and full-suite verification.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
- Product capture now fixes the visible project label to `Codemble`, making the
|
|
22
|
+
committed screenshots reproducible from arbitrarily named clones and
|
|
23
|
+
worktrees, and parses a Git-filtered source snapshot so ignored build output
|
|
24
|
+
cannot alter the public counts.
|
|
25
|
+
- Missing scheduled-maintenance locks now fail startup instead of silently
|
|
26
|
+
skipping the service, making failures eligible for the existing alert relay.
|
|
27
|
+
The preflight also rejects paths that do not resolve to regular files.
|
|
28
|
+
|
|
29
|
+
### Performance
|
|
30
|
+
- Avoid repeated whole-project scans while resolving Python import namespaces and generating check options, preserving parser meaning and pinned check answers.
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
- Seeded ocean, ice, rocky, and banded worlds with cloud cover, relief lighting,
|
|
34
|
+
thin atmospheres, a granular Sun, and layered nebula scenery. Surface patterns
|
|
35
|
+
are illustrative; parser-owned positions, roles, routes, and progress retain
|
|
36
|
+
their existing meanings.
|
|
37
|
+
- Study now frames the selected world beside source evidence, with slimmer
|
|
38
|
+
close-up routes and live reduced-motion support. System panels leave more
|
|
39
|
+
space for exploration and orbit explanations no longer overlap world names.
|
|
40
|
+
- A local `ShareArtifact` interface now compiles the render-ready graph into an
|
|
41
|
+
immutable read-only snapshot with per-artifact keyed IDs, source-ID-independent
|
|
42
|
+
collision-aware placement, RFC 8785 canonical bytes, an exact payload digest,
|
|
43
|
+
source-safe provenance, and an absolute expiry capped at 30 days. It adds no
|
|
44
|
+
upload, provider, account, or cloud request.
|
|
45
|
+
- A local share workbench now makes the privacy boundary visible before delivery:
|
|
46
|
+
choose a one-, seven-, or thirty-day lifetime, opt into names and learner
|
|
47
|
+
understanding separately, inspect the exact canonical artifact and its digest,
|
|
48
|
+
then acknowledge only the fields present. Its same-origin preview and
|
|
49
|
+
confirmation routes retain one candidate in process memory and expose no upload
|
|
50
|
+
capability.
|
|
51
|
+
- A provider-neutral capability module now issues independent 256-bit view and
|
|
52
|
+
deletion capabilities for one immutable artifact, stores only derived lookup,
|
|
53
|
+
reuse-detection, and capability-keyed authentication values, irreversibly
|
|
54
|
+
tombstones observed expiry, revalidates the closed schema, relationships,
|
|
55
|
+
digests, and bound storage identity, and atomically revokes access with
|
|
56
|
+
retry-safe results even across a server-clock rollback.
|
|
57
|
+
Its reference adapter is process-local; no provider or cloud storage is
|
|
58
|
+
enabled.
|
|
59
|
+
- A standalone share-delivery application now serves one immutable capability
|
|
60
|
+
over HTTPS-only `GET`, accepts confirmed revocation only through a protected
|
|
61
|
+
deletion-capability header, context-encodes artifact labels into a script-free
|
|
62
|
+
viewer, and normalizes every bearer-bearing or unknown target before ASGI access
|
|
63
|
+
logging. It is not connected to the local preview or any upload route.
|
|
64
|
+
- One trusted Share Artifact interpreter now validates canonical bytes and
|
|
65
|
+
derives the preview and delivery facts consumed by every boundary. The
|
|
66
|
+
compiler lays out and summarizes the exact deduplicated relationship
|
|
67
|
+
projection it serializes while separately validating the parser's full graph.
|
|
68
|
+
- The Share Preview Run now owns the complete choose, compile, inspect,
|
|
69
|
+
acknowledge, confirm, restart, and project-release lifecycle, including stale
|
|
70
|
+
response refusal and focus handoffs, instead of spreading that state between
|
|
71
|
+
the session and dialog.
|
|
72
|
+
- A zero-license-cost operations reference uses Caddy, restic, and rest-server
|
|
73
|
+
with separate append-only writer and local operator roles. It adds hourly
|
|
74
|
+
sweep/backup and daily full-data-check/prune commands, pinned restic bytes,
|
|
75
|
+
operator-managed Caddy configuration and a fixed absolute rest-server path,
|
|
76
|
+
closed configuration templates, a process-serialized create-only Retirement
|
|
77
|
+
Journal that advances only after two named authenticated repositories return
|
|
78
|
+
snapshot- and entry-bound receipts, role-local credential-derived deployment
|
|
79
|
+
attestations, independent journal materialization, application-host-local
|
|
80
|
+
production restore with writer-journal rehydration, a stable application-host
|
|
81
|
+
operation lock outside the replaceable store whose root-owned parent is not
|
|
82
|
+
replaceable by the non-root writer, with trusted-directory and inode checks
|
|
83
|
+
plus process-level exclusion proof for writer and root-operator transitions.
|
|
84
|
+
The public writer cycle acquires that lock before opening its store or journal,
|
|
85
|
+
every writer-owned sibling path is pre-provisioned, and root restores verify a
|
|
86
|
+
recursive ownership handoff to the configured non-root writer before promotion.
|
|
87
|
+
Exact snapshot retirement stays behind a durable creation seal, with
|
|
88
|
+
repository-bound finite whole-key-store retirement authorization.
|
|
89
|
+
Hardware, storage, DNS, electricity, and network access may still cost money.
|
|
90
|
+
- Scheduled writer, operator, and append-only receiver failures now enter one
|
|
91
|
+
provider-neutral alert relay. It writes a closed token-free event to a private
|
|
92
|
+
root-owned spool before invoking a digest-pinned local notifier, retries a
|
|
93
|
+
failed handoff with the same alert ID, and keeps delivered evidence separate
|
|
94
|
+
from the next failure. Real channel delivery remains an operational gate.
|
|
95
|
+
|
|
96
|
+
### Privacy
|
|
97
|
+
- Raw source, snippets, filesystem paths, dedicated filename metadata, file
|
|
98
|
+
hashes, source positions, external targets, narration/provider data, checks,
|
|
99
|
+
visits, recents, and logs are excluded. Source-derived labels (which can still
|
|
100
|
+
reveal file or module names) and learner understanding are separate,
|
|
101
|
+
false-by-default publisher choices. The compiler closes language/schema/value
|
|
102
|
+
bounds, rejects contradictory or incomplete certain relationships, recomputes
|
|
103
|
+
Home/routes/orbits over represented edges, and deduplicates viewer marks.
|
|
104
|
+
- Preview and confirmation responses are `no-store`, accept strict JSON bodies,
|
|
105
|
+
bind confirmation to the current preview ID and payload digest, and disappear
|
|
106
|
+
with the active project or process. A confirmed preview creates no link and
|
|
107
|
+
performs no outbound or cloud request.
|
|
108
|
+
- Invalid, expired, and revoked view capabilities have one indistinguishable
|
|
109
|
+
result. Deletion requires an explicit confirmation, removes active bytes on
|
|
110
|
+
the first atomic revocation, and retains only a non-serving tombstone so a
|
|
111
|
+
lost response can be retried without restoring access. Raw capabilities and
|
|
112
|
+
artifact bytes are excluded from storage-record representations.
|
|
113
|
+
- Every viewer, revocation, validation-error, and not-found response carries
|
|
114
|
+
`no-store`, `no-referrer`, a self-contained restrictive CSP, no-index and
|
|
115
|
+
opener/resource isolation headers. Lifecycle logs accept only an internal share
|
|
116
|
+
ID, UTC timestamp, closed operation, and closed outcome; raw capabilities,
|
|
117
|
+
request targets, artifacts, IP addresses, and User-Agent data have no logging
|
|
118
|
+
interface. A failed telemetry sink is non-authoritative and cannot strand an
|
|
119
|
+
active share or change view/revocation state. Chromium and WebKit verify no
|
|
120
|
+
cookie or other browser storage, service worker, or third-party request is created.
|
|
121
|
+
- Backups bind the authenticated database digest and backup-repository identity
|
|
122
|
+
to the exact Retirement Journal fully anchored high-water and immutable
|
|
123
|
+
name-to-repository replica inventory, captured before the SQLite snapshot so a
|
|
124
|
+
concurrent retirement cannot be skipped. Restore requires independently
|
|
125
|
+
materialized replicas and their repository-bound receipts to agree, replays
|
|
126
|
+
every later revocation or expiry, rehydrates the writer journal, and fails
|
|
127
|
+
closed on gaps, forks, stale copies, or missing rollback authority. Only the
|
|
128
|
+
independently held operator role can check, restore, prune, inventory, or
|
|
129
|
+
remove snapshots. Explicit removal installs an authenticated durable seal that
|
|
130
|
+
closes later creates and writer cycles, then deletes only the exact live
|
|
131
|
+
inventory; final authorization re-queries that repository rather than
|
|
132
|
+
accepting caller-asserted emptiness. The separately held recovery-key copy
|
|
133
|
+
must authenticate the same active storage key while role-local attestations
|
|
134
|
+
prove authority credentials stay different without bringing both secret
|
|
135
|
+
configurations together.
|
|
136
|
+
The local compiler and exact disclosure preview ship connected in v0.23.0,
|
|
137
|
+
while capability persistence, standalone delivery, backup, and operations
|
|
138
|
+
remain disconnected from public delivery. Public share delivery stays blocked
|
|
139
|
+
until the intended independent node, timers, alerts, restore drill, deletion
|
|
140
|
+
deadline, and approved media-erasure procedure are observed in operation.
|
|
141
|
+
|
|
142
|
+
### Release boundary
|
|
143
|
+
- v0.23.0 publishes the graphics, local learning experience, dependency updates,
|
|
144
|
+
documentation, local-only share preview, and disconnected delivery foundations.
|
|
145
|
+
It does not connect an upload or public delivery route and makes no
|
|
146
|
+
operational-erasure claim.
|
|
147
|
+
|
|
8
148
|
## [0.22.0] - 2026-08-25
|
|
9
149
|
|
|
10
150
|
### Added
|