Lock-change dialog
One lock write path only: POST /:id/lock. The generic PATCH never touches methodologyLock or lockState. Trigger: Change lock on an active cycle.
Annotation · not proposed UIThis page is a state gallery ordered by reachability: the I1-reachable states come first (state A, replacing a provisional lock on an active cycle, is the only lock CHANGE reachable in I1; state B is the first lock write), then the forward states C and D, each annotated as post spec iii. Every state is drawn over a dimmed detail backdrop. The equity-share option is visible and disabled in every state. Dialog actions are Cancel and Replace lock; the destructive-weight confirm button carries no accent border, per the prototype design rules.
Annotation · not proposed UIPM ruling 2026-08-23: the dialog must communicate what a lock is, that transitions are tracked and not one-way, and the consequences of this change, in plain language. This is the deterministic-guidance case in miniature; the same content becomes guidance records under the AI-guidance decision. Applied to every drawn state below: a plain-language lock explainer at the top of the dialog, and the consequence items reframed under a "What happens if you continue" heading.
State A · I1 · replacing a provisional lock on an active cycle · annotation · not proposed UI
The only lock CHANGE reachable in I1. With
factorLibraryAvailable false the vintage stays null and the replacement is written as provisional again. Sample change on the 2026 cycle: NCV to GCV. The confirmation states the invalidation contract; in I1 items 1 to 3 are the complete behavior.2026 (Jan 2026 - Dec 2026) · GRI-NG-2026
Reporting cycle detail
active
Replace methodology lock
2026 (Jan 2026 - Dec 2026) · GRI-NG-2026 · replacing a provisional lock on an active cycle
What the lock is. The lock controls whether this cycle's methodology and figures are frozen.
none
Open. Entries flow normally.
provisional
Methodology pinned while the report is drafted. Figures stop moving.
complete
Year closed. Numbers frozen; the report stays reproducible.
A change here is allowed and stays reversible through further changes; it is never a one-way street. Every change is recorded with who, when, and what changed on the Events tab, so repeated lock and unlock activity is visible to auditors.
Current lock
Lock stateprovisional
GWP familyAR6
Boundary approachoperational-control
NCV / GCV conventionNCV
Rule setghgp-corporate-2004+
ghgp-scope2-guidance-2015
ghgp-scope2-guidance-2015
Rule set version2015-01
Factor library vintagenull · pending factor library
Locked at2026-06-05 09:12 UTC
Locked byNadia Rahman
Proposed lock
AR6
operational-control
financial-control
equity-share
Visible but disabled in every state · 422 EQUITY_SHARE_BLOCKED if submitted
NCV
GCV
The one proposed change: NCV to GCV.
ghgp-corporate-2004+ghgp-scope2-guidance-2015
2015-01
Server-defaulted from the registry, never client-writable
Pending factor library
factorLibraryAvailable: false · the I1 default · the replacement lock is written as provisional again
What happens if you continue
This change
1. sets computeInvalidatedAt to now (here: 2026-08-20 14:03 UTC)
2. emits a lock-changed event, recorded on the Events tab
3. invalidates the company's cycle-addressed cache entries
2. emits a lock-changed event, recorded on the Events tab
3. invalidates the company's cycle-addressed cache entries
In I1Items 1 to 3 are the complete behavior. No computed native figures exist, and no recompute happens today.
Annotation · not proposed UIItem 4 of the invalidation contract is a spec iii obligation, not I1 behavior: once the engine exists, any computed figure for the cycle older than
computeInvalidatedAt is stale, must not be served without a stale flag, and must be recomputed before export. The dialog copy above deliberately claims no recompute today. This state's write produces the lock-changed event shown on the Events tab (page 09) at 2026-08-20 14:03 UTC.CancelReplace lock
State B · I1 · first lock write · none to provisional · annotation · not proposed UI
An active cycle whose lock was never set. Historical cycle 1998 used as the sample. Timeline note: this state depicts the 1998 cycle BEFORE its provisional lock was applied; the cycle list page renders it after that lock write, with the provisional chip. The sample set deliberately contains no user cycle still at lock state none, so the none to provisional transition is drawn on this cycle's earlier state. The confirm action is drawn with the contract's action pair, Cancel and Replace lock; for a first write that label reads oddly, and it stands as drawn per the PM's review completion, 2026-08-23.
1998 (Jan 1998 - Dec 1998) · GRI-NG-2026
Reporting cycle detail
active
Write methodology lock
1998 (Jan 1998 - Dec 1998) · GRI-NG-2026 · lock state none to provisional
What the lock is. The lock controls whether this cycle's methodology and figures are frozen.
none
Open. Entries flow normally.
provisional
Methodology pinned while the report is drafted. Figures stop moving.
complete
Year closed. Numbers frozen; the report stays reproducible.
A change here is allowed and stays reversible through further changes; it is never a one-way street. Every change is recorded with who, when, and what changed on the Events tab, so repeated lock and unlock activity is visible to auditors.
Current lock
Lock statenone
GWP familynot set
Boundary approachnot set
NCV / GCV conventionnot set
Factor library vintagenot set
Proposed lock
AR6
operational-control
financial-control
equity-share
Visible but disabled in every state · 422 EQUITY_SHARE_BLOCKED if submitted
NCV
GCV
ghgp-corporate-2004+ghgp-scope2-guidance-2015
Read-only, server-validated against a one-entry registry
2015-01
Server-defaulted from the registry, never client-writable
Pending factor library
factorLibraryAvailable: false · the I1 default
What happens if you continue
This change
1. the lock is written as provisional: every field valid except the factor library vintage, which stays null
2. a lock-set event is recorded on the Events tab
2. a lock-set event is recorded on the Events tab
If fields are missingThe write is refused 422 LOCK_INCOMPLETE and nothing changes.
CancelReplace lock
State C · forward state · provisional to complete · native cycle · annotation · not proposed UI
Forward state, post spec iii: completion needs the vintage registry, so this transition is not reachable in I1. Drawn with
factorLibraryAvailable true. This cycle HAS its intended publication date (2027-05-29, a cycle field set while draft, shown on the detail page), so the refusal drawn fired here is the vintage one: an empty vintage picker refused 422 VINTAGE_REQUIRED. The publication-date refusal belongs on a cycle that genuinely lacks the date and is drawn in the refusal gallery below, on the 1998 cycle.2026 (Jan 2026 - Dec 2026) · GRI-NG-2026
Reporting cycle detail
active
Change methodology lock
2026 (Jan 2026 - Dec 2026) · GRI-NG-2026 · lock state provisional to complete
What the lock is. The lock controls whether this cycle's methodology and figures are frozen.
none
Open. Entries flow normally.
provisional
Methodology pinned while the report is drafted. Figures stop moving.
complete
Year closed. Numbers frozen; the report stays reproducible.
A change here is allowed and stays reversible through further changes; it is never a one-way street. Every change is recorded with who, when, and what changed on the Events tab, so repeated lock and unlock activity is visible to auditors.
Current lock
Lock stateprovisional
GWP familyAR6
Boundary approachoperational-control
NCV / GCV conventionNCV
Rule setghgp-corporate-2004+
ghgp-scope2-guidance-2015
ghgp-scope2-guidance-2015
Rule set version2015-01
Factor library vintagenull · pending
Locked at2026-06-05 09:12 UTC
Locked byNadia Rahman
Intended publication date2027-05-29cycle field, not a lock field · set while draft · completion precondition met
Proposed lock
AR6
operational-control
financial-control
equity-share
Visible but disabled in every state · 422 EQUITY_SHARE_BLOCKED if submitted
NCV
GCV
ghgp-corporate-2004+ghgp-scope2-guidance-2015
2015-01
Server-defaulted from the registry, never client-writable
Select vintage
Required
Completion requires a real vintage id, validated against the spec iii registry.
What happens if you continue
As drawnRefused: no vintage is selected (the error below). Nothing is written.
Once a vintage is chosenThe lock is written as complete: the year closes and figures freeze. The replacement contract applies: computeInvalidatedAt set to now, a lock-changed event recorded on the Events tab, the company's cycle-addressed cache entries invalidated.
422 VINTAGE_REQUIRED
A lock write without a factor library vintage is refused once the factor library is available. Select a vintage from the registry and retry; completion requires a real vintage id.
Annotation · not proposed UIForward state overall: with
factorLibraryAvailable: false (the I1 default) the vintage control stays pending and any client-sent id is refused 422 VINTAGE_UNKNOWN, so provisional to complete is reachable only after spec iii ships the registry. Once factorLibraryAvailable is true, a new provisional lock is refused 422 VINTAGE_REQUIRED: completion becomes the only forward path.CancelReplace lock
State D · forward state · replacing a complete lock · what completion freezes · annotation · not proposed UI
Forward state, post spec iii: a complete lock (and its vintage id) exists only after the vintage registry ships. Drawn for review of the replacement contract and the immutability summary. Sample change: NCV to GCV.
2026 (Jan 2026 - Dec 2026) · GRI-NG-2026
Reporting cycle detail
active
Replace completed lock
2026 (Jan 2026 - Dec 2026) · GRI-NG-2026 · replacing a complete lock on an active cycle
What the lock is. The lock controls whether this cycle's methodology and figures are frozen.
none
Open. Entries flow normally.
provisional
Methodology pinned while the report is drafted. Figures stop moving.
complete
Year closed. Numbers frozen; the report stays reproducible.
A change here is allowed and stays reversible through further changes; it is never a one-way street. Every change is recorded with who, when, and what changed on the Events tab, so repeated lock and unlock activity is visible to auditors.
Current lock
Lock statecomplete
GWP familyAR6
Boundary approachoperational-control
NCV / GCV conventionNCV
Rule setghgp-corporate-2004+
ghgp-scope2-guidance-2015
ghgp-scope2-guidance-2015
Rule set version2015-01
Factor library vintageflv-2027-01
Locked at2026-06-05 09:12 UTC
Locked byNadia Rahman
Proposed lock
AR6
operational-control
financial-control
equity-share
Visible but disabled in every state · 422 EQUITY_SHARE_BLOCKED if submitted
NCV
GCV
The one proposed change: NCV to GCV.
ghgp-corporate-2004+ghgp-scope2-guidance-2015
2015-01
Server-defaulted from the registry, never client-writable
flv-2027-01
What happens if you continue
This change
1. sets computeInvalidatedAt to now
2. emits a lock-changed event, recorded on the Events tab
3. invalidates the company's cycle-addressed cache entries
4. obligates the spec iii engine work: any computed figure older than computeInvalidatedAt is stale, must not be served without a stale flag, and must be recomputed before export
2. emits a lock-changed event, recorded on the Events tab
3. invalidates the company's cycle-addressed cache entries
4. obligates the spec iii engine work: any computed figure older than computeInvalidatedAt is stale, must not be served without a stale flag, and must be recomputed before export
In I1No computed native figures exist, so items 1 to 3 are the complete behavior. No recompute happens today.
What completion frozeFor compute purposes the methodology is frozen at lock completion, which is the spec's reading of "frozen at cycle start". That is why replacement is audited and invalidating rather than an in-place edit: a complete lock is never edited, only replaced through this endpoint.
Never client-writablelockedAt, lockedBy, ruleSet.version · server-generated before and after completion
Identity stays frozenperiod, frameworkCode, orgScope, intendedPublicationDate are editable only in draft (409 CYCLE_IMMUTABLE otherwise); after activation the escape hatch is archive plus a new cycle
Annotation · not proposed UIForward state: a complete lock (and the vintage id
flv-2027-01) exists only after spec iii ships the vintage registry. Drawn for review of the replacement contract.CancelReplace lock
Refusal states · where the dialog cannot open or the write is refused · annotation · not proposed UI
422 VINTAGE_REQUIRED is drawn fired in state C above (forward state, factorLibraryAvailable true). The tiles below draw the remaining refusals.409 CYCLE_NOT_LOCKABLE
409 CYCLE_NOT_LOCKABLE
Lock operations are refused on an archived or superseded cycle. The Change lock action is disabled on those rows; a raced request gets this refusal.
superseded2023 (Jan 2023 - Dec 2023) · GRI-NG-2026 [superseded]
Sample-set note: drawn on the one NON-backfilled sample this refusal can anchor to. Every archived cycle in the sample set is backfilled, and a backfilled cycle refuses 409 CYCLE_BACKFILLED_READONLY regardless of status, so it cannot demonstrate this code; a user cycle archived from the list refuses exactly as drawn here. The superseded status is itself an I3 forward state; the refusal contract is I1.
409 CYCLE_BACKFILLED_READONLY
409 CYCLE_BACKFILLED_READONLY
Backfilled cycles are read-only server-side. Lock, archive, and PATCH are all refused; only the backfill runner mutates them, through re-runs and rollback.
active2025 (Apr 2025 - Mar 2026) · BFG-Group [backfilled]
422 EQUITY_SHARE_BLOCKED
422 EQUITY_SHARE_BLOCKED
equity-share submitted despite the disabled control. The hard block is server-side.
422 PUBLICATION_DATE_REQUIRED
422 PUBLICATION_DATE_REQUIRED
Completion for a GRI cycle requires an intended publication date on the cycle, and this cycle has none. The date is set while a cycle is draft; an active cycle without it cannot complete its lock. The escape hatch is archive plus a new cycle.
active1998 (Jan 1998 - Dec 1998) · GRI-NG-2026
Identity fields, the publication date included, are editable only in draft (spec 4.3 rule 6), so no copy here suggests editing them on the active cycle. Completion itself needs the spec iii vintage registry; the publication-date precondition and this refusal are defined in I1 (spec 4.2).
422 LOCK_INCOMPLETE
Select GWP family
Required
422 LOCK_INCOMPLETE
Required lock fields are missing. Every lock field except the factor library vintage must be present to write the lock.
422 VINTAGE_UNKNOWN
flv-2026-q3
422 VINTAGE_UNKNOWN · id not in the vintage registry
Fires in I1 already: before spec iii ships the registry, ANY client-sent vintage id gets this refusal (the drawn picker is disabled, so reaching it takes the free-text variant or a direct API call). After the registry ships it fires for ids the registry does not contain.