renderplan 0.1.2__tar.gz → 0.1.3__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.
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +6 -0
- renderplan-0.1.3/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/audit/commit-audit.yaml +39 -0
- renderplan-0.1.3/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/entries/entry-0001.md +31 -0
- renderplan-0.1.3/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/release.md +27 -0
- renderplan-0.1.3/.ledger/releaseledger/work/v0.1.3/audit-decisions.yaml +14 -0
- renderplan-0.1.3/.ledger/releaseledger/work/v0.1.3/audit.yaml +31 -0
- renderplan-0.1.3/.ledger/releaseledger/work/v0.1.3/entries.yaml +26 -0
- renderplan-0.1.3/.ledger/releaseledger/work/v0.1.3/evidence/8c9c937.patch +89 -0
- renderplan-0.1.3/.ledger/releaseledger/work/v0.1.3/evidence/manifest.json +27 -0
- renderplan-0.1.3/.ledger/releaseledger/work/v0.1.3/range.json +13 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/PKG-INFO +1 -1
- {renderplan-0.1.2 → renderplan-0.1.3}/docs/changelog.md +8 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/__init__.py +2 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/_version.py +3 -3
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/codec.py +7 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan.egg-info/PKG-INFO +1 -1
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan.egg-info/SOURCES.txt +10 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan.egg-info/scm_file_list.json +10 -0
- renderplan-0.1.3/renderplan.egg-info/scm_version.json +8 -0
- renderplan-0.1.3/tests/test_profile_reidentification.py +40 -0
- renderplan-0.1.2/renderplan.egg-info/scm_version.json +0 -8
- {renderplan-0.1.2 → renderplan-0.1.3}/.codecrate.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.github/workflows/codecov.yml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.github/workflows/pre-commit.yml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.github/workflows/python-publish.yml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.github/workflows/tests.yml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.gitignore +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/ledger.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/.ledger-project.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/config.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/audit/commit-audit.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0001.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0002.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0003.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0004.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/release.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/audit/commit-audit.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/entries/entry-0001.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/entries/entry-0002.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/release.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/audit/commit-audit.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0001.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/release.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/audit-decisions.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/audit.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/entries.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/evidence/0e39bcd.patch +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/evidence/f27def9.patch +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/evidence/manifest.json +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/range.json +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/audit-decisions.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/audit.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/entries.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/evidence/f88173e.patch +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/evidence/manifest.json +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/range.json +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/write.lock +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/taskledger/.ledger-project.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.ledger/taskledger/config.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/.pre-commit-config.yaml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/LICENSE +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/README.md +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/docs/Makefile +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/docs/conf.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/docs/make.bat +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/docs/make.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/docs/requirements.txt +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/examples/af_heart.renderprofile.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/examples/chapter.preflight.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/examples/chapter.render-manifest.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/examples/chapter.renderplan.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/examples/chapter.replan.preflight.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/pyproject.toml +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/__main__.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/_toml.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/cli.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/collection.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/contracts.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/errors.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/identity.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/model.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/paths.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/py.typed +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/set.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/validation.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan/version.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan.egg-info/dependency_links.txt +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan.egg-info/entry_points.txt +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan.egg-info/requires.txt +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/renderplan.egg-info/top_level.txt +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/setup.cfg +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/tests/test_collection.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/tests/test_contracts.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/tests/test_identity.py +0 -0
- {renderplan-0.1.2 → renderplan-0.1.3}/tests/test_renderplan_set.py +0 -0
{renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl
RENAMED
|
@@ -16,3 +16,9 @@
|
|
|
16
16
|
{"data":{"entry_ids":["entry-0001"],"synced_audit_rows":1},"event":"entry.batch_added","event_id":"event-0016","record_revisions":{"commit_audit_sheet":3,"entry:v0.1.2/entry-0001":1,"release:v0.1.2":3},"release_version":"v0.1.2","schema_version":2}
|
|
17
17
|
{"data":{"released_at":"2026-10-13"},"event":"release.finalized","event_id":"event-0017","record_revisions":{"release:v0.1.1":4},"release_version":"v0.1.1","schema_version":2}
|
|
18
18
|
{"data":{"released_at":"2026-10-14"},"event":"release.finalized","event_id":"event-0018","record_revisions":{"release:v0.1.2":4},"release_version":"v0.1.2","schema_version":2}
|
|
19
|
+
{"data":{"status":"planned"},"event":"release.created","event_id":"event-0019","record_revisions":{"release:v0.1.3":1},"release_version":"v0.1.3","schema_version":2}
|
|
20
|
+
{"data":{"fields":["git_base_ref","git_base_sha","git_commit_count","git_head_ref","git_head_sha","git_range"]},"event":"release.updated","event_id":"event-0020","record_revisions":{"release:v0.1.3":2},"release_version":"v0.1.3","schema_version":2}
|
|
21
|
+
{"data":{"row_count":1},"event":"audit.created","event_id":"event-0021","record_revisions":{"commit_audit_sheet":1},"release_version":"v0.1.3","schema_version":2}
|
|
22
|
+
{"data":{"updated_rows":1},"event":"audit.updated","event_id":"event-0022","record_revisions":{"commit_audit_sheet":2},"release_version":"v0.1.3","schema_version":2}
|
|
23
|
+
{"data":{"entry_ids":["entry-0001"],"synced_audit_rows":1},"event":"entry.batch_added","event_id":"event-0023","record_revisions":{"commit_audit_sheet":3,"entry:v0.1.3/entry-0001":1,"release:v0.1.3":3},"release_version":"v0.1.3","schema_version":2}
|
|
24
|
+
{"data":{"released_at":"2026-10-25"},"event":"release.finalized","event_id":"event-0024","record_revisions":{"release:v0.1.3":4},"release_version":"v0.1.3","schema_version":2}
|
renderplan-0.1.3/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/audit/commit-audit.yaml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 3
|
|
6
|
+
release_version: v0.1.3
|
|
7
|
+
git_base_ref: v0.1.2
|
|
8
|
+
git_base_sha: c2981a645889c974f2f7dc8b93ee8c3828655d9d
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: 8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
11
|
+
git_range: c2981a645889c974f2f7dc8b93ee8c3828655d9d..8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
12
|
+
commit_count: 1
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
15
|
+
source_ref: git:8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
16
|
+
short_sha: 8c9c937
|
|
17
|
+
changed_paths:
|
|
18
|
+
- renderplan/__init__.py
|
|
19
|
+
- renderplan/codec.py
|
|
20
|
+
- tests/test_profile_reidentification.py
|
|
21
|
+
stats:
|
|
22
|
+
files_changed: 3
|
|
23
|
+
insertions: 49
|
|
24
|
+
deletions: 0
|
|
25
|
+
inspected: true
|
|
26
|
+
inspected_paths:
|
|
27
|
+
- renderplan/__init__.py
|
|
28
|
+
- renderplan/codec.py
|
|
29
|
+
- tests/test_profile_reidentification.py
|
|
30
|
+
observed_behavior:
|
|
31
|
+
Added a public loader that clears only a stored profile identity
|
|
32
|
+
before validation, allowing re-identification while preserving validation of the
|
|
33
|
+
remaining profile data; added coverage for stale identities and malformed TOML.
|
|
34
|
+
public_impact: public
|
|
35
|
+
decision: accepted
|
|
36
|
+
stale: false
|
|
37
|
+
evidence_subject: "feat: recreate profile_id"
|
|
38
|
+
target_entry_id: entry-0001
|
|
39
|
+
notes: ""
|
renderplan-0.1.3/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/entries/entry-0001.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0001
|
|
8
|
+
release_version: v0.1.3
|
|
9
|
+
kind: added
|
|
10
|
+
summary:
|
|
11
|
+
Added profile loading for re-identification while preserving validation of
|
|
12
|
+
other profile data
|
|
13
|
+
status: accepted
|
|
14
|
+
audience: null
|
|
15
|
+
scopes: []
|
|
16
|
+
source_refs:
|
|
17
|
+
- git:8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
18
|
+
paths:
|
|
19
|
+
- renderplan/__init__.py
|
|
20
|
+
- renderplan/codec.py
|
|
21
|
+
- tests/test_profile_reidentification.py
|
|
22
|
+
issues: []
|
|
23
|
+
prs: []
|
|
24
|
+
sources:
|
|
25
|
+
- git:8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
26
|
+
contributors:
|
|
27
|
+
- "@holgern"
|
|
28
|
+
breaking: false
|
|
29
|
+
internal: false
|
|
30
|
+
order: 1
|
|
31
|
+
---
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 4
|
|
7
|
+
version: v0.1.3
|
|
8
|
+
status: released
|
|
9
|
+
history_state: curated
|
|
10
|
+
title: null
|
|
11
|
+
released_at: "2026-10-25"
|
|
12
|
+
previous_version: v0.1.2
|
|
13
|
+
cancel_reason: null
|
|
14
|
+
superseded_by: null
|
|
15
|
+
changelog_file: docs/changelog.md
|
|
16
|
+
boundary_ref: null
|
|
17
|
+
source_refs: []
|
|
18
|
+
source_count: null
|
|
19
|
+
entry_count: 1
|
|
20
|
+
artifact_count: 0
|
|
21
|
+
git_base_ref: v0.1.2
|
|
22
|
+
git_base_sha: c2981a645889c974f2f7dc8b93ee8c3828655d9d
|
|
23
|
+
git_head_ref: HEAD
|
|
24
|
+
git_head_sha: 8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
25
|
+
git_range: c2981a645889c974f2f7dc8b93ee8c3828655d9d..8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
26
|
+
git_commit_count: 1
|
|
27
|
+
---
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
rows:
|
|
2
|
+
- sha: 8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
3
|
+
inspected: true
|
|
4
|
+
inspected_paths:
|
|
5
|
+
- renderplan/__init__.py
|
|
6
|
+
- renderplan/codec.py
|
|
7
|
+
- tests/test_profile_reidentification.py
|
|
8
|
+
observed_behavior: "Added a public loader that clears only a stored profile identity before validation, allowing re-identification while preserving validation of the remaining profile data; added coverage for stale identities and malformed TOML."
|
|
9
|
+
public_impact: public
|
|
10
|
+
decision: accepted
|
|
11
|
+
target_entry_key: null
|
|
12
|
+
target_entry_id: null
|
|
13
|
+
notes: ""
|
|
14
|
+
stale: false
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 1
|
|
6
|
+
release_version: v0.1.3
|
|
7
|
+
git_base_ref: v0.1.2
|
|
8
|
+
git_base_sha: c2981a645889c974f2f7dc8b93ee8c3828655d9d
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: 8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
11
|
+
git_range: c2981a645889c974f2f7dc8b93ee8c3828655d9d..8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
12
|
+
commit_count: 1
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
15
|
+
source_ref: git:8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
16
|
+
short_sha: 8c9c937
|
|
17
|
+
changed_paths:
|
|
18
|
+
- renderplan/__init__.py
|
|
19
|
+
- renderplan/codec.py
|
|
20
|
+
- tests/test_profile_reidentification.py
|
|
21
|
+
stats:
|
|
22
|
+
files_changed: 3
|
|
23
|
+
insertions: 49
|
|
24
|
+
deletions: 0
|
|
25
|
+
inspected: false
|
|
26
|
+
inspected_paths: []
|
|
27
|
+
observed_behavior: ""
|
|
28
|
+
public_impact: unknown
|
|
29
|
+
decision: needs_review
|
|
30
|
+
stale: false
|
|
31
|
+
evidence_subject: "feat: recreate profile_id"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
schema: releaseledger.entry-batch.v1
|
|
2
|
+
operation: create
|
|
3
|
+
schema_version: 1
|
|
4
|
+
object_type: release_entry_batch
|
|
5
|
+
release_version: v0.1.3
|
|
6
|
+
git_base_ref: c2981a645889c974f2f7dc8b93ee8c3828655d9d
|
|
7
|
+
git_base_sha: c2981a645889c974f2f7dc8b93ee8c3828655d9d
|
|
8
|
+
git_head_ref: 8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
9
|
+
git_head_sha: 8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
10
|
+
include_merges: nontrivial
|
|
11
|
+
entries:
|
|
12
|
+
- kind: added
|
|
13
|
+
summary: "Added profile loading for re-identification while preserving validation of other profile data"
|
|
14
|
+
status: accepted
|
|
15
|
+
source_refs:
|
|
16
|
+
- git:8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
17
|
+
paths:
|
|
18
|
+
- renderplan/__init__.py
|
|
19
|
+
- renderplan/codec.py
|
|
20
|
+
- tests/test_profile_reidentification.py
|
|
21
|
+
sources:
|
|
22
|
+
- git:8c9c93738b8e26a66b25b0cbefc04c070f1ec227
|
|
23
|
+
prs: []
|
|
24
|
+
issues: []
|
|
25
|
+
contributors:
|
|
26
|
+
- "@holgern"
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
renderplan/__init__.py | 2 ++
|
|
2
|
+
renderplan/codec.py | 7 ++++++
|
|
3
|
+
tests/test_profile_reidentification.py | 40 ++++++++++++++++++++++++++++++++++
|
|
4
|
+
3 files changed, 49 insertions(+)
|
|
5
|
+
|
|
6
|
+
diff --git a/renderplan/__init__.py b/renderplan/__init__.py
|
|
7
|
+
index bfc7f94..fb1ae5e 100644
|
|
8
|
+
--- a/renderplan/__init__.py
|
|
9
|
+
+++ b/renderplan/__init__.py
|
|
10
|
+
@@ -4,6 +4,7 @@ from .codec import (
|
|
11
|
+
load_plan,
|
|
12
|
+
load_preflight,
|
|
13
|
+
load_profile,
|
|
14
|
+
+ load_profile_for_reidentification,
|
|
15
|
+
save_manifest,
|
|
16
|
+
save_plan,
|
|
17
|
+
save_preflight,
|
|
18
|
+
@@ -102,6 +103,7 @@ __all__ = [
|
|
19
|
+
"load_plan",
|
|
20
|
+
"load_preflight",
|
|
21
|
+
"load_profile",
|
|
22
|
+
+ "load_profile_for_reidentification",
|
|
23
|
+
"load_renderplan_set",
|
|
24
|
+
"renderplan_set_from_dict",
|
|
25
|
+
"renderplan_set_to_dict",
|
|
26
|
+
diff --git a/renderplan/codec.py b/renderplan/codec.py
|
|
27
|
+
index 060982a..b445a1f 100644
|
|
28
|
+
--- a/renderplan/codec.py
|
|
29
|
+
+++ b/renderplan/codec.py
|
|
30
|
+
@@ -649,6 +649,13 @@ def load_profile(path: str | Path) -> RenderProfile:
|
|
31
|
+
return profile_from_dict(_read(path))
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
+def load_profile_for_reidentification(path: str | Path) -> RenderProfile:
|
|
35
|
+
+ """Load and validate a profile while ignoring only its stored identity."""
|
|
36
|
+
+ raw = dict(_read(path))
|
|
37
|
+
+ raw["profile_id"] = None
|
|
38
|
+
+ return profile_from_dict(raw)
|
|
39
|
+
+
|
|
40
|
+
+
|
|
41
|
+
def save_profile(profile: RenderProfile, path: str | Path) -> Path:
|
|
42
|
+
return _write(path, profile_to_dict(profile.with_identity()))
|
|
43
|
+
|
|
44
|
+
diff --git a/tests/test_profile_reidentification.py b/tests/test_profile_reidentification.py
|
|
45
|
+
new file mode 100644
|
|
46
|
+
index 0000000..eb45a35
|
|
47
|
+
--- /dev/null
|
|
48
|
+
+++ b/tests/test_profile_reidentification.py
|
|
49
|
+
@@ -0,0 +1,40 @@
|
|
50
|
+
+from __future__ import annotations
|
|
51
|
+
+
|
|
52
|
+
+from pathlib import Path
|
|
53
|
+
+
|
|
54
|
+
+import pytest
|
|
55
|
+
+
|
|
56
|
+
+from renderplan import (
|
|
57
|
+
+ CodecError,
|
|
58
|
+
+ ValidationError,
|
|
59
|
+
+ load_profile,
|
|
60
|
+
+ load_profile_for_reidentification,
|
|
61
|
+
+)
|
|
62
|
+
+
|
|
63
|
+
+
|
|
64
|
+
+def test_reidentification_loader_ignores_only_stored_profile_id(tmp_path: Path) -> None:
|
|
65
|
+
+ source = Path(__file__).parents[1] / "examples/af_heart.renderprofile.toml"
|
|
66
|
+
+ content = source.read_text(encoding="utf-8")
|
|
67
|
+
+
|
|
68
|
+
+ # Replace the complete stored digest without relying on its current value.
|
|
69
|
+
+ lines = content.splitlines()
|
|
70
|
+
+ id_line = next(index for index, line in enumerate(lines) if line.startswith("profile_id ="))
|
|
71
|
+
+ lines[id_line] = 'profile_id = "sha256:' + "0" * 64 + '"'
|
|
72
|
+
+ path = tmp_path / "stale.renderprofile.toml"
|
|
73
|
+
+ path.write_text("\n".join(lines) + "\n", encoding="utf-8")
|
|
74
|
+
+
|
|
75
|
+
+ with pytest.raises(ValidationError):
|
|
76
|
+
+ load_profile(path)
|
|
77
|
+
+
|
|
78
|
+
+ profile = load_profile_for_reidentification(path)
|
|
79
|
+
+ assert profile.profile_id is None
|
|
80
|
+
+ repaired = profile.with_identity()
|
|
81
|
+
+ assert repaired.profile_id == repaired.computed_id()
|
|
82
|
+
+
|
|
83
|
+
+
|
|
84
|
+
+def test_reidentification_loader_still_rejects_malformed_toml(tmp_path: Path) -> None:
|
|
85
|
+
+ path = tmp_path / "invalid.renderprofile.toml"
|
|
86
|
+
+ path.write_text("not = [valid", encoding="utf-8")
|
|
87
|
+
+
|
|
88
|
+
+ with pytest.raises(CodecError):
|
|
89
|
+
+ load_profile_for_reidentification(path)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"candidate_count": 1,
|
|
3
|
+
"candidates": [
|
|
4
|
+
{
|
|
5
|
+
"additions": 49,
|
|
6
|
+
"deletions": 0,
|
|
7
|
+
"patch_file": "8c9c937.patch",
|
|
8
|
+
"patch_sha256": "d7874770d8f33fb0aee2f49623e34d18ca931becbe00f18830d0c5c51dcb4bc8",
|
|
9
|
+
"paths": [
|
|
10
|
+
"renderplan/__init__.py",
|
|
11
|
+
"renderplan/codec.py",
|
|
12
|
+
"tests/test_profile_reidentification.py"
|
|
13
|
+
],
|
|
14
|
+
"sha": "8c9c93738b8e26a66b25b0cbefc04c070f1ec227",
|
|
15
|
+
"short_sha": "8c9c937",
|
|
16
|
+
"source_ref": "git:8c9c93738b8e26a66b25b0cbefc04c070f1ec227"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"git_base_ref": "c2981a645889c974f2f7dc8b93ee8c3828655d9d",
|
|
20
|
+
"git_base_sha": "c2981a645889c974f2f7dc8b93ee8c3828655d9d",
|
|
21
|
+
"git_head_ref": "8c9c93738b8e26a66b25b0cbefc04c070f1ec227",
|
|
22
|
+
"git_head_sha": "8c9c93738b8e26a66b25b0cbefc04c070f1ec227",
|
|
23
|
+
"include_merges": "nontrivial",
|
|
24
|
+
"object_type": "git_evidence_manifest",
|
|
25
|
+
"release_version": "v0.1.3",
|
|
26
|
+
"schema_version": 1
|
|
27
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"base_ref": "c2981a645889c974f2f7dc8b93ee8c3828655d9d",
|
|
3
|
+
"base_sha": "c2981a645889c974f2f7dc8b93ee8c3828655d9d",
|
|
4
|
+
"candidate_count": 1,
|
|
5
|
+
"commit_count": 1,
|
|
6
|
+
"head_ref": "8c9c93738b8e26a66b25b0cbefc04c070f1ec227",
|
|
7
|
+
"head_sha": "8c9c93738b8e26a66b25b0cbefc04c070f1ec227",
|
|
8
|
+
"include_merges": "nontrivial",
|
|
9
|
+
"kind": "git_range_summary",
|
|
10
|
+
"merge_commit_count": 0,
|
|
11
|
+
"merge_commits_skipped": 0,
|
|
12
|
+
"range": "c2981a645889c974f2f7dc8b93ee8c3828655d9d..8c9c93738b8e26a66b25b0cbefc04c070f1ec227"
|
|
13
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: renderplan
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Engine-neutral render profile, plan, preflight, manifest, and collection contracts for speech pipelines.
|
|
5
5
|
Classifier: Development Status :: 3 - Alpha
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -4,6 +4,7 @@ from .codec import (
|
|
|
4
4
|
load_plan,
|
|
5
5
|
load_preflight,
|
|
6
6
|
load_profile,
|
|
7
|
+
load_profile_for_reidentification,
|
|
7
8
|
save_manifest,
|
|
8
9
|
save_plan,
|
|
9
10
|
save_preflight,
|
|
@@ -102,6 +103,7 @@ __all__ = [
|
|
|
102
103
|
"load_plan",
|
|
103
104
|
"load_preflight",
|
|
104
105
|
"load_profile",
|
|
106
|
+
"load_profile_for_reidentification",
|
|
105
107
|
"load_renderplan_set",
|
|
106
108
|
"renderplan_set_from_dict",
|
|
107
109
|
"renderplan_set_to_dict",
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.1.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
21
|
+
__version__ = version = '0.1.3'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 3)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g3d1e5588a'
|
|
@@ -649,6 +649,13 @@ def load_profile(path: str | Path) -> RenderProfile:
|
|
|
649
649
|
return profile_from_dict(_read(path))
|
|
650
650
|
|
|
651
651
|
|
|
652
|
+
def load_profile_for_reidentification(path: str | Path) -> RenderProfile:
|
|
653
|
+
"""Load and validate a profile while ignoring only its stored identity."""
|
|
654
|
+
raw = dict(_read(path))
|
|
655
|
+
raw["profile_id"] = None
|
|
656
|
+
return profile_from_dict(raw)
|
|
657
|
+
|
|
658
|
+
|
|
652
659
|
def save_profile(profile: RenderProfile, path: str | Path) -> Path:
|
|
653
660
|
return _write(path, profile_to_dict(profile.with_identity()))
|
|
654
661
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: renderplan
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Engine-neutral render profile, plan, preflight, manifest, and collection contracts for speech pipelines.
|
|
5
5
|
Classifier: Development Status :: 3 - Alpha
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -27,6 +27,9 @@ pyproject.toml
|
|
|
27
27
|
.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/release.md
|
|
28
28
|
.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/audit/commit-audit.yaml
|
|
29
29
|
.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0001.md
|
|
30
|
+
.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/release.md
|
|
31
|
+
.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/audit/commit-audit.yaml
|
|
32
|
+
.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/entries/entry-0001.md
|
|
30
33
|
.ledger/releaseledger/work/v0.1.1/audit-decisions.yaml
|
|
31
34
|
.ledger/releaseledger/work/v0.1.1/audit.yaml
|
|
32
35
|
.ledger/releaseledger/work/v0.1.1/entries.yaml
|
|
@@ -40,6 +43,12 @@ pyproject.toml
|
|
|
40
43
|
.ledger/releaseledger/work/v0.1.2/range.json
|
|
41
44
|
.ledger/releaseledger/work/v0.1.2/evidence/f88173e.patch
|
|
42
45
|
.ledger/releaseledger/work/v0.1.2/evidence/manifest.json
|
|
46
|
+
.ledger/releaseledger/work/v0.1.3/audit-decisions.yaml
|
|
47
|
+
.ledger/releaseledger/work/v0.1.3/audit.yaml
|
|
48
|
+
.ledger/releaseledger/work/v0.1.3/entries.yaml
|
|
49
|
+
.ledger/releaseledger/work/v0.1.3/range.json
|
|
50
|
+
.ledger/releaseledger/work/v0.1.3/evidence/8c9c937.patch
|
|
51
|
+
.ledger/releaseledger/work/v0.1.3/evidence/manifest.json
|
|
43
52
|
.ledger/taskledger/.ledger-project.toml
|
|
44
53
|
.ledger/taskledger/config.toml
|
|
45
54
|
docs/Makefile
|
|
@@ -80,4 +89,5 @@ renderplan.egg-info/top_level.txt
|
|
|
80
89
|
tests/test_collection.py
|
|
81
90
|
tests/test_contracts.py
|
|
82
91
|
tests/test_identity.py
|
|
92
|
+
tests/test_profile_reidentification.py
|
|
83
93
|
tests/test_renderplan_set.py
|
|
@@ -24,6 +24,9 @@
|
|
|
24
24
|
".ledger/releaseledger/data/ledgers/main/releases/v0.1.2/audit/commit-audit.yaml",
|
|
25
25
|
".ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0001.md",
|
|
26
26
|
".ledger/releaseledger/data/ledgers/main/releases/v0.1.2/release.md",
|
|
27
|
+
".ledger/releaseledger/data/ledgers/main/releases/v0.1.3/audit/commit-audit.yaml",
|
|
28
|
+
".ledger/releaseledger/data/ledgers/main/releases/v0.1.3/entries/entry-0001.md",
|
|
29
|
+
".ledger/releaseledger/data/ledgers/main/releases/v0.1.3/release.md",
|
|
27
30
|
".ledger/releaseledger/work/v0.1.1/audit-decisions.yaml",
|
|
28
31
|
".ledger/releaseledger/work/v0.1.1/audit.yaml",
|
|
29
32
|
".ledger/releaseledger/work/v0.1.1/entries.yaml",
|
|
@@ -37,6 +40,12 @@
|
|
|
37
40
|
".ledger/releaseledger/work/v0.1.2/evidence/f88173e.patch",
|
|
38
41
|
".ledger/releaseledger/work/v0.1.2/evidence/manifest.json",
|
|
39
42
|
".ledger/releaseledger/work/v0.1.2/range.json",
|
|
43
|
+
".ledger/releaseledger/work/v0.1.3/audit-decisions.yaml",
|
|
44
|
+
".ledger/releaseledger/work/v0.1.3/audit.yaml",
|
|
45
|
+
".ledger/releaseledger/work/v0.1.3/entries.yaml",
|
|
46
|
+
".ledger/releaseledger/work/v0.1.3/evidence/8c9c937.patch",
|
|
47
|
+
".ledger/releaseledger/work/v0.1.3/evidence/manifest.json",
|
|
48
|
+
".ledger/releaseledger/work/v0.1.3/range.json",
|
|
40
49
|
".ledger/releaseledger/write.lock",
|
|
41
50
|
".ledger/taskledger/.ledger-project.toml",
|
|
42
51
|
".ledger/taskledger/config.toml",
|
|
@@ -73,6 +82,7 @@
|
|
|
73
82
|
"tests/test_collection.py",
|
|
74
83
|
"tests/test_contracts.py",
|
|
75
84
|
"tests/test_identity.py",
|
|
85
|
+
"tests/test_profile_reidentification.py",
|
|
76
86
|
"tests/test_renderplan_set.py"
|
|
77
87
|
]
|
|
78
88
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
from renderplan import (
|
|
8
|
+
CodecError,
|
|
9
|
+
ValidationError,
|
|
10
|
+
load_profile,
|
|
11
|
+
load_profile_for_reidentification,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def test_reidentification_loader_ignores_only_stored_profile_id(tmp_path: Path) -> None:
|
|
16
|
+
source = Path(__file__).parents[1] / "examples/af_heart.renderprofile.toml"
|
|
17
|
+
content = source.read_text(encoding="utf-8")
|
|
18
|
+
|
|
19
|
+
# Replace the complete stored digest without relying on its current value.
|
|
20
|
+
lines = content.splitlines()
|
|
21
|
+
id_line = next(index for index, line in enumerate(lines) if line.startswith("profile_id ="))
|
|
22
|
+
lines[id_line] = 'profile_id = "sha256:' + "0" * 64 + '"'
|
|
23
|
+
path = tmp_path / "stale.renderprofile.toml"
|
|
24
|
+
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
|
|
25
|
+
|
|
26
|
+
with pytest.raises(ValidationError):
|
|
27
|
+
load_profile(path)
|
|
28
|
+
|
|
29
|
+
profile = load_profile_for_reidentification(path)
|
|
30
|
+
assert profile.profile_id is None
|
|
31
|
+
repaired = profile.with_identity()
|
|
32
|
+
assert repaired.profile_id == repaired.computed_id()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_reidentification_loader_still_rejects_malformed_toml(tmp_path: Path) -> None:
|
|
36
|
+
path = tmp_path / "invalid.renderprofile.toml"
|
|
37
|
+
path.write_text("not = [valid", encoding="utf-8")
|
|
38
|
+
|
|
39
|
+
with pytest.raises(CodecError):
|
|
40
|
+
load_profile_for_reidentification(path)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/audit-decisions.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/evidence/0e39bcd.patch
RENAMED
|
File without changes
|
{renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/evidence/f27def9.patch
RENAMED
|
File without changes
|
{renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.1/evidence/manifest.json
RENAMED
|
File without changes
|
|
File without changes
|
{renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/audit-decisions.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/evidence/f88173e.patch
RENAMED
|
File without changes
|
{renderplan-0.1.2 → renderplan-0.1.3}/.ledger/releaseledger/work/v0.1.2/evidence/manifest.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|