Preserve the record. Keep the permission separate.
+Legal & Rights learning exercise · EVIDENCE-001 · Independent professional review: PENDING
+Educational and research material only. Not legal advice, a legal opinion, attorney-client representation, copyright clearance, trademark clearance, benefits determination, or housing eligibility determination. Laws, contract terms and program rules may change. Decisions concerning real people, property, income, employment or commercial rights require review of the applicable facts and governing documents by qualified professionals.
+Legal & Rights hub · AI-MUSIC-001 · ENTERPRISE-001 · Sources
+Inspect the sample
+Use fictional information only. No account, source recording or upload is required. Read the sample report as HTML or download the tagged, selectable-text PDF report. The report concerns a synthetic brief and a HOLD decision; its dates do not describe an artist's recording.
+
+Each CSV cell contains JSON, including quoted string values, so nested provenance and types survive a round trip. In analysis software, parse CSV and then decode each cell as JSON. The schema records explicit unknown metadata. The ZIP requires no PIXIE access and contains no real mail, media, medical, financial, benefit or housing evidence.
+Your task
+
+- Compare source creation/publication, acquisition and observation times. Name which are unknown.
+- Follow the custody events and appended correction. Explain why the older event remains.
+- Recompute the included synthetic brief's SHA-256 and compare the manifest. Explain what matching bytes cannot prove.
+- Separate composition, master, human contribution and permission records. Name the evidence missing before an actual upload or release.
+- Inspect each CSV and JSON collection. Check the source versions and review status; write a proceed/hold/choose-another decision using the existing capstone rubric.
+- For the enterprise case, identify which SSI, SSDI and housing records a qualified reviewer would need privately. Do not enter personal details into this page or GitHub.
+
+Done means a source-linked evidence record, a separate permissions decision and a feasible next action. Use the existing 24-point capstone rubric; no second grading engine is introduced.
+Worked answer
+The brief's creation/publication times are unknown. The acquisition/observation dates are explicitly fictional. EV-3 corrects the interpretation of EV-2 without deleting it. The hash confirms the included synthetic bytes only. It establishes neither the encountered recording's author nor permission. Both title chains and input/adaptation authority remain unresolved: HOLD the source processing/continuation and seek scoped review, or choose independent original music with authorized inputs.
+Export and privacy boundaries
+This standalone sample follows the PIXIE evidence specification. It is not a Creative Filing Library import archive. PR #55's local Library/ZIP candidate remains unmerged and needs physical iPad/Safari/VoiceOver/Files and owner acceptance. Any adapter must be separately reviewed after acceptance. Nothing in this page saves private records, connects accounts, syncs files or sends an enquiry.
+For private handling, preserve originals locally and use only specifically authorized, capability-tested PIXIE functionality. Public follow-up exports are not an evidence vault. No personal case has been ingested. PIXIE PR #12's security/release holds remain unchanged.
+PDF and device status
+PDF sample validation checks selectable text, language, tagged structure, headings/tables and bookmarks. This is evidence about this sample, not PDF/UA certification or arbitrary reports. Use HTML for adjustable reading/display controls. Physical iPad/Safari/VoiceOver/Files acceptance: NOT RUN. See the validation record.
+Request Professional Review / Corrections. Public discussion accepts cited corrections and synthetic examples only; never post personal evidence or credentials.
AI-MUSIC-001: synthetic provenance and HOLD report
Package LL-LEGAL-SAMPLE-1 · Schema 1.0.0 · Export 2026-11-09T07:57:13.234500+00:00
Independent professional review: PENDING
Executive summary
Keep the proposed continuation on HOLD. This package preserves one fictional text brief; it contains no artist recording, actual account export or personal evidence. Title and permission for the encountered recording remain unknown.
Scope and legal notice
Educational and research material only. Not legal advice, a legal opinion, attorney-client representation, copyright clearance, trademark clearance, benefits determination, or housing eligibility determination. Laws, contract terms and program rules may change. Decisions concerning real people, property, income, employment or commercial rights require review of the applicable facts and governing documents by qualified professionals.
Fictional exercise only. The scenario is a proposed use; no upload, generation, artist approval or benefits determination is asserted.
Chronological evidence timeline
Source creation: unknown. Source publication: unknown. The following date is a fictional exercise clock in UTC, not a source-recording time.
- EV-1 · 2026-11-01T12:00:00Z: Synthetic acquisition of the included text brief; source recording not acquired. Supersedes: unknown.
- EV-2 · 2026-11-01T12:00:00Z: Initial exercise note: source creation time not supplied. Supersedes: unknown.
- EV-3 · 2026-11-01T12:00:00Z: Clarification appended: observation is not original creation/publication; prior note retained. Supersedes: EV-2.
Verified bytes and unresolved claims
The included synthetic brief is text/plain. SHA-256 below identifies the included bytes; it does not authenticate an artist, establish ownership, prove when a work was created or authorize processing.
2d0f9085cf9d9619f1c7eec0ef894ce63e884baab590307f38e3ddb45706e72f
Original recording ownership, publication, source timestamps, account plan, feature and input permissions: unknown. The actual recording is excluded.
Contribution and rights matrix
Separate claims; no agreed ownership shares| Item | Evidence and status |
|---|
| Human contribution | Fictional creator proposes text direction. Protectable output expression not assessed. |
|---|
| AI output | Proposed only; no generated audio. |
|---|
| Composition and master | Separate holders and chains unknown; no transfer inferred. |
|---|
| Economics and credit | Subject to future agreement; no percentages assigned. |
|---|
Permissions and licensing requirements
Identify verified holders; obtain scope for acquisition, processing, adaptation, distribution and promotion; review contributor, sample/interpolation and voice rights as applicable. Record territory, term, platform feature/plan and commercial conditions. Paid access and credit alone do not establish permission.
Applicable authorities and source references
The Copyright Act separates underlying rights from new contributions. The Copyright Office authorship report distinguishes human expression from generation. Evidence authentication and byte integrity do not authorize use.
Professional-review questions and next action
- Who can document each title chain and processing/adaptation authority?
- What human expression could be protected in an actual result?
- Which exact platform feature, plan and source terms would govern?
- Are performer, publicity or jurisdiction-specific rights unresolved?
Decision: HOLD. Keep the encountered recording unprocessed while authority is absent; alternatively create independent music with authorized inputs and reassess. Take private evidence only to separately agreed authorized channels. Public review is not approval.
Portable inspection
Companion package.json, six JSON-cell CSV files, schema and manifest preserve the analytical fields. The manifest hashes all members except itself. The archive has an external SHA-256. This is an interchange sample, not a Library import. Read the accessible HTML alternative and downloads.
\ No newline at end of file
diff --git a/docs/legal-rights/report.pdf b/docs/legal-rights/report.pdf
new file mode 100644
index 0000000..ab5ec74
Binary files /dev/null and b/docs/legal-rights/report.pdf differ
diff --git a/docs/legal-rights/sample-v1.zip b/docs/legal-rights/sample-v1.zip
new file mode 100644
index 0000000..9fc2f6c
Binary files /dev/null and b/docs/legal-rights/sample-v1.zip differ
diff --git a/docs/legal-rights/sample-v1.zip.sha256 b/docs/legal-rights/sample-v1.zip.sha256
new file mode 100644
index 0000000..69ae52b
--- /dev/null
+++ b/docs/legal-rights/sample-v1.zip.sha256
@@ -0,0 +1 @@
+49774994dbb364acf8e867ac7e46c99ea1c73dc5c7c0182e7f27268c836e51dc sample-v1.zip
diff --git a/docs/legal-rights/synthetic/brief.txt b/docs/legal-rights/synthetic/brief.txt
new file mode 100644
index 0000000..bd883f6
--- /dev/null
+++ b/docs/legal-rights/synthetic/brief.txt
@@ -0,0 +1 @@
+Synthetic brief: use original sparse drums and leave dialogue space. No source audio.
diff --git a/docs/legal-rights/timeline.csv b/docs/legal-rights/timeline.csv
new file mode 100644
index 0000000..65d0306
--- /dev/null
+++ b/docs/legal-rights/timeline.csv
@@ -0,0 +1,4 @@
+event_id,artifact_id,case_id,kind,event_time,recorded_at,actor_claim,description,input_hash,output_hash,supersedes
+"""EV-1""","""AI-MUSIC-001-F1""","""AI-MUSIC-001""","""acquisition""","{""value"":""2026-11-01T12:00:00Z"",""timezone"":""UTC"",""clock_source"":""fictional exercise clock"",""basis"":""synthetic example; not a real observation""}","{""value"":""2026-11-01T12:00:00Z"",""timezone"":""UTC"",""clock_source"":""fictional exercise clock"",""basis"":""synthetic example; not a real observation""}","""Fictional custodian""","""Synthetic acquisition of the included text brief; source recording not acquired.""","""2d0f9085cf9d9619f1c7eec0ef894ce63e884baab590307f38e3ddb45706e72f""","""2d0f9085cf9d9619f1c7eec0ef894ce63e884baab590307f38e3ddb45706e72f""","""unknown"""
+"""EV-2""","""AI-MUSIC-001-F1""","""AI-MUSIC-001""","""observation""","{""value"":""2026-11-01T12:00:00Z"",""timezone"":""UTC"",""clock_source"":""fictional exercise clock"",""basis"":""synthetic example; not a real observation""}","{""value"":""2026-11-01T12:00:00Z"",""timezone"":""UTC"",""clock_source"":""fictional exercise clock"",""basis"":""synthetic example; not a real observation""}","""Fictional custodian""","""Initial exercise note: source creation time not supplied.""","""2d0f9085cf9d9619f1c7eec0ef894ce63e884baab590307f38e3ddb45706e72f""","""2d0f9085cf9d9619f1c7eec0ef894ce63e884baab590307f38e3ddb45706e72f""","""unknown"""
+"""EV-3""","""AI-MUSIC-001-F1""","""AI-MUSIC-001""","""correction""","{""value"":""2026-11-01T12:00:00Z"",""timezone"":""UTC"",""clock_source"":""fictional exercise clock"",""basis"":""synthetic example; not a real observation""}","{""value"":""2026-11-01T12:00:00Z"",""timezone"":""UTC"",""clock_source"":""fictional exercise clock"",""basis"":""synthetic example; not a real observation""}","""Fictional custodian""","""Clarification appended: observation is not original creation/publication; prior note retained.""","""2d0f9085cf9d9619f1c7eec0ef894ce63e884baab590307f38e3ddb45706e72f""","""2d0f9085cf9d9619f1c7eec0ef894ce63e884baab590307f38e3ddb45706e72f""","""EV-2"""
diff --git a/scripts/package-legal-evidence.py b/scripts/package-legal-evidence.py
new file mode 100644
index 0000000..21873b0
--- /dev/null
+++ b/scripts/package-legal-evidence.py
@@ -0,0 +1,51 @@
+"""Build/check only the checked-in public synthetic package. Never accepts private inputs.
+Run after rendering report.pdf: python3 scripts/package-legal-evidence.py [--check]
+No runtime dependency; this is not the held Creative Filing Library archive format.
+"""
+import csv,hashlib,io,json,pathlib,sys,zipfile
+ROOT=pathlib.Path(__file__).resolve().parents[1]/'docs/legal-rights'
+TABLES=('evidence','timeline','contributors','permissions','authorities','decisions')
+def digest(b):return hashlib.sha256(b).hexdigest()
+def csv_bytes(rows):
+ fields=list(rows[0]);f=io.StringIO(newline='');w=csv.DictWriter(f,fields,lineterminator='\n');w.writeheader()
+ for row in rows:w.writerow({k:json.dumps(v,ensure_ascii=False,separators=(',',':')) for k,v in row.items()})
+ return f.getvalue().encode()
+def read_csv(b):return [{k:json.loads(v) for k,v in row.items()} for row in csv.DictReader(io.StringIO(b.decode(),newline=''))]
+def build():
+ data=json.loads((ROOT/'package.json').read_text());assert data['visibility']=='public_synthetic' and data['professional_review']=='PENDING'
+ assert all(a['visibility']=='public_synthetic' for a in data['evidence'])
+ members={p:(ROOT/p).read_bytes() for p in ['package.json','evidence-package.schema.json','report.html','report.css','report.pdf','synthetic/brief.txt']}
+ for k in TABLES:
+ b=csv_bytes(data[k]);assert read_csv(b)==data[k];members[k+'.csv']=b
+ manifest=dict(schema_version='1.0.0',package_id=data['package_id'],exported_at=data['exported_at'],visibility='public_synthetic',professional_review='PENDING',excluded='All real protected media, mail, contracts, identity, medical, financial, benefits and housing evidence',members=[dict(path=p,size_bytes=len(b),sha256=digest(b)) for p,b in sorted(members.items())])
+ members['manifest.json']=(json.dumps(manifest,indent=2)+'\n').encode();out=io.BytesIO()
+ with zipfile.ZipFile(out,'w',zipfile.ZIP_DEFLATED) as z:
+ for p,b in sorted(members.items()):z.writestr(zipfile.ZipInfo(p,(2026,11,9,0,0,0)),b)
+ archive=out.getvalue();return {**members,'sample-v1.zip':archive,'sample-v1.zip.sha256':(digest(archive)+' sample-v1.zip\n').encode()}
+def verify_archive(b):
+ with zipfile.ZipFile(io.BytesIO(b)) as z:
+ names=z.namelist();assert len(names)==len(set(names))
+ assert all(not p.startswith('/') and '..' not in pathlib.PurePosixPath(p).parts for p in names)
+ m=json.loads(z.read('manifest.json'));assert sorted(names)==sorted([x['path'] for x in m['members']]+['manifest.json'])
+ for x in m['members']:
+ raw=z.read(x['path']);assert len(raw)==x['size_bytes'] and digest(raw)==x['sha256']
+ data=json.loads(z.read('package.json'))
+ for k in TABLES:assert read_csv(z.read(k+'.csv'))==data[k]
+ a=data['evidence'][0];assert digest(z.read(a['source_record_reference']))==a['sha256']
+ ids={e['event_id'] for e in data['timeline']};assert set(a['custody_event_ids'])<=ids
+ for e in data['timeline']:
+ assert e['supersedes']=='unknown' or e['supersedes'] in ids
+ assert data['evidence'][0]['source_creation']['value']=='unknown'
+ assert data['timeline'][2]['supersedes']==data['timeline'][1]['event_id']
+if __name__=='__main__':
+ expected=build()
+ if '--check' in sys.argv:
+ for p,b in expected.items():assert (ROOT/p).read_bytes()==b,'Stale '+p
+ else:
+ for p,b in expected.items():(ROOT/p).write_bytes(b)
+ verify_archive(expected['sample-v1.zip'])
+ # JSON cells preserve formulas as quoted string data and round-trip nested values.
+ malicious=[dict(text='=HYPERLINK("https://invalid.example")',nested={'x':['unknown',0]})]
+ assert read_csv(csv_bytes(malicious))==malicious
+ assert list(csv.DictReader(io.StringIO(csv_bytes(malicious).decode())))[0]['text'].startswith('"')
+ print('PASS: six CSV/JSON round trips, synthetic original hash, append-only example, archive membership/path/hash checks, spreadsheet formula-as-data encoding and reproducibility')
diff --git a/scripts/render-legal-report.cjs b/scripts/render-legal-report.cjs
new file mode 100644
index 0000000..2f33788
--- /dev/null
+++ b/scripts/render-legal-report.cjs
@@ -0,0 +1,14 @@
+// Development-only rendering with the already available Playwright/Chromium.
+// No PDF library or site runtime dependency is added. Review the generated PDF.
+const { chromium } = require('playwright');
+const path = require('node:path');
+const fs = require('node:fs');
+(async()=>{
+ const browser=await chromium.launch({headless:true,...(process.env.CHROMIUM_EXECUTABLE?{executablePath:process.env.CHROMIUM_EXECUTABLE}:{}),args:['--no-sandbox']});
+ const context=await browser.newContext(); const page=await context.newPage();
+ const report=fs.readFileSync(path.resolve(__dirname,'../docs/legal-rights/report.html'),'utf8');
+ await page.setContent(report.replace('