docs(card): estate audit 2026-09-25 — honest labels, dead links, metadata

#1
Files changed (1) hide show
  1. README.md +55 -72
README.md CHANGED
@@ -7,16 +7,44 @@ tags:
7
  - doctrine-v11
8
  - estate
9
  - hub
 
 
 
 
 
 
 
 
10
  ---
11
 
12
  # szl-training-scripts
13
 
14
  The forge. Hub copy of the Unsloth-receipted training scripts. Tags were empty — this atelier is the card.
15
 
16
- **Family.** estate · **Evidence.** HUB · **Weights.** none
17
 
18
  Hub: [SZLHOLDINGS/szl-training-scripts](https://huggingface.co/SZLHOLDINGS/szl-training-scripts)
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  ## The cut
21
 
22
  Training code is usually a gist. We give it a model id so the estate graph stays one piece.
@@ -29,9 +57,9 @@ A Hub id you can pin in a receipt: 'trained by this repo at this SHA'.
29
  |---|---|
30
  | Anthropic | No public train scripts for Claude. |
31
  | NVIDIA | NeMo recipes. |
32
- | Unsloth | The scripts wrap Unsloth. Cut is the receipt bind. |
33
 
34
- Nobody else ships this combination. That is the point of a one-of-one.
35
 
36
  ## Intended use
37
 
@@ -40,6 +68,7 @@ Canonical train entrypoint.
40
  ## Limitations
41
 
42
  - Not a checkpoint. Wire to GitHub kit in this atelier.
 
43
 
44
  ## Honesty
45
 
@@ -56,78 +85,32 @@ Apache-2.0. Copyright 2026 SZL Holdings · Stephen P. Lutar Jr. · ORCID [0009-0
56
 
57
  ## GitHub-aligned Python
58
 
 
 
 
 
 
 
 
 
 
 
 
59
  ```python
60
- #!/usr/bin/env python3
61
- # receipted_unsloth.py
62
- # Silhouette: Unsloth FastLanguageModel QLoRA.
63
- # Cut: dataset SHA, LoRA knobs, seed, and final loss go into a training receipt
64
- # BEFORE merge. GGUF is derived — never the signed object.
65
-
66
- from __future__ import annotations
67
-
68
- import argparse
69
- import hashlib
70
- import json
71
- import time
72
- from pathlib import Path
73
-
74
-
75
- def sha256_file(p: Path) -> str:
76
- h = hashlib.sha256()
77
- with p.open("rb") as f:
78
- for chunk in iter(lambda: f.read(1 << 20), b""):
79
- h.update(chunk)
80
- return h.hexdigest()
81
-
82
-
83
- def main() -> None:
84
- ap = argparse.ArgumentParser()
85
- ap.add_argument("--base", default="Qwen/Qwen2.5-1.5B-Instruct")
86
- ap.add_argument("--data", default="doctrine.jsonl")
87
- ap.add_argument("--out", default="out/adapter")
88
- ap.add_argument("--r", type=int, default=16)
89
- ap.add_argument("--seed", type=int, default=20260721)
90
- ap.add_argument("--max-seq", type=int, default=2048)
91
- args = ap.parse_args()
92
-
93
- data_sha = sha256_file(Path(args.data))
94
- from unsloth import FastLanguageModel
95
- from datasets import load_dataset
96
- from trl import SFTConfig, SFTTrainer
97
-
98
- model, tokenizer = FastLanguageModel.from_pretrained(
99
- model_name=args.base,
100
- max_seq_length=args.max_seq,
101
- load_in_4bit=True,
102
- )
103
- model = FastLanguageModel.get_peft_model(
104
- model,
105
- r=args.r,
106
- lora_alpha=args.r,
107
- target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
108
- lora_dropout=0,
109
- bias="none",
110
- use_gradient_checkpointing="unsloth",
111
- random_state=args.seed,
112
- )
113
- ds = load_dataset("json", data_files=args.data, split="train")
114
- trainer = SFTTrainer(
115
- model=model,
116
- tokenizer=tokenizer,
117
- train_dataset=ds,
118
- args=SFTConfig(
119
- output_dir=args.out,
120
- per_device_train_batch_size=2,
121
- gradient_accumulation_steps=4,
122
- max_steps=120,
123
- learning_rate=2e-4,
124
- logging_steps=10,
125
- seed=args.seed,
126
- ),
127
- )
128
  t0 = time.time()
129
  trainer.train()
 
130
  model.save_pretrained(args.out)
131
  loss = None
132
- if trainer.state.log_hi
 
 
 
 
 
 
 
133
  ```
 
 
 
7
  - doctrine-v11
8
  - estate
9
  - hub
10
+ - training-scripts
11
+ szl:
12
+ doctrine: v11-LOCKED
13
+ artifact_class: SCRIPTS_AND_RECEIPTS
14
+ weights: UNAVAILABLE
15
+ evals: NOT_APPLICABLE
16
+ publication_eligible: false
17
+ card_resync: 2026-09-25
18
  ---
19
 
20
  # szl-training-scripts
21
 
22
  The forge. Hub copy of the Unsloth-receipted training scripts. Tags were empty — this atelier is the card.
23
 
24
+ **Family.** estate · **Evidence.** HUB · **Weights.** none (UNAVAILABLE on this Hub ID: scripts and receipts only)
25
 
26
  Hub: [SZLHOLDINGS/szl-training-scripts](https://huggingface.co/SZLHOLDINGS/szl-training-scripts)
27
 
28
+ **Canonical source (GitHub):** the atelier kit lives in [`szl-holdings/a11oy`](https://github.com/szl-holdings/a11oy) under [`.github/atelier-kit/`](https://github.com/szl-holdings/a11oy/tree/main/.github/atelier-kit) (`receipted_unsloth.py`, `unsloth-recipes.json`, `cards/szl-training-scripts.md`, `kit-README.md`). The kit README names [`szl-holdings/szl-khipu`](https://github.com/szl-holdings/szl-khipu), [`szl-holdings/szl-forge`](https://github.com/szl-holdings/szl-forge) and [`szl-holdings/szl-nemo`](https://github.com/szl-holdings/szl-nemo) as its upstream sources. GitHub is canonical; this Hub repository is the mirror.
29
+
30
+ ## Hub tree (OBSERVED 2026-09-25)
31
+
32
+ Listed through the Hub file API; the revision SHA was not captured by this pass. No weight file of any kind is present.
33
+
34
+ | Path | Bytes | What it is (from the file's own header) |
35
+ |---|---:|---|
36
+ | `receipted_unsloth.py` | 12,165 | "Receipted Unsloth — take the speed, bind the knobs, refuse the folklore." Unsloth QLoRA trainer with one `PROFILES` entry per organ (khipu, khipu-r2, receiptagent, willay, chaski, chaski-5050, chaski-r2), house seed 20260721, `--receipt-only` (mint the recipe receipt, no GPU) and `--list`. Same file name and byte size as the a11oy atelier-kit copy; the first ~3 KB were compared and match, the full-file digest was not compared. |
37
+ | `train_receipted_unsloth.py` | 12,431 | "Receipted Unsloth unique-cut GPU trainer. Runs on Hugging Face Jobs (A10G)." `uv run` script header; `--profile willay` / `--profile chaski`. |
38
+ | `train_willay.py` | 6,799 | WILLAY signed-refusal SFT LoRA script (base `Qwen/Qwen2.5-0.5B-Instruct`, target `SZLHOLDINGS/WILLAY`). |
39
+ | `train_cohort.py` | 17,351 | "CPU-train WILLAY + Chaski silhouettes. Measure kernels. No 1.5B retrain." NumPy silhouettes, seed 20260721, `--kernels-only`. |
40
+ | `szl_khipu_eval.py` | 10,412 | KHIPU-R2 held-out eval port (eval.jsonl 5 navigate + adversarial.jsonl 6; fp16 and optional 4-bit NF4 comparison). |
41
+ | `unsloth-recipes.json` | 16,247 | recipe table (same size as the atelier-kit copy). |
42
+ | `receipts/chaski-unsloth.json`, `receipts/chaski-5050-unsloth.json`, `receipts/chaski-r2-unsloth.json`, `receipts/willay-unsloth.json` | 1,592 / 1,638 / 1,587 / 1,641 | `szl.training_receipt.v2` receipts minted by the profile trainer (unsigned). |
43
+ | `training_receipt.unsloth.json` | 1,638 | profile `chaski-5050` receipt (`path_in_repo: adapter-unsloth`, train loss 0.5588 MEASURED, `evals: none-this-run`, energy UNAVAILABLE, `proven_trust: false`). |
44
+ | `provenance.json` / `status.json` / `LICENSE` | 1,755 / 1,394 / 11,357 | license-candidate records and standalone Apache-2.0 text. `status.json` keeps lineage, consent, privacy, training-suitability and deployment fields BLOCKED and `production_ready: false`. |
45
+ | `bom/model-bom.cdx.json` | 5,324 | CycloneDX BOM |
46
+ | `.gitattributes` | 1,519 | platform-managed |
47
+
48
  ## The cut
49
 
50
  Training code is usually a gist. We give it a model id so the estate graph stays one piece.
 
57
  |---|---|
58
  | Anthropic | No public train scripts for Claude. |
59
  | NVIDIA | NeMo recipes. |
60
+ | Unsloth | The scripts wrap Unsloth v2 profiles. Cut is unique knobs per organ, bound in the receipt. |
61
 
62
+ No equivalent public combination was found among the leaders surveyed above (a snapshot, not an ecosystem-wide novelty claim).
63
 
64
  ## Intended use
65
 
 
68
  ## Limitations
69
 
70
  - Not a checkpoint. Wire to GitHub kit in this atelier.
71
+ - The receipts here are unsigned recipe/run envelopes; a receipt on this Hub ID does not by itself bind any adapter bytes on another repository.
72
 
73
  ## Honesty
74
 
 
85
 
86
  ## GitHub-aligned Python
87
 
88
+ An earlier version of this card embedded a code block that stopped mid-statement (`if trainer.state.log_hi`) and that did not match the `receipted_unsloth.py` actually stored on this Hub ID (it showed an older 2,932-byte single-profile variant with `--base/--r/--seed` flags, which still exists as `atelier/receipted_unsloth.py` in szl-khipu and szl-forge). That block is removed. What follows is quoted verbatim from the 12,165-byte `receipted_unsloth.py` on this repository (2026-09-25 read).
89
+
90
+ Usage lines from the module docstring:
91
+
92
+ ```text
93
+ python receipted_unsloth.py --profile willay --receipt-only
94
+ python receipted_unsloth.py --profile chaski --data doctrine.jsonl --out out/chaski
95
+ ```
96
+
97
+ The receipt-minting tail of `main()` — the point of the file: every knob lands in `training_receipt.json`, loss is read from the trainer log, and the envelope is meant to be signed before any merge:
98
+
99
  ```python
100
+ trainer = SFTTrainer(model=model, tokenizer=tokenizer, train_dataset=ds, args=SFTConfig(**sft_kw))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  t0 = time.time()
102
  trainer.train()
103
+ Path(args.out).mkdir(parents=True, exist_ok=True)
104
  model.save_pretrained(args.out)
105
  loss = None
106
+ if trainer.state.log_history:
107
+ last = trainer.state.log_history[-1]
108
+ loss = last.get("train_loss") or last.get("loss")
109
+ extra.update({"final_loss": loss, "seconds": round(time.time() - t0, 3), "honesty": "REPORTED"})
110
+ rec = mint_receipt(args.profile, cfg, extra)
111
+ Path(args.out, "training_receipt.json").write_text(json.dumps(rec, indent=2) + "\n")
112
+ print(json.dumps(rec, indent=2))
113
+ return 0
114
  ```
115
+
116
+ `mint_receipt` refuses `proven_trust: true` and refuses any non-null `energy_j` ("refusing to fabricate joules"); the receipt records `"gguf": "derived — never the signed object"`. Read the full file on this repository or in the canonical kit linked above; do not treat this excerpt as the whole program.