diff --git a/CHANGELOG.md b/CHANGELOG.md index 7707049..3c469e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Unreleased + +- Development resumes as `7.0.1.dev0`. The signed `v7.0.0` tag and its + pinned single-file checksum remain the current stable release. + ## 7.0.0 — 2026-07-18 The memory-platform release. Version 7 turns the audited single-file memory diff --git a/README.ar.md b/README.ar.md index 12dd1e0..a95fdb7 100644 --- a/README.ar.md +++ b/README.ar.md @@ -24,17 +24,17 @@ ## الحالة المتحقق منها -- النسخة الحالية: `7.0.0`، وحالتها مستقرة. +- النسخة الحالية: `7.0.1.dev0`، وحالتها معاينة قبل الإصدار. - الإصدار المستقر: `7.0.0`، وبصمة ملفه `ae2fc389b3b09c93cb432ab55b71063d98b400da6b18d6bc178322bc8f3fcf69`. -- الاختبارات المكتشفة آليا: **381**. -- التوزيع: **10** مجالات مصدرية تبني ملفا واحدا حتميا؛ بصمة الملف الحالي `ae2fc389b3b09c93cb432ab55b71063d98b400da6b18d6bc178322bc8f3fcf69`. +- الاختبارات المكتشفة آليا: **382**. +- التوزيع: **10** مجالات مصدرية تبني ملفا واحدا حتميا؛ بصمة الملف الحالي `182322c812686d5885423f90943a66898236ec04a1ed84ce5b52feb9a4364aee`. - مصفوفة التكامل: **9** خلايا لأنظمة وإصدارات بايثون. - سطر الأوامر: **30** أمرا؛ خادم البروتوكول: **17** أداة. -النسخة `7.0.0` هي إصدار منصة الذاكرة المستقر. وتحتوي مزايا دورة الحياة -وخادم البروتوكول والذاكرة المصنفة والخصوصية والالتقاط التلقائي والمصدر -المعياري الموثقة أدناه. +النسخة `7.0.1.dev0` هي معاينة التطوير الحالية. أما الإصدار الجاهز للاستخدام +فهو `7.0.0`، ويحتوي مزايا دورة الحياة وخادم البروتوكول والذاكرة المصنفة +والخصوصية والالتقاط التلقائي والمصدر المعياري الموثقة أدناه. ## التثبيت diff --git a/README.md b/README.md index 2e870a1..3729b30 100644 --- a/README.md +++ b/README.md @@ -25,17 +25,17 @@ builder reconstructs the single-file artifact byte-for-byte. ## Verified Status -- Development version: `7.0.0` (stable). +- Development version: `7.0.1.dev0` (preview). - Stable release: `7.0.0`; pinned `mind.py` SHA-256 `ae2fc389b3b09c93cb432ab55b71063d98b400da6b18d6bc178322bc8f3fcf69`. -- Discovered tests: **381**. -- Distribution: **10** source-domain fragments build one deterministic file; current artifact SHA-256 `ae2fc389b3b09c93cb432ab55b71063d98b400da6b18d6bc178322bc8f3fcf69`. +- Discovered tests: **382**. +- Distribution: **10** source-domain fragments build one deterministic file; current artifact SHA-256 `182322c812686d5885423f90943a66898236ec04a1ed84ce5b52feb9a4364aee`. - CI matrix: **9** operating-system/Python cells. - Command line: **30** commands; protocol server: **17** tools. -`7.0.0` is the stable memory-platform release. It contains the lifecycle, -protocol-server, typed-memory, privacy, automatic-capture, and modular-source -features documented below. +`7.0.1.dev0` is the current development preview. The production-ready release +is `7.0.0`, which contains the lifecycle, protocol-server, typed-memory, +privacy, automatic-capture, and modular-source features documented below. ## Install diff --git a/SKILL.md b/SKILL.md index 32f32fc..6ba53ca 100644 --- a/SKILL.md +++ b/SKILL.md @@ -20,10 +20,10 @@ consolidates them automatically. The default artifact is one standard-library Python file. -- Development version: `7.0.0` (stable). +- Development version: `7.0.1.dev0` (preview). - Stable release: `7.0.0`; pinned `mind.py` SHA-256 `ae2fc389b3b09c93cb432ab55b71063d98b400da6b18d6bc178322bc8f3fcf69`. -- Discovered tests: **381**. -- Distribution: **10** source-domain fragments build one deterministic file; current artifact SHA-256 `ae2fc389b3b09c93cb432ab55b71063d98b400da6b18d6bc178322bc8f3fcf69`. +- Discovered tests: **382**. +- Distribution: **10** source-domain fragments build one deterministic file; current artifact SHA-256 `182322c812686d5885423f90943a66898236ec04a1ed84ce5b52feb9a4364aee`. - CI matrix: **9** operating-system/Python cells. - Command line: **30** commands; protocol server: **17** tools. diff --git a/docs/facts.json b/docs/facts.json index f88ebcc..ebd7c74 100644 --- a/docs/facts.json +++ b/docs/facts.json @@ -1,7 +1,7 @@ { - "artifact_bytes": 336396, + "artifact_bytes": 336401, "artifact_lines": 7829, - "artifact_sha256": "ae2fc389b3b09c93cb432ab55b71063d98b400da6b18d6bc178322bc8f3fcf69", + "artifact_sha256": "182322c812686d5885423f90943a66898236ec04a1ed84ce5b52feb9a4364aee", "capabilities": [ "atomic local graph storage", "spreading-activation recall", @@ -71,8 +71,8 @@ "unlink", "why" ], - "development_status": "stable", - "development_version": "7.0.0", + "development_status": "preview", + "development_version": "7.0.1.dev0", "environment_variables": [ "MIND_AUTO_DREAM", "MIND_BY", @@ -127,5 +127,5 @@ "3.12", "3.14" ], - "test_count": 381 + "test_count": 382 } diff --git a/docs/project.json b/docs/project.json index 41be9cb..3e86f84 100644 --- a/docs/project.json +++ b/docs/project.json @@ -1,6 +1,6 @@ { "format": 1, - "development_status": "stable", + "development_status": "preview", "stable_release": { "version": "7.0.0", "tag": "v7.0.0", diff --git a/mind.py b/mind.py index 272d451..a21bfd1 100644 --- a/mind.py +++ b/mind.py @@ -31,7 +31,7 @@ from collections import Counter, defaultdict, deque from contextlib import contextmanager -__version__ = "7.0.0" +__version__ = "7.0.1.dev0" # ──────────────────────────────────────────────────────────────── # Tunables (see docs/DESIGN.md for the reasoning behind each value) diff --git a/src/mind/00_prelude.py b/src/mind/00_prelude.py index 048c209..b8dfb85 100644 --- a/src/mind/00_prelude.py +++ b/src/mind/00_prelude.py @@ -31,7 +31,7 @@ from collections import Counter, defaultdict, deque from contextlib import contextmanager -__version__ = "7.0.0" +__version__ = "7.0.1.dev0" # ──────────────────────────────────────────────────────────────── # Tunables (see docs/DESIGN.md for the reasoning behind each value) diff --git a/tests/test_claims.py b/tests/test_claims.py index 8bf0d39..0ffa64f 100644 --- a/tests/test_claims.py +++ b/tests/test_claims.py @@ -1,5 +1,4 @@ """Claims-as-code tests for generated docs and public evidence.""" -import hashlib import importlib.util import json import unittest @@ -19,8 +18,7 @@ def test_generated_claims_are_current_and_valid(self): def test_public_results_share_clean_artifact_provenance(self): facts = CLAIMS.computed_facts() - expected_hash = hashlib.sha256( - (ROOT / "mind.py").read_bytes()).hexdigest() + expected_hash = CLAIMS.public_result_artifact_sha256(facts) self.assertEqual(len(facts["public_results"]), 8) for relative in facts["public_results"]: @@ -32,6 +30,20 @@ def test_public_results_share_clean_artifact_provenance(self): provenance["mind_sha256"], expected_hash, relative) self.assertNotIn("--json-out", result.get("command", "")) + def test_preview_evidence_remains_bound_to_stable_release(self): + facts = { + "development_status": "preview", + "artifact_sha256": "development-bytes", + "stable_release": {"mind_sha256": "stable-bytes"}, + } + self.assertEqual( + CLAIMS.public_result_artifact_sha256(facts), "stable-bytes") + + facts["development_status"] = "stable" + self.assertEqual( + CLAIMS.public_result_artifact_sha256(facts), + "development-bytes") + def test_scoreboard_discloses_scope_and_links_every_report(self): english = (ROOT / "README.md").read_text("utf-8") arabic = (ROOT / "README.ar.md").read_text("utf-8") diff --git a/tools/claims.py b/tools/claims.py index 5fb40a6..dc1cd7c 100644 --- a/tools/claims.py +++ b/tools/claims.py @@ -189,6 +189,13 @@ def computed_facts(): return facts +def public_result_artifact_sha256(facts): + """Bind release evidence to stable bytes while main is a preview.""" + if facts["development_status"] == "preview": + return facts["stable_release"]["mind_sha256"] + return facts["artifact_sha256"] + + def facts_block(facts, language): stable = facts["stable_release"] if language == "ar": @@ -502,7 +509,8 @@ def validate_docs(facts): if not re.fullmatch( r"[0-9a-f]{40}", str(provenance.get("commit", ""))): errors.append("invalid commit provenance in %s" % relative) - if provenance.get("mind_sha256") != facts["artifact_sha256"]: + if provenance.get("mind_sha256") != \ + public_result_artifact_sha256(facts): errors.append("artifact hash mismatch in %s" % relative) if "--json-out" in str(data.get("command", "")): errors.append("output path retained in command: %s" % relative)