    @prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix content: <http://purl.org/rss/1.0/modules/content/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<https://lhero.org/?post_type=lh-portfolio&#038;p=145764>
  a sioc:Post ;
  dc:title "Changelog" ;
  dcterms:identifier 145764 ;
  dc:modified "2026-08-18T13:26:48Z"^^xsd:dateTime ;
  dc:created "2026-08-18T13:26:48Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-qr-codes/changelog/> ;
  sioc:has_creator <https://lhero.org/author/1015845/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded """<h2>2.19</h2>
<p>Fixed fatal error: <code>self::</code> was used inside the nested global function <code>lh_qr_code()</code> to call <code>get_qr_png_url()</code>/<code>get_qr_svg_url()</code>/<code>return_plugin_namespace()</code>. Nested function declarations are not class methods in PHP, so <code>self::</code> is illegal there and fails at compile time. Replaced with the explicit class name <code>LH_QR_codes_plugin::</code>. This is the same bug originally fixed in 2.14; see the 2.18 note below.</p>
<h2>2.18</h2>
<p>File was modified on disk without a corresponding code-change proposal record. The only observable change from 2.17 was the version bump itself, but the <code>self::</code> nested-function bug from 2.14 was present again in this version, causing every plugin-activation attempt to fatal. Root cause of the regression is unconfirmed.</p>
<h2>2.17</h2>
<p>Reverted text domain in translation functions to method call; documented as known false positive in readme.md.</p>
<h2>2.16</h2>
<p>Fixed all PCP errors: added License header, bumped Requires at least to 6.9, updated block apiVersion to 3, removed non-existent Domain Path header, fixed EscapeOutput warnings, reverted text domain to literal strings in translation functions.</p>
<h2>2.15</h2>
<p>All translatable strings use return_plugin_text_domain() method.</p>
<h2>2.14</h2>
<p>Fixed self:: usage in global function context.</p>
<h2>2.13</h2>
<p>REST namespace derived from return_plugin_text_domain() via rest_namespace() method.</p>
<h2>2.12</h2>
<p>Ability slugs and category slug derived from return_plugin_text_domain().</p>
<h2>2.11</h2>
<p>Added identity methods and init_plugin filter gate per LocalHero plugin conventions.</p>
<h2>2.10</h2>
<p>Added VERSION constant, readme.md, error handling, GD check, block PNG scale from display size, removed dead includes file.</p>
<h2>2.09</h2>
<p>Added generate-qr-svg MCP ability returning raw SVG markup.</p>
<h2>2.08</h2>
<p>Replaced nonce-based URL protection with HMAC-SHA256 signatures.</p>
<h2>2.00</h2>
<p>Complete rewrite. REST API, rewrite endpoints, Gutenberg block, Composer autoloader.</p>
"""^^rdf:XMLLiteral ;
  sioc:content """2.19
Fixed fatal error: self:: was used inside the nested global function lh_qr_code() to call get_qr_png_url()/get_qr_svg_url()/return_plugin_namespace(). Nested function declarations are not class methods in PHP, so self:: is illegal there and fails at compile time. Replaced with the explicit class name LH_QR_codes_plugin::. This is the same bug originally fixed in 2.14; see the 2.18 note below.
2.18
File was modified on disk without a corresponding code-change proposal record. The only observable change from 2.17 was the version bump itself, but the self:: nested-function bug from 2.14 was present again in this version, causing every plugin-activation attempt to fatal. Root cause of the regression is unconfirmed.
2.17
Reverted text domain in translation functions to method call; documented as known false positive in readme.md.
2.16
Fixed all PCP errors: added License header, bumped Requires at least to 6.9, updated block apiVersion to 3, removed non-existent Domain Path header, fixed EscapeOutput warnings, reverted text domain to literal strings in translation functions.
2.15
All translatable strings use return_plugin_text_domain() method.
2.14
Fixed self:: usage in global function context.
2.13
REST namespace derived from return_plugin_text_domain() via rest_namespace() method.
2.12
Ability slugs and category slug derived from return_plugin_text_domain().
2.11
Added identity methods and init_plugin filter gate per LocalHero plugin conventions.
2.10
Added VERSION constant, readme.md, error handling, GD check, block PNG scale from display size, removed dead includes file.
2.09
Added generate-qr-svg MCP ability returning raw SVG markup.
2.08
Replaced nonce-based URL protection with HMAC-SHA256 signatures.
2.00
Complete rewrite. REST API, rewrite endpoints, Gutenberg block, Composer autoloader.
""" ;
  sioc:topic <https://lhero.org/lh_portfolio-type/doc-section/>, <https://lhero.org/?taxonomy=author&term=cap-1015845> .

<https://lhero.org/author/1015845/#account> rdfs:seeAlso <https://lhero.org/author/1015845/?feed=lhrdf&format=turtle> .
<https://lhero.org/lh_portfolio-type/doc-section/> rdfs:seeAlso <https://lhero.org/lh_portfolio-type/doc-section/?feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=author&term=cap-1015845> rdfs:seeAlso <https://lhero.org/?taxonomy=author&term=cap-1015845&feed=lhrdf&format=turtle> .
