Record complete corpus provenance distribution and G6 evidence
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a070b5-4994-7271-bd8b-7c3dbcedec4b
This commit is contained in:
parent
3005a28b0a
commit
1d02c83051
6 changed files with 3665 additions and 5 deletions
|
|
@ -15,8 +15,8 @@
|
|||
| task | CFED-WP-0001-T04 | done | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T05 | done | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T06 | done | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T07 | todo | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T08 | wait | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T07 | done | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T08 | todo | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T09 | wait | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T10 | wait | — | workplans/CFED-WP-0001-foundation.md |
|
||||
| task | CFED-WP-0001-T11 | done | — | workplans/CFED-WP-0001-foundation.md |
|
||||
|
|
|
|||
52
docs/evidence/2026-09-06-corpus-distribution.md
Normal file
52
docs/evidence/2026-09-06-corpus-distribution.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# Corpus distribution — 2026-09-06
|
||||
|
||||
CFED-WP-0001-T07 is implemented by INFO-WP-0024 and COMMERCE-WP-0003.
|
||||
The 45-file research/terminology/scenario corpus is pinned at CommerceCanon
|
||||
commit `8a07292dd78d094151f165d3ac1dfc7512114308`. Original files remain unchanged.
|
||||
|
||||
Destination assimilation workspaces contain 69 byte-identical snapshots:
|
||||
45 in InfoTechCanon (technical concepts and imported technical context from the
|
||||
commercial research) and 24 in CommerceCanon (commercial research, shared B2B
|
||||
provisioning context, indexes, terminology and scenarios). Per-model reading
|
||||
indexes identify the destination interest. Shared terminology rows, conflict
|
||||
sections and scenarios are partitioned into 153 exact fragments with line ranges
|
||||
and hashes. Full source context is retained beside the views.
|
||||
|
||||
The machine-readable [distribution ledger](../../ledger/corpus-distribution.json)
|
||||
records every source, digest, model interest, destination path and fragment.
|
||||
Each native workspace has its scoped manifest, schema-valid assimilation record,
|
||||
source summary, reused concept extraction/mappings, comparison matrix, proposed
|
||||
changes (none), open-question status and decision rationale. Disposition is
|
||||
observe: this distributes completed research under accepted ADR-006 and the
|
||||
user-authorized T07, without adopting new domain definitions. No source content
|
||||
was silently revised, re-researched or claimed current.
|
||||
|
||||
Historical Family-as-collective, source/assertion conflations, product terminology
|
||||
and obsolete review queues remain visible but are explicitly superseded by the
|
||||
accepted ownership and current draft models. Old scenario satisfiability claims
|
||||
are not current conformance results. T08/T09/T10 retain live interface, fleet and
|
||||
residual work; no speculative Family model work is created.
|
||||
|
||||
Reproduce (Python 3, PyYAML and jsonschema):
|
||||
|
||||
```bash
|
||||
python3 tools/validate_corpus.py --commerce-repo ../commerce-canon --info-tech-repo ../info-tech-canon
|
||||
python3 tools/validate_ownership.py --source-repo ../commerce-canon
|
||||
```
|
||||
|
||||
G6 check: 45 sources, 69 snapshots, 153 exact fragments, 479 workspace links;
|
||||
zero unrouted sources or changed originals. InfoTechCanon adds one observed
|
||||
assimilation retrieval artifact and remains at 14 models; its metadata patch
|
||||
release includes a change record. Final checks and publication receipts follow.
|
||||
|
||||
Final verification: InfoTechCanon **46 tests pass**, generated consistency, canon
|
||||
and small-saas profile checks pass. Published InfoTechCanon commit `372f671`;
|
||||
CommerceCanon implementation `8a89a68`, published/reconciled commit
|
||||
`bc67e1f25b140ecb60d1439de984f8361acabc32` (primary/railiance01, matching
|
||||
expected/derived commits, no refusals or retirements).
|
||||
|
||||
Native workplan UUIDs: INFO-WP-0024 `3bea30f6-8640-5c16-b782-8258babdba35`,
|
||||
COMMERCE-WP-0003 `3010a646-4e26-56bb-9fd2-327bb59ebea5`. Decision
|
||||
`5afcdb1c-10a9-4a84-b769-92fa025c91b8` records the observe/routing rationale.
|
||||
Required synchronization passed, with existing classification/prefix advisories.
|
||||
Progress logged to both native workplans and the project. Project: 10/13 done.
|
||||
|
|
@ -66,3 +66,8 @@ These are implementation requirements in the existing live workplan, not
|
|||
untracked residuals. The ledger check supplies G2 validation evidence; accepted
|
||||
project completion and proof of zero duplicate published definitions remain
|
||||
separate review gates.
|
||||
|
||||
The [corpus distribution ledger](corpus-distribution.json) records T07's frozen
|
||||
research destinations and exact shared fragments. Reproduce G6 with
|
||||
`python3 tools/validate_corpus.py --commerce-repo ../commerce-canon --info-tech-repo ../info-tech-canon`
|
||||
from the project root. Historical source assertions are not current definitions.
|
||||
|
|
|
|||
3519
ledger/corpus-distribution.json
Normal file
3519
ledger/corpus-distribution.json
Normal file
File diff suppressed because it is too large
Load diff
75
tools/validate_corpus.py
Normal file
75
tools/validate_corpus.py
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
"""Verify G6 source coverage, frozen snapshots, and exact destination fragments."""
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
import jsonschema
|
||||
import yaml
|
||||
|
||||
|
||||
def validate(project, commerce, info):
|
||||
manifest = json.loads((project / 'ledger/corpus-distribution.json').read_text())
|
||||
roots = {'commerce-canon': commerce, 'info-tech-canon': info}
|
||||
base = 'infospace/assimilation/canon-federation'
|
||||
commit = manifest['source_commit']
|
||||
paths = subprocess.check_output(['git', 'ls-tree', '-r', '--name-only', commit, '--', 'research', 'terminology', 'scenarios'], cwd=commerce, text=True).splitlines()
|
||||
listed = [row['source_path'] for row in manifest['files']]
|
||||
assert set(paths) == set(listed) and len(paths) == len(listed), 'Incomplete or duplicate corpus coverage'
|
||||
original = {}
|
||||
copies = 0
|
||||
for row in manifest['files']:
|
||||
path = row['source_path']
|
||||
data = subprocess.check_output(['git', 'show', commit + ':' + path], cwd=commerce)
|
||||
original[path] = data
|
||||
assert hashlib.sha256(data).hexdigest() == row['sha256'], 'Invalid source digest: ' + path
|
||||
assert (commerce / path).read_bytes() == data, 'Original changed: ' + path
|
||||
assert row['destinations'], 'Unrouted source: ' + path
|
||||
assert row['applicable_models'], 'Missing destination interest: ' + path
|
||||
for target in row['destinations']:
|
||||
assert target['path'] == base + '/source/' + path, target
|
||||
assert (roots[target['repo']] / target['path']).read_bytes() == data, target
|
||||
copies += 1
|
||||
schema = yaml.safe_load((info / 'infospace/schemas/assimilation.schema.yaml').read_text())
|
||||
links = 0
|
||||
for name, repo in roots.items():
|
||||
workspace = repo / base
|
||||
local = json.loads((workspace / 'distribution.json').read_text())
|
||||
expected = [row for row in manifest['files'] if any(d['repo'] == name for d in row['destinations'])]
|
||||
assert local['files'] == expected and local['source_commit'] == commit
|
||||
expected_views = [row for row in manifest['views'] if any(d['repo'] == name for d in row['destinations'])]
|
||||
assert local['views'] == expected_views
|
||||
actual_paths = {str(p.relative_to(workspace / 'source')) for p in (workspace / 'source').rglob('*') if p.is_file()}
|
||||
assert actual_paths == {row['source_path'] for row in expected}, name
|
||||
record = yaml.safe_load((workspace / 'assimilation.yaml').read_text())
|
||||
jsonschema.validate(record, schema)
|
||||
assert record['disposition'] == 'observe' and record['status'] == 'closed'
|
||||
assert set(record['source_files']) == {'source/' + row['source_path'] for row in expected}
|
||||
for path in workspace.rglob('*.md'):
|
||||
if 'source' in path.relative_to(workspace).parts: continue
|
||||
for link in re.findall(r'\]\(([^)]+)\)', path.read_text()):
|
||||
if '://' in link or link.startswith('#'): continue
|
||||
assert (path.parent / link.split('#')[0]).exists(), (path, link)
|
||||
links += 1
|
||||
for row in manifest['views']:
|
||||
source = original[row['source_path']].decode().splitlines(keepends=True)
|
||||
assert 1 <= row['start_line'] <= row['end_line'] <= len(source), row
|
||||
body = ''.join(source[row['start_line'] - 1:row['end_line']])
|
||||
assert hashlib.sha256(body.encode()).hexdigest() == row['sha256'], row
|
||||
for destination in row['destinations']:
|
||||
for model in destination['models']:
|
||||
view = (roots[destination['repo']] / base / 'views' / (model + '.md')).read_text()
|
||||
assert body in view and row['sha256'] in view, (row['title'], model)
|
||||
return {'source_files': len(paths), 'snapshot_copies': copies, 'exact_fragments': len(manifest['views']),
|
||||
'local_links': links, 'source_commit': commit, 'unrouted_sources': 0,
|
||||
'changed_originals': 0, 'status': 'pass'}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument('--commerce-repo', type=Path, required=True)
|
||||
p.add_argument('--info-tech-repo', type=Path, required=True)
|
||||
args = p.parse_args()
|
||||
print(json.dumps(validate(Path(__file__).resolve().parents[1], args.commerce_repo.resolve(), args.info_tech_repo.resolve()), indent=2))
|
||||
|
|
@ -8,7 +8,7 @@ status: active
|
|||
owner: codex
|
||||
topic_slug: canon-federation
|
||||
created: "2026-08-16"
|
||||
updated: "2026-09-05"
|
||||
updated: "2026-09-06"
|
||||
state_hub_workstream_id: "1c5615fc-03b7-5648-ba58-e828b8c0cb0f"
|
||||
---
|
||||
|
||||
|
|
@ -273,7 +273,7 @@ to establish social-collective destinations before corpus distribution.
|
|||
|
||||
```task
|
||||
id: CFED-WP-0001-T07
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "26a96020-49bb-5a5e-97d1-c478b83bffd0"
|
||||
```
|
||||
|
|
@ -286,11 +286,20 @@ concepts each supports. Split where a corpus area serves both.
|
|||
Preserve provenance — this is research that already ran; it is not re-derived.
|
||||
Record the disposition so gate **G6** is checkable.
|
||||
|
||||
**Result (2026-09-06):** [INFO-WP-0024](../../info-tech-canon/workplans/INFO-WP-0024-corpus-provenance.md)
|
||||
and [COMMERCE-WP-0003](../../commerce-canon/workplans/COMMERCE-WP-0003-corpus-provenance.md)
|
||||
distribute 45 source files into 69 frozen snapshots, with per-model reading
|
||||
indexes and 153 exact shared fragments. [Distribution ledger](../ledger/corpus-distribution.json)
|
||||
and [G6 evidence](../docs/evidence/2026-09-06-corpus-distribution.md) verify complete
|
||||
coverage, hashes and 479 links. Originals remain unchanged; disposition observe
|
||||
does not promote historical assertions. G6 passes; T08 is now todo.
|
||||
|
||||
|
||||
## Publish cross-canon interface cards
|
||||
|
||||
```task
|
||||
id: CFED-WP-0001-T08
|
||||
status: wait
|
||||
status: todo
|
||||
priority: medium
|
||||
state_hub_task_id: "e0558c32-415f-5563-bca2-438b35fa6b53"
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue