Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions js/compressed-token/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,70 @@
## 2026-03-24

### Breaking Changes

- `transferInterface()` takes a recipient wallet `PublicKey` as `recipient` (not a pre-derived ATA). Derives the ATA internally.
Before: `transferInterface(rpc, payer, source, mint, ataAddress, ownerKeypair, amount, ...)`
After: `transferInterface(rpc, payer, source, mint, walletPublicKey, owner.publicKey, ownerKeypair, amount, ...)`
Migration: pass the recipient wallet public key; add `owner.publicKey` before the signing keypair. For delegated flows: `ownerPublicKey, delegateSigner`. (#2347)

- `decompressInterface()` removed. Use `loadAta()` (action) or `createLoadAtaInstructions()` (builder).
Before: `decompressInterface(rpc, payer, owner, mint, amount?, destinationAta?, ...)`
After: `loadAta(rpc, ata, owner, mint, payer?, confirmOptions?, interfaceOptions?, wrap?)`
Migration: derive target ATA with `getAssociatedTokenAddressInterface(mint, owner)` and pass to `loadAta()`. Supports >8 compressed inputs. (#2341)

- `CTOKEN_PROGRAM_ID` renamed to `LIGHT_TOKEN_PROGRAM_ID`. Related: `createAssociatedCTokenAccountInstruction` -> `createAssociatedLightTokenAccountInstruction`, `parseCTokenHot`/`parseCTokenCold` -> `parseLightTokenHot`/`parseLightTokenCold`, `mintToCToken` -> `mintToLightToken`, `createCTokenTransferInstruction` -> `createLightTokenTransferInstruction`.
Migration: update all call sites to the new LightToken names. (#2330)

- `createTransferInterfaceInstructions()` and `createLoadAtaInstructions()` now return `TransactionInstruction[][]` (one inner array per transaction) instead of flat instruction arrays.
Before: `const ixs = await createTransferInterfaceInstructions(...)`
After: `const batches = await createTransferInterfaceInstructions(...)` — send each inner array as a separate transaction
Migration: iterate outer array. Use `sliceLast(batches)` to split load transactions from the final transfer. (#2344)

- `InterfaceOptions.owner` removed. Use the flat `owner` param.
Before: `options: { owner: ownerPublicKey, ... }`
After: flat `owner` argument. For delegated instruction planning use `options.delegatePubkey` instead. (#2347)

- `createLoadAtaInstructionsFromInterface` no longer exported from the package root. Use `createLoadAtaInstructions`. (#2341)

- `createLoadAccountsParams` and `calculateCompressibleLoadComputeUnits` removed. Use `createLoadAtaInstructions` and `calculateLoadBatchComputeUnits`. (#2341)

- `mintToCompressed()`: `maxTopUp` inserted before `confirmOptions`.
Before: `mintToCompressed(rpc, payer, mint, owner, amount, confirmOptions?)`
After: `mintToCompressed(rpc, payer, mint, owner, amount, maxTopUp?, confirmOptions?)`
Migration: update positional call sites that pass `confirmOptions`. (#2338)

- `getAccountInterface()`, `getAtaInterface()`, `getMintInterface()`: unexpected RPC failures now throw instead of being silently treated as empty/not-found.
Migration: add explicit error handling at call sites. (#2340)

- `createTransferInterfaceInstruction` (multi-program dispatcher) deprecated. Use `createLightTokenTransferInstruction` for Light token transfers, or SPL's `createTransferCheckedInstruction` for SPL/Token-2022. (#2330)

- `createTokenPool` deprecated. Use `CompressedTokenProgram.createSplInterface`. (#2309)

### Features

- `approveInterface()` and `revokeInterface()` actions for delegate approval/revocation on Light token, SPL Token, and Token-2022 accounts. (#2350)
- `createApproveInterfaceInstructions()` and `createRevokeInterfaceInstructions()` instruction builders returning batched `TransactionInstruction[][]`. (#2350)
- `createLightTokenApproveInstruction()` and `createLightTokenRevokeInstruction()` low-level program helpers. (#2350)
- `loadAta()` replaces `decompressInterface()`; parallel batched transactions for >8 compressed inputs; creates ATA if needed. (#2341)
- `createUnwrapInstructions()` returns `TransactionInstruction[][]` with amount-aware input selection. (#2342)
- `selectInputsForAmount()` for greedy amount-aware compressed account selection. (#2342)
- `createLightTokenFreezeAccountInstruction()` and `createLightTokenThawAccountInstruction()` for native freeze/thaw of decompressed light-token accounts (discriminators 10 and 11). (#2333)
- `MAX_TOP_UP` constant (65535) exported from constants. (#2338)
- `maxTopUp` optional param on all compressible instruction builders for explicit rent top-up capping. (#2338)
- `LightTokenProgram` alias for `CompressedTokenProgram`. (#2330)
- `assertV2Only()` guard on load/decompress paths; V1 inputs fail fast with a clear error. (#2341)
- `sliceLast()`, `chunkAccountsByTreeVersion()`, `assertUniqueInputHashes()` for batch orchestration. (#2344)

### Fixes

- `maxTopUp` default changed from `0` to `MAX_TOP_UP` (65535); rent top-ups no longer silently blocked. (#2338)
- `delegatedAmount` correctly parsed from CompressedOnly TLV extension instead of defaulting to 0. (#2339)
- Browser bundles: Terser no longer rewrites `AccountMeta` `isSigner`/`isWritable` flags to integers; flags stay boolean-compatible with `@solana/web3.js`. (#2347)
- `parseLightTokenHot` uses `unpackAccountSPL` for correct hot token account parsing. (#2339)
- Frozen light-token-hot sources correctly excluded from load paths. (#2339)
- SPL interface fetch errors rethrown in load paths when SPL or Token-2022 balance exists. (#2339)
- `getSplOrToken2022AccountInterface` fetches hot and cold accounts in parallel. (#2339)

## [0.23.0-beta.9]

### Fixed
Expand Down
25 changes: 25 additions & 0 deletions js/stateless.js/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# Changelog

## 2026-03-24

### Breaking Changes

- V2 is the default for published npm packages. Consumers who relied on implicit V1 builds must set `LIGHT_PROTOCOL_VERSION=V1` when building from source.
Before: packages defaulted to V1 builds
After: packages default to ZK Compression V2
Migration: set `LIGHT_PROTOCOL_VERSION=V1` only for source builds targeting V1 artifacts. No change needed for npm consumers.

- `getAccountInfoInterface()`: unexpected RPC failures now throw errors instead of silently returning `null`.
Before: function returned `null` on some failure paths
After: throws on unexpected RPC failures when no definitive account result is available
Migration: add explicit error handling at call sites where `null` was previously assumed for all failure paths.

- `Rpc` in V2 mode uses V2-suffixed JSON-RPC methods (e.g. `getCompressedAccountV2`). Photon/compression endpoints must support the V2 API surface.

### Fixes

- Browser bundles: `AccountMeta` `isSigner`/`isWritable` flags stay boolean-compatible with `@solana/web3.js`; Terser `booleans_as_integers` disabled. (#2347)
- `PackedAccounts`: `addPreAccountsMeta()` and `insertOrGetConfig()` normalize signer/writable flags so `0`/`1` from minified or external callers are treated as booleans consistently. (#2347)

### Deprecated

- `featureFlags.isBeta`, `enableBeta`, `disableBeta` are deprecated no-ops. Use `LIGHT_PROTOCOL_VERSION` for source builds; V2 is the default for published packages.

## [0.22.0] - 2025-06-16

### Breaking Changes
Expand Down
10 changes: 10 additions & 0 deletions programs/account-compression/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Changelog

All notable changes to this package will be documented in this file.

## 2026-03-10

### Features

- V1 tree initialization now logs a deprecation warning. V1 trees will be removed in a future release. (#2329)
- Tree default values updated to match mainnet configuration. (#2124)
Comment on lines +5 to +10
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Date mismatch: PR description says 2026-03-02, changelog says 2026-03-10.

The PR title and description reference "2026-03-02" releases and "light-registry@2.2.1", but this changelog entry is dated 2026-03-10. The commit message also mentions "2026-03-10". Clarify which date is correct, or add separate entries if both releases are being documented.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@programs/account-compression/CHANGELOG.md` around lines 5 - 10, The changelog
entry currently shows "2026-03-10" but the PR title/description and commit
mention "2026-03-02" (and references light-registry@2.2.1); reconcile by
choosing the authoritative release date or by adding two separate entries:
update the date string in the CHANGELOG.md header from "2026-03-10" to
"2026-03-02" if that is the correct release, or create an additional
"2026-03-02" section describing the light-registry@2.2.1 changes and keep the
"2026-03-10" entry for the V1 tree message; ensure the PR title/description and
commit message are updated to match the chosen changelog entries so all
references (dates and light-registry@2.2.1) are consistent.

🧹 Nitpick | 🔵 Trivial

Add package name, version, and release URL for traceability.

The changelog entry lacks package metadata. Including the specific package name (e.g., account-compression@X.Y.Z) and a link to the GitHub release would make this entry self-contained for audits and version tracking.

📋 Suggested addition
 ## 2026-03-10
+
+**Package:** `account-compression@X.Y.Z`  
+**Release:** https://github.com/Lightprotocol/light-protocol/releases/tag/account-compression-vX.Y.Z

 ### Features
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## 2026-03-10
### Features
- V1 tree initialization now logs a deprecation warning. V1 trees will be removed in a future release. (#2329)
- Tree default values updated to match mainnet configuration. (#2124)
## 2026-03-10
**Package:** `account-compression@X.Y.Z`
**Release:** https://github.com/Lightprotocol/light-protocol/releases/tag/account-compression-vX.Y.Z
### Features
- V1 tree initialization now logs a deprecation warning. V1 trees will be removed in a future release. (`#2329`)
- Tree default values updated to match mainnet configuration. (`#2124`)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@programs/account-compression/CHANGELOG.md` around lines 5 - 10, Update the
CHANGELOG.md entry under "## 2026-03-10" to include the package identifier and
release link by prepending a header like "account-compression@X.Y.Z — YYYY-MM-DD
— https://github.com/…/releases/tag/vX.Y.Z"; modify the existing section that
contains the two bullet points (the V1 deprecation and tree default changes) to
remain unchanged but be clearly associated with that package/version header so
each release entry is self-contained and traceable.

23 changes: 23 additions & 0 deletions programs/compressed-token/program/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Changelog

All notable changes to this package will be documented in this file.

## 2026-03-10

### Breaking Changes

- `CreateMintInputs` now requires a `rent_sponsor` field. Mint creation charges `MINT_CREATION_FEE` (50,000 lamports), transferred from the fee payer to the `rent_sponsor`. (#2309)
Before: `CreateMintInputs { ... }` -- no rent_sponsor field.
After: `CreateMintInputs { ..., rent_sponsor: Pubkey }` -- use `MintActionMetaConfig::with_rent_sponsor()` to configure the recipient.
Migration: Add a `rent_sponsor` account to all mint creation calls and set it via `MintActionMetaConfig::with_rent_sponsor()`.

- `handle_compressible_top_up()` and `process_compressible_top_up()` now take a `FEE_PAYER_IDX` const generic. `APPROVE_PAYER_IDX` and `REVOKE_PAYER_IDX` are renamed to `OWNER_IDX`. The optional `FEE_PAYER_IDX` specifies a fee payer with fallback to the owner. (#2306)
Before: `handle_compressible_top_up::<BASE_LEN, OWNER_IDX>(...)`
After: `handle_compressible_top_up::<BASE_LEN, OWNER_IDX, FEE_PAYER_IDX>(...)`
Migration: Update const generic parameters and rename `APPROVE_PAYER_IDX`/`REVOKE_PAYER_IDX` to `OWNER_IDX` in all call sites.

### Fixes

- Additional self-transfer validation prevents invalid self-transfers. (#2292)
- `create_token_account()` now checks rent exemption before creating the account. (#2292)
- `create_ata_idempotent()` now guards against double-creation. (#2292)
Comment on lines +5 to +23
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add package name, version, and release URL.

This compressed-token changelog should include package metadata like compressed-token@X.Y.Z and a release link for traceability.

📋 Suggested addition
 ## 2026-03-10
+
+**Package:** `compressed-token@X.Y.Z`  
+**Release:** https://github.com/Lightprotocol/light-protocol/releases/tag/compressed-token-vX.Y.Z

 ### Breaking Changes
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## 2026-03-10
### Breaking Changes
- `CreateMintInputs` now requires a `rent_sponsor` field. Mint creation charges `MINT_CREATION_FEE` (50,000 lamports), transferred from the fee payer to the `rent_sponsor`. (#2309)
Before: `CreateMintInputs { ... }` -- no rent_sponsor field.
After: `CreateMintInputs { ..., rent_sponsor: Pubkey }` -- use `MintActionMetaConfig::with_rent_sponsor()` to configure the recipient.
Migration: Add a `rent_sponsor` account to all mint creation calls and set it via `MintActionMetaConfig::with_rent_sponsor()`.
- `handle_compressible_top_up()` and `process_compressible_top_up()` now take a `FEE_PAYER_IDX` const generic. `APPROVE_PAYER_IDX` and `REVOKE_PAYER_IDX` are renamed to `OWNER_IDX`. The optional `FEE_PAYER_IDX` specifies a fee payer with fallback to the owner. (#2306)
Before: `handle_compressible_top_up::<BASE_LEN, OWNER_IDX>(...)`
After: `handle_compressible_top_up::<BASE_LEN, OWNER_IDX, FEE_PAYER_IDX>(...)`
Migration: Update const generic parameters and rename `APPROVE_PAYER_IDX`/`REVOKE_PAYER_IDX` to `OWNER_IDX` in all call sites.
### Fixes
- Additional self-transfer validation prevents invalid self-transfers. (#2292)
- `create_token_account()` now checks rent exemption before creating the account. (#2292)
- `create_ata_idempotent()` now guards against double-creation. (#2292)
## 2026-03-10
**Package:** `compressed-token@X.Y.Z`
**Release:** https://github.com/Lightprotocol/light-protocol/releases/tag/compressed-token-vX.Y.Z
### Breaking Changes
- `CreateMintInputs` now requires a `rent_sponsor` field. Mint creation charges `MINT_CREATION_FEE` (50,000 lamports), transferred from the fee payer to the `rent_sponsor`. (`#2309`)
Before: `CreateMintInputs { ... }` -- no rent_sponsor field.
After: `CreateMintInputs { ..., rent_sponsor: Pubkey }` -- use `MintActionMetaConfig::with_rent_sponsor()` to configure the recipient.
Migration: Add a `rent_sponsor` account to all mint creation calls and set it via `MintActionMetaConfig::with_rent_sponsor()`.
- `handle_compressible_top_up()` and `process_compressible_top_up()` now take a `FEE_PAYER_IDX` const generic. `APPROVE_PAYER_IDX` and `REVOKE_PAYER_IDX` are renamed to `OWNER_IDX`. The optional `FEE_PAYER_IDX` specifies a fee payer with fallback to the owner. (`#2306`)
Before: `handle_compressible_top_up::<BASE_LEN, OWNER_IDX>(...)`
After: `handle_compressible_top_up::<BASE_LEN, OWNER_IDX, FEE_PAYER_IDX>(...)`
Migration: Update const generic parameters and rename `APPROVE_PAYER_IDX`/`REVOKE_PAYER_IDX` to `OWNER_IDX` in all call sites.
### Fixes
- Additional self-transfer validation prevents invalid self-transfers. (`#2292`)
- `create_token_account()` now checks rent exemption before creating the account. (`#2292`)
- `create_ata_idempotent()` now guards against double-creation. (`#2292`)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@programs/compressed-token/program/CHANGELOG.md` around lines 5 - 23, Add
package metadata to the top of the CHANGELOG entry: prepend the release title
with the package name and version (e.g., "compressed-token@X.Y.Z") and include a
release URL pointing to the release notes or tag for traceability; update the
2026-03-10 entry header to include this metadata and ensure the release URL is a
full link to the repository release/tag for that version.

42 changes: 42 additions & 0 deletions programs/registry/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Changelog

All notable changes to this package will be documented in this file.

## 2026-03-18

### Features

- `batch_append()` reimburses the forester fee payer 2x the network fee from the output queue when network_fee >= 5,000 lamports. A `fee_payer` account is now required in the instruction. (#2335)
- `batch_update_address_tree()` reimburses the forester fee payer 1x the network fee from the merkle tree when network_fee >= 5,000 lamports. A `fee_payer` account is now required in the instruction. (#2335)
- `nullify_dedup` instruction batches 2-4 nullifications in one transaction using proof deduplication.
- `nullify_2` uses a shared proof node and a 1-byte discriminator.
- Forester dedup integration adds `min_queue_items` threshold, versioned transaction support, and a transaction size fix.
- V1 state multi-nullify is disabled when the queue exceeds 10,000 items.

### Fixes

- `count_from_leaf_indices()` rejects non-trailing sentinels.

## 2026-03-10

### Breaking Changes

- `create_initialize_merkle_tree_instruction()`, `create_initialize_batched_merkle_tree_instruction()`, and `create_initialize_batched_address_merkle_tree_instruction()` now require the protocol authority as signer. The `payer` parameter is renamed to `authority` and must be `protocol_config_pda.authority`.
Before: `create_initialize_merkle_tree_instruction(payer, ...)`
After: `create_initialize_merkle_tree_instruction(authority, ...)` -- `authority` must be the protocol config authority.
Migration: Replace the payer account with the protocol authority in all tree initialization calls. (#2325)

### Features

- V1 tree initialization now logs a deprecation warning. V1 trees will be removed in a future release. (#2329)

### Fixes

- `init_v1_tree_with_custom_forester()` now correctly sets the custom forester on v1 trees. (#2319)
- `migrate_trees_ix()` no longer discards in-progress work during migration. (#2320)
Comment on lines +20 to +36
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add package name, version, and release URL to the 2026-03-10 entry.

Like the other program changelogs in this PR, the 2026-03-10 entry should include package metadata for traceability. This would mirror the suggestion made in the existing review comment for the 2026-03-02 entry below.

📋 Suggested addition
 ## 2026-03-10
+
+**Package:** `light-registry@X.Y.Z`  
+**Release:** https://github.com/Lightprotocol/light-protocol/releases/tag/light-registry-vX.Y.Z

 ### Breaking Changes
🧰 Tools
🪛 LanguageTool

[grammar] ~12-~12: Ensure spelling is correct
Context: ...ount with the protocol authority in all tree initialization calls. (#2325) ### Feat...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@programs/registry/CHANGELOG.md` around lines 5 - 21, Add package metadata
(package name, version, and release URL) to the 2026-03-10 changelog entry under
the "## 2026-03-10" heading so it matches other entries (e.g., the 2026-03-02
format); include the package name, the released version string, and a link to
the release or changelog URL directly above or below the heading to provide
traceability for the changes to create_initialize_merkle_tree_instruction(),
create_initialize_batched_merkle_tree_instruction(), and
create_initialize_batched_address_merkle_tree_instruction().


## 2026-03-02

### Features

- `is_registration_phase()` no longer enforces the registration time window check. Foresters can now register for an epoch at any time within the activation window, not only during the designated registration phase. (#2321)
Comment on lines +38 to +42
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add explicit package/version + release link in this entry for traceability.

This entry explains the change well, but it currently omits the release artifact metadata. Adding light-registry@2.2.1 and the release URL on Line 5–Line 9 would make the note self-contained for audits and downstream consumers.

Suggested doc update
 ## 2026-03-02

 ### Features

 - `is_registration_phase()` no longer enforces the registration time window check. Foresters can now register for an epoch at any time within the activation window, not only during the designated registration phase. (`#2321`)
+- Package: `light-registry@2.2.1`
+- Release: https://github.com/Lightprotocol/light-protocol/releases/tag/light-registry-v2.2.1
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## 2026-03-02
### Features
- `is_registration_phase()` no longer enforces the registration time window check. Foresters can now register for an epoch at any time within the activation window, not only during the designated registration phase. (#2321)
## 2026-03-02
### Features
- `is_registration_phase()` no longer enforces the registration time window check. Foresters can now register for an epoch at any time within the activation window, not only during the designated registration phase. (`#2321`)
- Package: `light-registry@2.2.1`
- Release: https://github.com/Lightprotocol/light-protocol/releases/tag/light-registry-v2.2.1
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@programs/registry/CHANGELOG.md` around lines 5 - 9, Update the CHANGELOG
entry for 2026-03-02 to include the package name and version and a release link
for traceability: append "light-registry@2.2.1" and the canonical release URL
(e.g. GitHub/GitLab release page) to the Features bullet that mentions
is_registration_phase(), so the entry reads as a self-contained note containing
the affected symbol (is_registration_phase()), the package
(light-registry@2.2.1) and the release artifact URL.

Comment on lines +5 to +42
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Reconcile PR description with actual changelog content.

The PR description states it "Adds release notes for 2026-03-02. Packages covered: light-registry@2.2.1", but the file contains three distinct release entries (2026-03-18, 2026-03-10, and 2026-03-02). Additionally, the commit message references "light-registry v2.3.1 (2026-03-18)", not v2.2.1. This discrepancy makes it unclear which versions correspond to which dates and hampers release traceability.

Update the PR description to accurately reflect all three dates and their associated versions, or clarify whether this PR is meant to add only one entry.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@programs/registry/CHANGELOG.md` around lines 5 - 42, The PR description and
commit metadata disagree with the CHANGELOG.md entries: the changelog contains
three release entries (2026-03-18, 2026-03-10, 2026-03-02) and the commit
mentions "light-registry v2.3.1 (2026-03-18)" while the PR description claims
"light-registry@2.2.1"; update the PR description to precisely list each release
date and its corresponding package version (or state that this PR only adds the
2026-03-02 entry and move the other dates to separate PRs), and make the commit
message / tag match the version you choose; if the intention is a single-entry
change, remove the unintended entries from CHANGELOG.md or split them into
separate commits/PRs so the PR description, commit message, and CHANGELOG.md are
consistent (references: the literal changelog entries "2026-03-18",
"2026-03-10", "2026-03-02" and the version strings "light-registry@2.2.1" /
"light-registry v2.3.1").

50 changes: 50 additions & 0 deletions programs/system/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Changelog

All notable changes to this package will be documented in this file.

## 2026-03-10

### Breaking Changes

- `COMPRESSIBLE_CONFIG_SEED` renamed to `LIGHT_CONFIG_SEED`. (#2222)
Before: `COMPRESSIBLE_CONFIG_SEED`
After: `LIGHT_CONFIG_SEED`
Migration: Update all references to `COMPRESSIBLE_CONFIG_SEED`.

- `COMPRESSIBLE_CONFIG_V1` renamed to `LIGHT_TOKEN_CONFIG`. (#2222)
Before: `COMPRESSIBLE_CONFIG_V1`
After: `LIGHT_TOKEN_CONFIG`
Migration: Update all references to `COMPRESSIBLE_CONFIG_V1`.

- In `#[light_account]`, `token::authority` renamed to `token::owner_seeds`. Owner seeds must now be constants. (#2222)
Before: `#[light_account(token::authority = ...)]`
After: `#[light_account(token::owner_seeds = ...)]`
Migration: Rename `token::authority` to `token::owner_seeds` and ensure all values are constants.

- `#[light_account(init)]` now requires a `pda_rent_sponsor` account info. (#2222)
Before: No `pda_rent_sponsor` required.
After: `pda_rent_sponsor` account must be present in instruction accounts when initializing compressed PDAs.
Migration: Add `pda_rent_sponsor` to all instruction accounts that use `#[light_account(init)]`.

- `#[derive(Compressible)]` removed from `light-sdk-macros`. (#2230)
Before: `#[derive(Compressible)]`
After: Use `#[derive(LightAccount)]` (Anchor/Solana) or `#[derive(LightProgramPinocchio)]` (Pinocchio).
Migration: Replace all `#[derive(Compressible)]` usages with the appropriate new derive macro.

### Features

- New `light-account` crate provides Anchor/Solana-specific type aliases (`CpiAccounts`, `CompressCtx`, `DecompressCtx`, `ValidatedPdaContext`, `PackedAccounts`) and re-exports all macros from `light-sdk-macros`. (#2230)
- New `light-account-pinocchio` crate provides Pinocchio-specific type aliases and re-exports `#[derive(LightProgramPinocchio)]`. (#2230)
- `AccountLoader` added for loading compressed accounts without derive macros. (#2222)
- `DECOMPRESSED_PDA_DISCRIMINATOR` constant (`[255u8; 8]`) added to `light-compressible` to mark decompressed PDA placeholder accounts. (#2208)
- Compressed mint photon API added. (#2198)
- V1 tree initialization now logs a deprecation warning. V1 trees will be removed in a future release. (#2329)

### Fixes

- `MintCloseAuthority` added to `RESTRICTED_EXTENSION_TYPES` and `has_mint_extensions()` detection. A mint with this extension could previously be compressed without `CompressOnly` mode, allowing the mint authority to close the mint and strand compressed tokens. Certora audit finding M-03. (#2263)
- `store_data()` no longer caches the incorrect owner when re-entering a cached account context. (#2277)
- V2 tree rollover balance check corrected. (#2278)
- Canonical bump is now enforced during ATA verification. (#2249)
- Batched address tree initialization now asserts tree index and queue index match. (#2318)
- System program addresses corrected. (#2298)
Comment on lines +5 to +50
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add package name, version, and release URL.

Like the other changelogs in this PR, this system program changelog lacks package metadata. Add the package name, version number, and release URL to make the entry self-contained.

📋 Suggested addition
 ## 2026-03-10
+
+**Package:** `system@X.Y.Z`  
+**Release:** https://github.com/Lightprotocol/light-protocol/releases/tag/system-vX.Y.Z

 ### Breaking Changes
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@programs/system/CHANGELOG.md` around lines 5 - 50, The changelog entry under
"## 2026-03-10" is missing package metadata; add a top-of-entry header line
containing the package name, semantic version, and a release URL (e.g.,
"package-name vX.Y.Z — https://...") so the entry is self-contained; update the
block that starts with "## 2026-03-10" to insert the new metadata line above
"### Breaking Changes" and ensure the package name and version reflect the
release and the URL points to the PR/release page.