trd.fun / lab
Strategy candidates

Momentum 12−1 amendment v1.2 — canary and prefix-N

Updated 2026-08-30
Draft; pending owner ratification: The one-share canary, rank-bound prefix-N construction, trial 53, and event schemas grant no authority until every owner and seal blocker closes.
PENDING OWNER
docs/research/prereg-amendment-v1.2-canary-prefix-n-2026-08-30.md

Draft; pending owner ratification: The one-share canary, rank-bound prefix-N construction, trial 53, and event schemas grant no authority until every owner and seal blocker closes.

Date: 30 August 2026 Status: DRAFT — PENDING OWNER RATIFICATION · prospective only · not sealed · no trading authority

Decision boundary: this draft must be owner-ratified and hash-pinned before the lockbox is opened and before the formation rank is generated or disclosed. It does not amend the registered full equal-weight top-decile verdict, replace policy v1, authorize an order, or claim that any implementation exists.

1 — What this draft would authorize

  • Stage-1 canary: one deterministic whole-share OPG limit order in the first rank-ordered candidate priced at no more than £100, followed by a canonical next-open unwind and complete reconciliation.
  • Concentrated construction: a rank-bound prefix-N portfolio using the frozen selector, sealed capital and sizing approvals, exact integer arithmetic, and a complete 14 September price/ADV/FX snapshot.
  • One-shot evaluation: trial 53 compares the registered full decile with fixed prefix-N once, using a sealed DSR/PBO test. Canary activity remains trial:null only when used solely for safety and never for return selection.
  • Conditional small-capital fact: under the stated price interval, including the registered formation-price floor of ≥$10, the published £10k NAV inputs yield prefix-N N=0. Under those assumptions, the one-share canary is the only stage-1 remedy in this draft; it is a safety proof, not a substitute portfolio or evidence of edge.

The registered full equal-weight top-decile rule remains unchanged under rule hash bcf45aad640b041e17f5660225976e20dacc875c536f57f86248959c948ff796.

2 — Ledger and trial accounting

The converged draft was prepared against this receipt:

  • trial ledger rows: 67;
  • trial ledger SHA-256: b14715abd0c980362c70ec5fc1978f8f6d38c2980b9835eebeee2261d8e8a203;
  • rows 63–67: diagnostic or relabel records with trial:null;
  • highest allocated trial: 52; missing trial 43 remains spent;
  • next free trial: 53;
  • DSR raw/effective N=53, with no clustering discount.

The 67-row pin corrects the stale pins found during review. It is still a seal-time input, not proof that the draft has been sealed.

3 — Rank proof and canary lifecycle

strategy/** remains frozen. The pinned strategy/index.ts SHA-256 is 1163cef4153e7d69a09df2db0e744c0c87b1ba0c6f80c3458383551afcda434a.

execution/plan.ts must independently rederive eligibility, the exact month-end anchors, score, and rank from the identical panel snapshot, exchange sessions, and formation timestamp. ranked_candidates means exactly ranks 1..D, where D=ceil(eligible/10). The ordered result must equal the frozen selector, including the comparator right.score-left.score || left.ticker.localeCompare(right.ticker). Any length, rank, ticker, boundary-tie, or hash mismatch refuses.

Traverse ranks ascending and select the first candidate whose sealed one-share price is ≤£100. If none qualifies, seal canaryRefused:"all_ranked_candidates_over_cap".

  • Submit one deterministic-ID, whole-share OPG limit order. No substitution, repricing, or new ID is allowed.
  • Rejection, cancellation, expiry, verified zero fill, unresolved ambiguity, field mismatch, invalid partial state, or unresolved successor is terminal for that opening.
  • canaryStage2Eligible=true only after exactly one share fills, all ambiguity is resolved, the canonical next-open sale fully unwinds it, broker quantity reconciles to zero, and a fresh H1–H4 evaluation returns continue.
  • Every other outcome seals a named canaryStage2Refused and permanently refuses stage 2 for that opening. Canary P&L and owner observation do not enter the Boolean.
  • H1 uses reconciled sleeve NAV; H2 uses actual sleeve equity against the monotone since-arm HWM.

4 — Prefix-N construction

Bind stage basis points s to the sizing-approval event hash, validity window, and cutoff 2026-09-14T20:00:00Z. Bind the combined sleeve cap C to the risk-policy event, its raw and expected SHA-256 pins, the same cutoff, and the ordered active sizing approvals of every other strategy/account. More than one active approval for any other strategy/account refuses.

Attempt a complete 14 September price/ADV/FX snapshot at 2026-09-14T20:05:00Z, then every five minutes through 23:55:00Z. Hash every attempt and result. Partial reuse and later-date substitution are forbidden. If no attempt succeeds, seal constructionRefused:"sep_2026-09-14_snapshot_unavailable", selectedN:0, and submitEligible:false; cancel open orders and allow only canonical flatten/reconcile.

Canonical UTF-8/LF pseudocode:

1. Parse G and C as exact GBP pence g,c; s as integer bp; L and F as reduced nonnegative rationals.
2. For each rank i, priceCents[i]=floor(100*P_i);
   advCents[i]=floor(sum(last 20 sessions: 100*closeunadj*volume)/20);
   advCapCents[i]=floor(advCents[i]/100). Refuse any invalid input.
3. stagePence=g*s/10000 as an exact rational; availablePence=min(stagePence,c).
   B=floor(availablePence*L*F) USD cents.
4. For n=1..D-1: allocation=floor(B/n).
5. For i=1..n: q[i]=floor(min(allocation,advCapCents[i])/priceCents[i]).
6. deployedCents=sum(q[i]*priceCents[i]).
   pass[n]=(B>0 && every q[i]>=1 && 100*deployedCents>=90*B).
7. N=greatest passing n; if none, N=0.

All division floors toward negative infinity. Residual cents remain cash; there is no skipping or redistribution. constructionAlgorithmSha256 hashes the domain/version and exact pseudocode bytes. constructionSpecHash also binds approvals, cutoffs, retry cadence, ordering, rounding, refusal/unwind, and LL-4b ordering. constructionInputsHash covers the original decimals, derived integers, attempts, manifests, ranks, candidate evaluations, N, quantities, and refusal state.

N=0 seals constructionRefused:"prefix_n_zero"; it is not LL-4b's eligible flat case. Prefix construction precedes LL-4b, which recomputes the gates on exactly the selected set.

Governance reconciliation — pending owner: this amendment retains the all-name gate in its construction text, while policy v2 replaces that gate with per-name headroom semantics. If both documents are sealed, policy v2's per-name assessment takes precedence at submission; the owner must explicitly confirm that precedence when ratifying them.

5 — One-shot post-opening test

Let T be the ordered lockbox rebalance months, q=floor(T/6), and r=T mod 6. Blocks 1..r receive q+1 consecutive months and the others receive q; no partial block is discarded, and q<1 refuses. Purge the first month of blocks 2–6 from both candidate series.

For each of the 15 unordered two-block OOS choices, the other four blocks are IS. For candidate c∈{full-decile,prefix-N}:

S_c(A)=sqrt(12)×mean(net-active monthly returns in A)/sampleSDₙ₋₁.

Zero variance gives −∞, except zero mean and variance gives 0. Higher IS S wins; an exact tie selects full decile. A split scores 1 when the IS winner has lower OOS S, 0.5 for equality, and 0 otherwise. PBO=sum(scores)/15 and must be ≤0.20.

Run fixed N once without tuning. PASS requires all three:

  1. annualized arithmetic mean ×12 of top-N net return minus equal-weight-universe net return is >0;
  2. DSR is ≥0.95 at N=53;
  3. PBO is ≤0.20.

Any miss, missing input, hash disagreement, or computation failure means REFUSED forever—no rerun.

6 — Pre-opening authority event schema

This prospective owner-sealed event contains no formation rank, snapshot, ticker, selected-N, quantity, or refusal fields.

{
  "type": "preregister",
  "version": "momentum-concentrated-construction-authority/v1",
  "strategyId": "momentum-12-1-long-only-v1",
  "trialId": 53,
  "registeredAt": "<OWNER_RATIFICATION_UTC>",
  "owner": "<OWNER_IDENTITY>",
  "ownerDecisions": { "Q13": "<A|B>", "Q14": "<A|B>", "Q15": "<A|B>", "Q16": "<A|B>" },
  "trialLedger": {
    "path": "<FINAL_TRIAL_LEDGER_CUSTODY_PATH>",
    "rows": 67,
    "sha256": "b14715abd0c980362c70ec5fc1978f8f6d38c2980b9835eebeee2261d8e8a203"
  },
  "dsr": { "rawN": 53, "effectiveN": 53, "clusteringDiscount": false, "missingTrial43Treatment": "spent" },
  "doc": "docs/research/prereg-amendment-v1.2-canary-prefix-n-2026-08-30.md",
  "docSha256": "<FINAL_SELF_BLANKED_SHA256>",
  "ruleHash": "bcf45aad640b041e17f5660225976e20dacc875c536f57f86248959c948ff796",
  "strategyFileSha256": "1163cef4153e7d69a09df2db0e744c0c87b1ba0c6f80c3458383551afcda434a",
  "approvalBinding": {
    "sizingApprovalEventHash": "<FINAL_HASH>",
    "sizingApprovalCutoffAt": "2026-09-14T20:00:00Z",
    "riskPolicyEventHash": "<FINAL_HASH>",
    "riskPolicySha256": "<FINAL_RAW_EVENT_SHA256>",
    "riskPolicyPinnedSha256": "<FINAL_EXPECTED_PIN_SHA256>",
    "riskPolicyCutoffAt": "2026-09-14T20:00:00Z",
    "otherStrategySizingApprovalEventHashes": ["<ORDERED_FINAL_HASHES>"]
  },
  "hashPins": {
    "strategySpecHash": "<FINAL_HASH>",
    "rankingDerivationCodeHash": "<FINAL_HASH>",
    "rankedReceiptSchemaHash": "<FINAL_HASH>",
    "constructionAlgorithmSha256": "<FINAL_HASH>",
    "constructionSpecHash": "<FINAL_HASH>",
    "canaryLifecycleHash": "<FINAL_HASH>",
    "ll4bConfigHash": "<FINAL_HASH>",
    "pboSpecHash": "<FINAL_HASH>",
    "successorPolicySha256": "<FINAL_HASH>",
    "executionPlanV3CodeHash": "<FINAL_HASH>",
    "executorManifestSha256": "<FINAL_HASH>"
  },
  "authoritySchemaHash": "<HASHOBJECT_tradegg/live-lane/construction-authority-schema/v1>",
  "authorityEventHash": "<HASHOBJECT_tradegg/live-lane/construction-authority/v1_OVER_BODY>"
}

7 — Runtime construction-receipt schema

{
  "type": "construction_receipt",
  "version": "live-lane-construction-receipt/v1",
  "occurredAt": "<RUNTIME_UTC>",
  "authorityEventHash": "<EARLIER_SEALED_AUTHORITY_HASH>",
  "immutableAuthorityPinsHash": "<REPRODUCED_PIN_SET_HASH>",
  "signalFormationAsOf": "<VALIDATED_PRIOR_MONTH_END>",
  "implementationAsOf": "2026-09-14",
  "formationPlanEventHash": "<SEALED_HASH>",
  "rankedCandidatesHash": "<RUNTIME_HASH>",
  "rankedCandidatesCount": "<D>",
  "sizingApprovalEventHash": "<AUTHORITY_BOUND_HASH>",
  "riskPolicyEventHash": "<AUTHORITY_BOUND_HASH>",
  "snapshotAttemptAt": "<SUCCESSFUL_OR_FINAL_ATTEMPT_UTC>",
  "priceAdvSnapshotHash": "<RUNTIME_HASH>",
  "constructionInputsHash": "<RUNTIME_HASH>",
  "selectedN": "<NONNEGATIVE_INTEGER>",
  "targetQtyByPermaticker": "<HASHED_INTEGER_MAP>",
  "constructionRefused": "<null|prefix_n_zero|named_input_failure>",
  "canaryTicker": "<PERMATICKER_OR_NULL>",
  "canaryRefused": "<null|all_ranked_candidates_over_cap|named_failure>",
  "canaryStage2Eligible": "<BOOLEAN>",
  "canaryStage2Refused": "<null|named_failure>",
  "submitEligible": "<BOOLEAN>",
  "constructionReceiptSchemaHash": "<HASHOBJECT_tradegg/live-lane/construction-receipt-schema/v1>",
  "constructionReceiptHash": "<HASHOBJECT_tradegg/live-lane/construction-receipt/v1_OVER_BODY>"
}

A runtime receipt is valid only if authorityEventHash resolves to an earlier sealed authority event and every immutable schema, spec, code, approval, and policy pin matches. Otherwise construction refuses.

8 — Implementation packet after ratification

The bounded LL-4d packet is lib/live-lane/execution/plan.ts, execution/alpaca.ts, reconcile/index.ts, rehearsal/index.ts, risk/index.ts, validate/index.ts, scripts/live-lane.mjs, and corresponding tests. strategy/** stays frozen; no daemon change is proposed.

Required named proofs are ranked_candidates_sealed_first_D, canary_first_affordable_or_refusal, prefix_n_integer_cents_golden_vectors, rehearsal_consumes_construction_refused, and policy_v2_loader_and_pin.

9 — Pending owner ratification and seal blockers

  • Q13: A approves the canary lifecycle; B grants none.
  • Q14: A approves prefix-N/refusal/unwind; B grants no concentrated authority.
  • Q15: A approves trial 53 and the one-shot test; B permits no evaluation.
  • Q16: A approves only final hash-pinned, loader-valid policy v2 and fail-closed v3 execution; B leaves Q13/Q14 dormant and permits no order.

SEAL BLOCKERS REMAINING: seal the corrected 67-row ledger pin; final PBO block/statistic closure; separate authority/runtime event schemas; final document/event digests computed at seal time; passing code packet LL-4d; loader-valid sealed policy v2; owner identity/UTC; Q13–Q16; final strategy, ranking, construction, canary, executor, and policy hash pins.

OWNER RATIFICATION: Q13=__ · Q14=_ · Q15=_ · Q16=__

Until every blocker is closed, this document remains DRAFT — PENDING OWNER RATIFICATION and grants no execution, lockbox, or trading authority.

On this page 9 sections
LAB documentation describes design intent and research safeguards. It does not provide trading instructions or operational access.