lnurlcash-conformance 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,13 @@ Semantic versioning. While the LUD-25 draft is unmerged, `0.x` minor bumps
4
4
  may add or tighten checks that a previously-passing mint now fails; pin an
5
5
  exact version if you gate CI on the grade.
6
6
 
7
+ ## 0.11.1 - 2026-09-15
8
+
9
+ - Unsigned plain-hash Part 1 mutation outputs now pass the live grader cleanly
10
+ instead of producing an interoperability warning. Any optional legacy
11
+ signature that is returned must still verify; Part 2 `cp1` outputs still
12
+ require an amount-bearing `cs1` certificate.
13
+
7
14
  ## 0.11.0 - 2026-09-15
8
15
 
9
16
  **Amount-bearing certificates and internal-transfer discovery.** Part 2 now
package/README.md CHANGED
@@ -95,7 +95,7 @@ must survive:
95
95
  | `--echoWrongK1` | answers the informational GET with a different `k1` |
96
96
  | `--lieAboutValue=N` | reports a `maxWithdrawable` it never signed |
97
97
  | `--signatureLayout=leading` | emits the recovery id at the other end |
98
- | `--signatures=false` | issues no Part 1 signatures. Accepted as the reference mint's degraded no-signer mode; the reference wallet will refuse an unsigned successful mutation |
98
+ | `--signatures=false` | issues no optional Part 1 signatures. Unsigned plain-hash outputs are conforming; Part 2 `cp1` outputs still require certificates |
99
99
  | `--serverGeneratedSecrets` | hands back a secret it generated — the exposure `h` exists to close |
100
100
  | `--meltNeverSettles` | holds every melt in flight, so notes stay `pending` |
101
101
  | `--meltAlwaysFails` | fails every payment, restoring the note |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lnurlcash-conformance",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "Language-neutral conformance vectors, an adversarial mock mint, and a grader for LNURLcash (LUD-25) implementations",
5
5
  "author": "TheCryptoDonkey",
6
6
  "license": "MIT",
package/runner/index.mjs CHANGED
@@ -1205,12 +1205,12 @@ export const gradeNote = async (noteUrl, report, options = {}) => {
1205
1205
  : 'the signature does not verify against the advertised mintPubkey and amount'
1206
1206
 
1207
1207
  await report.check('a legacy hash mutation signature verifies when present', async () => {
1208
- // The reference mint can operate without a signing backend and then has
1209
- // no signature to return. That mode remains usable by tolerant clients,
1210
- // but the committed reference wallet requires a signature after a
1211
- // successful mutation, so omission is an interoperability warning.
1208
+ // Part 1 signatures are optional: a plain hash has no public note
1209
+ // identifier to certify without disclosing its bearer secret. Older
1210
+ // SERVICE implementations may still return one, and every signature
1211
+ // that is present must verify.
1212
1212
  if (currentSig === null) {
1213
- throw soft('unsigned legacy output: accepted as no-signer mode, but strict reference-wallet clients may refuse it')
1213
+ return 'unsigned legacy Part 1 output accepted'
1214
1214
  }
1215
1215
  assert(info.mintPubkey, 'a sig with no mintPubkey advertised verifies against nothing')
1216
1216
  assert(isCompressedPubkey(info.mintPubkey), 'mintPubkey is not a 33-byte compressed secp256k1 key')