Skip to content
Merged
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

Large diffs are not rendered by default.

18 changes: 13 additions & 5 deletions .claude/harvest/osm-website-rs/crates/osm-domain/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,25 @@
//! - [`generated`] — the 50 rendered domain **structs** (THINK arm): associations
//! become typed edge fields (`belongs_to → Option<u64>`, `has_many → Vec<u64>`),
//! each with a `new(..)` constructor.
//! - [`osm`] — the **DO arm**: controller actions as standalone
//! `osm::<part_of>::<is_a>(input)` free functions (`osm::map::render(..)`),
//! NOT methods on the structs.
//! - [`controllers`] — the **DO arm**: a faithful mirror of `app/controllers/`.
//! Each module is a source controller by its own verbatim (snake) name
//! (`NodesController → nodes`, `MapController → map` — no singularisation);
//! each fn is an `is_a` action (`show`, `render`, …), standalone, NOT a method
//! on the record. The controller modules are re-exported at the crate root, so
//! `osm_domain::controllers::nodes::show(input)` and the re-exported
//! `osm_domain::nodes::show(input)` both resolve.
//!
//! Rendered by `ogar-render-askama`; do not edit by hand. [`HARVESTED_CLASSES`]
//! is the flat inventory.

pub mod generated;

#[path = "generated/actions.rs"]
pub mod osm;
#[path = "generated/controllers.rs"]
pub mod controllers;

// Re-export the controller modules at the crate root — the ergonomic surface
// over the faithful mirror (`osm_domain::nodes::show` ≡ `controllers::nodes::show`).
pub use controllers::*;

/// The 50 classes harvested from `openstreetmap-website@173885c1` `app/models`,
/// in the order OGAR lifted them. Each maps to a rendered domain module.
Expand Down
598 changes: 299 additions & 299 deletions .claude/harvest/osm-website-rs/harvest/osm_actions.rail

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions .claude/harvest/osm-website-rs/python/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
__pycache__/
*.pyc
41 changes: 41 additions & 0 deletions .claude/harvest/osm-website-rs/python/ogar_sdk.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
"""ogar_sdk — thin Python client over the OGAR codebook substrate.

The Python mirror of Rust `lance_graph_contract::ogar_codebook`: pull a concept's
stable classid, or compose a render-classid with an app prefix. Domain-agnostic —
OSM (0x0F) and odoo/commerce (0x02) pull identically.

>>> from ogar_sdk import class_id, render_classid
>>> class_id("osm_node")
3841
>>> hex(render_classid("account_move", 0x0002)) # odoo, canon-high
'0x2020002'
"""
from typing import Optional

# The pulled substrate — a subset of ogar-vocab's CODEBOOK (concept -> u16 id).
CODEBOOK = {
# 0x0F — Geo (OpenStreetMap)
"osm_node": 0x0F01, "osm_way": 0x0F02, "osm_relation": 0x0F03,
"osm_changeset": 0x0F04, "osm_element_tag": 0x0F05, "osm_relation_member": 0x0F06,
"osm_way_node": 0x0F07, "osm_note": 0x0F08, "osm_gpx_trace": 0x0F09, "osm_user": 0x0F0A,
# 0x02 — Commerce (odoo / ERP) — same pull, different domain
"commercial_document": 0x0202, "product": 0x0207, "accounting_account": 0x0208,
}
# Convenience alias used in the odoo docstring example.
CODEBOOK["account_move"] = CODEBOOK["commercial_document"]


def class_id(concept: str) -> Optional[int]:
"""Resolve a canonical-concept string to its stable u16 codebook id."""
return CODEBOOK.get(concept)


def render_classid(concept: str, app_prefix: int) -> Optional[int]:
"""Compose a 32-bit render classid: canon (concept) HIGH, custom (prefix) LOW.

Mirrors the post-2026-07-02 canon-high flip: `(concept << 16) | prefix`.
"""
cid = class_id(concept)
if cid is None:
return None
return (cid << 16) | (app_prefix & 0xFFFF)
122 changes: 122 additions & 0 deletions .claude/harvest/osm-website-rs/python/osm/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
"""@generated OSM package (ruff → OGAR, Python import shape).
Models: `from osm.models import Node`.
DO arm (faithful): `osm.controllers.nodes.show(inp)`.
DO arm (re-exported): `osm.nodes.show(inp)`.
"""
from . import models as models
from . import controllers as controllers
from .controllers import accounts as accounts
from .controllers import active_lists as active_lists
from .controllers import advanced_preferences as advanced_preferences
from .controllers import api as api
from .controllers import application as application
from .controllers import basic_preferences as basic_preferences
from .controllers import capabilities as capabilities
from .controllers import changeset_comments as changeset_comments
from .controllers import changeset_subscriptions as changeset_subscriptions
from .controllers import changesets as changesets
from .controllers import closes as closes
from .controllers import companies as companies
from .controllers import confirmations as confirmations
from .controllers import dashboards as dashboards
from .controllers import data as data
from .controllers import deletions as deletions
from .controllers import descriptions as descriptions
from .controllers import diary_comments as diary_comments
from .controllers import diary_entries as diary_entries
from .controllers import directions as directions
from .controllers import downloads as downloads
from .controllers import errors as errors
from .controllers import export as export
from .controllers import feature_queries as feature_queries
from .controllers import feeds as feeds
from .controllers import follows as follows
from .controllers import heatmaps as heatmaps
from .controllers import homes as homes
from .controllers import icons as icons
from .controllers import images as images
from .controllers import inboxes as inboxes
from .controllers import issue_comments as issue_comments
from .controllers import issued_blocks as issued_blocks
from .controllers import issues as issues
from .controllers import languages_panes as languages_panes
from .controllers import latlon_queries as latlon_queries
from .controllers import layers_panes as layers_panes
from .controllers import legend_panes as legend_panes
from .controllers import links as links
from .controllers import lists as lists
from .controllers import locations as locations
from .controllers import mailboxes as mailboxes
from .controllers import maps as maps
from .controllers import messages as messages
from .controllers import muted_inboxes as muted_inboxes
from .controllers import mutes as mutes
from .controllers import nodes as nodes
from .controllers import nominatim_queries as nominatim_queries
from .controllers import nominatim_reverse_queries as nominatim_reverse_queries
from .controllers import note_subscriptions as note_subscriptions
from .controllers import notes as notes
from .controllers import notification_preferences as notification_preferences
from .controllers import oauth2_applications as oauth2_applications
from .controllers import old_elements as old_elements
from .controllers import old_nodes as old_nodes
from .controllers import old_relation_members as old_relation_members
from .controllers import old_relations as old_relations
from .controllers import old_ways as old_ways
from .controllers import outboxes as outboxes
from .controllers import passwords as passwords
from .controllers import pd_declarations as pd_declarations
from .controllers import permissions as permissions
from .controllers import pictures as pictures
from .controllers import preferences as preferences
from .controllers import profile_sections as profile_sections
from .controllers import queries as queries
from .controllers import read_marks as read_marks
from .controllers import received_blocks as received_blocks
from .controllers import redactions as redactions
from .controllers import relation_members as relation_members
from .controllers import relations as relations
from .controllers import replies as replies
from .controllers import reporters as reporters
from .controllers import reports as reports
from .controllers import searches as searches
from .controllers import sessions as sessions
from .controllers import share_panes as share_panes
from .controllers import site as site
from .controllers import statuses as statuses
from .controllers import terms as terms
from .controllers import tracepoints as tracepoints
from .controllers import traces as traces
from .controllers import uploads as uploads
from .controllers import user_blocks as user_blocks
from .controllers import user_mutes as user_mutes
from .controllers import user_preferences as user_preferences
from .controllers import user_roles as user_roles
from .controllers import users as users
from .controllers import versions as versions
from .controllers import visibilities as visibilities
from .controllers import ways as ways
from .controllers import webgl_error_panes as webgl_error_panes

CLASS_IDS = {
"Changeset": 0x0F04,
"Node": 0x0F01,
"NodeTag": 0x0F05,
"Note": 0x0F08,
"OldNode": 0x0F01,
"OldNodeTag": 0x0F05,
"OldRelation": 0x0F03,
"OldRelationMember": 0x0F06,
"OldRelationTag": 0x0F05,
"OldWay": 0x0F02,
"OldWayNode": 0x0F07,
"OldWayTag": 0x0F05,
"Relation": 0x0F03,
"RelationMember": 0x0F06,
"RelationTag": 0x0F05,
"Trace": 0x0F09,
"User": 0x0F0A,
"Way": 0x0F02,
"WayNode": 0x0F07,
"WayTag": 0x0F05,
}
95 changes: 95 additions & 0 deletions .claude/harvest/osm-website-rs/python/osm/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
"""@generated `controllers` subpackage — faithful 1:1 mirror of
`app/controllers/`, each module named by its controller (verbatim).
"""
from . import accounts as accounts
from . import active_lists as active_lists
from . import advanced_preferences as advanced_preferences
from . import api as api
from . import application as application
from . import basic_preferences as basic_preferences
from . import capabilities as capabilities
from . import changeset_comments as changeset_comments
from . import changeset_subscriptions as changeset_subscriptions
from . import changesets as changesets
from . import closes as closes
from . import companies as companies
from . import confirmations as confirmations
from . import dashboards as dashboards
from . import data as data
from . import deletions as deletions
from . import descriptions as descriptions
from . import diary_comments as diary_comments
from . import diary_entries as diary_entries
from . import directions as directions
from . import downloads as downloads
from . import errors as errors
from . import export as export
from . import feature_queries as feature_queries
from . import feeds as feeds
from . import follows as follows
from . import heatmaps as heatmaps
from . import homes as homes
from . import icons as icons
from . import images as images
from . import inboxes as inboxes
from . import issue_comments as issue_comments
from . import issued_blocks as issued_blocks
from . import issues as issues
from . import languages_panes as languages_panes
from . import latlon_queries as latlon_queries
from . import layers_panes as layers_panes
from . import legend_panes as legend_panes
from . import links as links
from . import lists as lists
from . import locations as locations
from . import mailboxes as mailboxes
from . import maps as maps
from . import messages as messages
from . import muted_inboxes as muted_inboxes
from . import mutes as mutes
from . import nodes as nodes
from . import nominatim_queries as nominatim_queries
from . import nominatim_reverse_queries as nominatim_reverse_queries
from . import note_subscriptions as note_subscriptions
from . import notes as notes
from . import notification_preferences as notification_preferences
from . import oauth2_applications as oauth2_applications
from . import old_elements as old_elements
from . import old_nodes as old_nodes
from . import old_relation_members as old_relation_members
from . import old_relations as old_relations
from . import old_ways as old_ways
from . import outboxes as outboxes
from . import passwords as passwords
from . import pd_declarations as pd_declarations
from . import permissions as permissions
from . import pictures as pictures
from . import preferences as preferences
from . import profile_sections as profile_sections
from . import queries as queries
from . import read_marks as read_marks
from . import received_blocks as received_blocks
from . import redactions as redactions
from . import relation_members as relation_members
from . import relations as relations
from . import replies as replies
from . import reporters as reporters
from . import reports as reports
from . import searches as searches
from . import sessions as sessions
from . import share_panes as share_panes
from . import site as site
from . import statuses as statuses
from . import terms as terms
from . import tracepoints as tracepoints
from . import traces as traces
from . import uploads as uploads
from . import user_blocks as user_blocks
from . import user_mutes as user_mutes
from . import user_preferences as user_preferences
from . import user_roles as user_roles
from . import users as users
from . import versions as versions
from . import visibilities as visibilities
from . import ways as ways
from . import webgl_error_panes as webgl_error_panes
22 changes: 22 additions & 0 deletions .claude/harvest/osm-website-rs/python/osm/controllers/accounts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""@generated DO arm — faithful mirror of the `accounts` controller.
`osm.controllers.accounts.<is_a>(inp)` free functions (re-exported as
`osm.accounts`); standalone, not methods on the model. Call:
`osm.controllers.accounts.show(inp)`.
"""
from typing import Any

Input = dict # the Rails params bag; typed params are the next ruff brick
Output = Any

def delete(inp: Input) -> Output:
"""`accounts:delete` — DO arm. Source: AccountsController#destroy."""
raise NotImplementedError("port AccountsController#destroy")

def show(inp: Input) -> Output:
"""`accounts:show` — DO arm. Source: AccountsController#show."""
raise NotImplementedError("port AccountsController#show")

def update(inp: Input) -> Output:
"""`accounts:update` — DO arm. Source: AccountsController#update."""
raise NotImplementedError("port AccountsController#update")

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
"""@generated DO arm — faithful mirror of the `active_lists` controller.
`osm.controllers.active_lists.<is_a>(inp)` free functions (re-exported as
`osm.active_lists`); standalone, not methods on the model. Call:
`osm.controllers.active_lists.show(inp)`.
"""
from typing import Any

Input = dict # the Rails params bag; typed params are the next ruff brick
Output = Any

def show(inp: Input) -> Output:
"""`active_lists:show` — DO arm. Source: Api::UserBlocks::ActiveListsController#show."""
raise NotImplementedError("port Api::UserBlocks::ActiveListsController#show")

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
"""@generated DO arm — faithful mirror of the `advanced_preferences` controller.
`osm.controllers.advanced_preferences.<is_a>(inp)` free functions (re-exported as
`osm.advanced_preferences`); standalone, not methods on the model. Call:
`osm.controllers.advanced_preferences.show(inp)`.
"""
from typing import Any

Input = dict # the Rails params bag; typed params are the next ruff brick
Output = Any

def update_preferences(inp: Input) -> Output:
"""`advanced_preferences:update_preferences` — DO arm. Source: Preferences::AdvancedPreferencesController#update_preferences."""
raise NotImplementedError("port Preferences::AdvancedPreferencesController#update_preferences")

50 changes: 50 additions & 0 deletions .claude/harvest/osm-website-rs/python/osm/controllers/api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
"""@generated DO arm — faithful mirror of the `api` controller.
`osm.controllers.api.<is_a>(inp)` free functions (re-exported as
`osm.api`); standalone, not methods on the model. Call:
`osm.controllers.api.show(inp)`.
"""
from typing import Any

Input = dict # the Rails params bag; typed params are the next ruff brick
Output = Any

def api_call_handle_error(inp: Input) -> Output:
"""`api:api_call_handle_error` — DO arm. Source: ApiController#api_call_handle_error."""
raise NotImplementedError("port ApiController#api_call_handle_error")

def api_call_timeout(inp: Input) -> Output:
"""`api:api_call_timeout` — DO arm. Source: ApiController#api_call_timeout."""
raise NotImplementedError("port ApiController#api_call_timeout")

def authorize(inp: Input) -> Output:
"""`api:authorize` — DO arm. Source: ApiController#authorize."""
raise NotImplementedError("port ApiController#authorize")

def check_rate_limit(inp: Input) -> Output:
"""`api:check_rate_limit` — DO arm. Source: ApiController#check_rate_limit."""
raise NotImplementedError("port ApiController#check_rate_limit")

def current_ability(inp: Input) -> Output:
"""`api:current_ability` — DO arm. Source: ApiController#current_ability."""
raise NotImplementedError("port ApiController#current_ability")

def deny_access(inp: Input) -> Output:
"""`api:deny_access` — DO arm. Source: ApiController#deny_access."""
raise NotImplementedError("port ApiController#deny_access")

def gpx_status(inp: Input) -> Output:
"""`api:gpx_status` — DO arm. Source: ApiController#gpx_status."""
raise NotImplementedError("port ApiController#gpx_status")

def scope_enabled(inp: Input) -> Output:
"""`api:scope_enabled?` — DO arm. Source: ApiController#scope_enabled?."""
raise NotImplementedError("port ApiController#scope_enabled?")

def set_request_formats(inp: Input) -> Output:
"""`api:set_request_formats` — DO arm. Source: ApiController#set_request_formats."""
raise NotImplementedError("port ApiController#set_request_formats")

def setup_user_auth(inp: Input) -> Output:
"""`api:setup_user_auth` — DO arm. Source: ApiController#setup_user_auth."""
raise NotImplementedError("port ApiController#setup_user_auth")

Loading
Loading