@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-doc&#038;p=150028>
  a sioc:Post ;
  dc:title "Notes" ;
  dcterms:identifier 150028 ;
  dc:modified "2026-10-12T03:44:40Z"^^xsd:dateTime ;
  dc:created "2026-10-12T02:58:30Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-addresses/notes/> ;
  sioc:has_creator <https://lhero.org/author/1/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded """<ul class="lh_portfolio-meta"><li><strong>Part of:</strong> <a href="https://lhero.org/portfolio/lh-addresses/">LH Addresses</a></li></ul>
<h2 class="wp-block-heading">Design decisions</h2>



<ul class="wp-block-list">
<li>Users only. Organisations are users; venue addresses stay with GatherPress, which already stores and geocodes them.</li>



<li>Network-wide tables, because users are network-wide. Per-site access is expressed by uses, never by per-site tables.</li>



<li>Membership, not account, is the grant. LH Addresses does not know what membership is; LH Membership answers the read filter.</li>



<li>Geocoding lives in LH Places as a provider-agnostic service; LH Addresses only queues requests and stores the points, so its member-and-capability gate also covers the points.</li>



<li>Organisations see exact points for the addresses they were given. Rounding would protect nothing, since the full street address is already visible to them.</li>



<li>No MCP abilities of its own: address fields and near-point search belong in LH Profile Page&#8217;s user search, behind the same gate.</li>
</ul>



<h2 class="wp-block-heading">commerceguys/addressing</h2>



<p class="wp-block-paragraph">Version 2.3. <code>AddressFormat::getRequiredFields()</code> is documented as returning <code>AddressField[]</code> but returns the class&#8217;s string constant values, so <code>validate()</code> carries an inline <code>@var string[]</code> for static analysis. Subdivision mapping first matches the code or full name, then a prefix of the name without spaces (Vic, Qld).</p>



<h2 class="wp-block-heading">Migration from lh_profile-* meta</h2>



<p class="wp-block-paragraph">Planned in lh-tasks #148769: backfill each flat address as the member&#8217;s own residential address plus a use for every site they belong to; mirror the flat keys from the member&#8217;s own residential address while callers move to the API; a logged catch-all for direct meta writers and a daily drift check; retire the mirrors once nothing reads them.</p>
"""^^rdf:XMLLiteral ;
  sioc:content """Part of: LH Addresses
Design decisions




Users only. Organisations are users; venue addresses stay with GatherPress, which already stores and geocodes them.



Network-wide tables, because users are network-wide. Per-site access is expressed by uses, never by per-site tables.



Membership, not account, is the grant. LH Addresses does not know what membership is; LH Membership answers the read filter.



Geocoding lives in LH Places as a provider-agnostic service; LH Addresses only queues requests and stores the points, so its member-and-capability gate also covers the points.



Organisations see exact points for the addresses they were given. Rounding would protect nothing, since the full street address is already visible to them.



No MCP abilities of its own: address fields and near-point search belong in LH Profile Page&#8217;s user search, behind the same gate.




commerceguys/addressing



Version 2.3. AddressFormat::getRequiredFields() is documented as returning AddressField[] but returns the class&#8217;s string constant values, so validate() carries an inline @var string[] for static analysis. Subdivision mapping first matches the code or full name, then a prefix of the name without spaces (Vic, Qld).



Migration from lh_profile-* meta



Planned in lh-tasks #148769: backfill each flat address as the member&#8217;s own residential address plus a use for every site they belong to; mirror the flat keys from the member&#8217;s own residential address while callers move to the API; a logged catch-all for direct meta writers and a daily drift check; retire the mirrors once nothing reads them.
""" ;
  sioc:topic <https://lhero.org/?taxonomy=author&term=cap-1> .

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