diff --git a/README.md b/README.md index 90e9dae..8af330d 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,15 @@ Use the [concept guidelines](docs/concepts.md) to place experiments by engineeri | Experiment | Purpose | | --- | --- | -| [API client CLI / TMDB + Cobra](api-client-cli/tmdb/go-cobra/) | Explore a typed API client behind a Cobra command interface. | -| [API wrapper / cached weather + `net/http`](api-wrapper/cached-weather/go-net-http/) | Wrap a weather API with Redis caching and per-IP rate limiting. | | [Application scaffolding / Express Generator](application-scaffolding/express-generator/node-express/) | Record the conventional routers, views, middleware, and error boundaries generated for Express. | | [Batch processing / generic jobs with GoBatch](batch-processing/generic-jobs/go-gobatch/) | Preserve a parked reader-processor-writer and partitioning proof of concept. | | [Batch processing / Spring Batch log aggregation](batch-processing/log-aggregation/java-spring-batch/) | Import CSV log records through a chunk-oriented batch job. | | [Content management / Markdown notes with SQLite](content-management/markdown-notes/go-sqlite/) | Persist notes behind a repository boundary with a framework-free client. | | [Database sharding / order service with Spring and ShardingSphere](database-sharding/order-service/java-spring-shardingsphere/) | Route orders across two MySQL databases by order ID parity. | -| [Declarative desktop UI / Qt Quick + PySide6](declarative-desktop-ui/qt-quick/python-pyside6/) | Compare a QML view with a minimal Python bootstrap. | -| [Event-driven desktop UI / Qt Widgets + PySide6](event-driven-desktop-ui/qt-widgets/python-pyside6/) | Demonstrate widget composition and signal-slot interaction. | +| [Desktop UI architecture / Qt Quick + PySide6](desktop-ui-architecture/qt-quick/python-pyside6/) | Compare a QML view with a minimal Python bootstrap. | +| [Desktop UI architecture / Qt Widgets + PySide6](desktop-ui-architecture/qt-widgets/python-pyside6/) | Demonstrate widget composition and signal-slot interaction. | +| [External service integration / cached weather + `net/http`](external-service-integration/cached-weather/go-net-http/) | Wrap a weather API with Redis caching and per-IP rate limiting. | +| [External service integration / TMDB + Cobra](external-service-integration/tmdb/go-cobra/) | Explore a typed API client behind a Cobra command interface. | | [HTTP QUERY / Node.js + Fastify](http-query-rfc/node-fastify/) | Explore body-bearing HTTP QUERY requests with Fastify. | | [In-memory storage / HTTP key-value store](in-memory-storage/key-value-store/go-http/) | Expose a concurrent map through HTTP with Prometheus instrumentation. | | [Numeric precision / money with decimal libraries](numeric-precision/money/go-decimal/) | Compare floating-point pitfalls with rational and decimal representations. | diff --git a/declarative-desktop-ui/qt-quick/python-pyside6/README.md b/desktop-ui-architecture/qt-quick/python-pyside6/README.md similarity index 100% rename from declarative-desktop-ui/qt-quick/python-pyside6/README.md rename to desktop-ui-architecture/qt-quick/python-pyside6/README.md diff --git a/declarative-desktop-ui/qt-quick/python-pyside6/main.py b/desktop-ui-architecture/qt-quick/python-pyside6/main.py similarity index 100% rename from declarative-desktop-ui/qt-quick/python-pyside6/main.py rename to desktop-ui-architecture/qt-quick/python-pyside6/main.py diff --git a/declarative-desktop-ui/qt-quick/python-pyside6/main.qml b/desktop-ui-architecture/qt-quick/python-pyside6/main.qml similarity index 100% rename from declarative-desktop-ui/qt-quick/python-pyside6/main.qml rename to desktop-ui-architecture/qt-quick/python-pyside6/main.qml diff --git a/declarative-desktop-ui/qt-quick/python-pyside6/pyproject.toml b/desktop-ui-architecture/qt-quick/python-pyside6/pyproject.toml similarity index 100% rename from declarative-desktop-ui/qt-quick/python-pyside6/pyproject.toml rename to desktop-ui-architecture/qt-quick/python-pyside6/pyproject.toml diff --git a/declarative-desktop-ui/qt-quick/python-pyside6/requirements.txt b/desktop-ui-architecture/qt-quick/python-pyside6/requirements.txt similarity index 100% rename from declarative-desktop-ui/qt-quick/python-pyside6/requirements.txt rename to desktop-ui-architecture/qt-quick/python-pyside6/requirements.txt diff --git a/event-driven-desktop-ui/qt-widgets/python-pyside6/README.md b/desktop-ui-architecture/qt-widgets/python-pyside6/README.md similarity index 100% rename from event-driven-desktop-ui/qt-widgets/python-pyside6/README.md rename to desktop-ui-architecture/qt-widgets/python-pyside6/README.md diff --git a/event-driven-desktop-ui/qt-widgets/python-pyside6/hello_world.py b/desktop-ui-architecture/qt-widgets/python-pyside6/hello_world.py similarity index 100% rename from event-driven-desktop-ui/qt-widgets/python-pyside6/hello_world.py rename to desktop-ui-architecture/qt-widgets/python-pyside6/hello_world.py diff --git a/event-driven-desktop-ui/qt-widgets/python-pyside6/pyproject.toml b/desktop-ui-architecture/qt-widgets/python-pyside6/pyproject.toml similarity index 100% rename from event-driven-desktop-ui/qt-widgets/python-pyside6/pyproject.toml rename to desktop-ui-architecture/qt-widgets/python-pyside6/pyproject.toml diff --git a/event-driven-desktop-ui/qt-widgets/python-pyside6/requirements.txt b/desktop-ui-architecture/qt-widgets/python-pyside6/requirements.txt similarity index 100% rename from event-driven-desktop-ui/qt-widgets/python-pyside6/requirements.txt rename to desktop-ui-architecture/qt-widgets/python-pyside6/requirements.txt diff --git a/event-driven-desktop-ui/qt-widgets/python-pyside6/widget.py b/desktop-ui-architecture/qt-widgets/python-pyside6/widget.py similarity index 100% rename from event-driven-desktop-ui/qt-widgets/python-pyside6/widget.py rename to desktop-ui-architecture/qt-widgets/python-pyside6/widget.py diff --git a/docs/concepts.md b/docs/concepts.md index d4e776e..307bac3 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -23,8 +23,8 @@ The taxonomy reflects current experiment evidence. It can evolve when new experi | --- | --- | --- | --- | | `application-boundaries` | Application bootstrap, layering, or responsibility and dependency boundaries. | Protocol semantics or storage algorithms. | [Express Hello World](../web-framework-basics/hello-world/node-express/), [Express Generator](../application-scaffolding/express-generator/node-express/), [Markdown notes](../content-management/markdown-notes/go-sqlite/), [TODO service](../rest-api/todo-service/node-express-sequelize/) | | `batch-processing` | Staged jobs, chunks, partitioning, or execution metadata. | Request-response APIs or general application layering without a batch lifecycle. | [GoBatch generic jobs](../batch-processing/generic-jobs/go-gobatch/), [Spring Batch log aggregation](../batch-processing/log-aggregation/java-spring-batch/) | -| `desktop-ui-architecture` | Desktop UI composition, responsibility boundaries, or event flow. | Web delivery or non-UI application structure. | [Qt Quick](../declarative-desktop-ui/qt-quick/python-pyside6/), [Qt Widgets](../event-driven-desktop-ui/qt-widgets/python-pyside6/) | -| `external-service-integration` | Consuming, adapting, caching, rate-limiting, or otherwise protecting access to an upstream service. | HTTP behavior owned by the local service or storage as the primary concern. | [TMDB client CLI](../api-client-cli/tmdb/go-cobra/), [cached weather](../api-wrapper/cached-weather/go-net-http/) | +| `desktop-ui-architecture` | Desktop UI composition, responsibility boundaries, or event flow. | Web delivery or non-UI application structure. | [Qt Quick](../desktop-ui-architecture/qt-quick/python-pyside6/), [Qt Widgets](../desktop-ui-architecture/qt-widgets/python-pyside6/) | +| `external-service-integration` | Consuming, adapting, caching, rate-limiting, or otherwise protecting access to an upstream service. | HTTP behavior owned by the local service or storage as the primary concern. | [TMDB client CLI](../external-service-integration/tmdb/go-cobra/), [cached weather](../external-service-integration/cached-weather/go-net-http/) | | `http-semantics-and-contracts` | HTTP method semantics, routing, request validation, representations, or API contracts. | General application layering, upstream adaptation, or storage internals. | [HTTP QUERY](../http-query-rfc/node-fastify/), [Chi routing CRUD/proxy](../rest-api/routing-crud/go-chi/), [DNF history](../rest-api/system-history/python-fastapi/), [FastAPI validation](../web-framework-basics/request-validation/python-fastapi/) | | `storage-architecture` | Storage semantics, topology, concurrency, or partitioning where storage itself is the primary subject. | Persistence used only as an implementation detail behind application boundaries. | [in-memory key-value store](../in-memory-storage/key-value-store/go-http/), [database sharding](../database-sharding/order-service/java-spring-shardingsphere/) | | `numeric-precision` | Numeric representation, arithmetic correctness, rounding, or precision tradeoffs. | Domain modeling where numeric behavior is incidental. | [money representations](../numeric-precision/money/go-decimal/) | @@ -53,4 +53,4 @@ If any statement is false, reuse the closest existing concept and clarify the ex ## Migration status -Current directory paths remain unchanged for now. This guide defines the target classification model; any directory move requires a separate reviewed change that updates affected links and automation. +The Qt Quick and Qt Widgets experiments now use the `desktop-ui-architecture` directory. The TMDB client and cached weather experiments now use the `external-service-integration` directory. Other experiments retain their current paths until their separately reviewed migration slices update affected links and automation. diff --git a/api-wrapper/cached-weather/go-net-http/.air.toml b/external-service-integration/cached-weather/go-net-http/.air.toml similarity index 100% rename from api-wrapper/cached-weather/go-net-http/.air.toml rename to external-service-integration/cached-weather/go-net-http/.air.toml diff --git a/api-wrapper/cached-weather/go-net-http/.gitignore b/external-service-integration/cached-weather/go-net-http/.gitignore similarity index 100% rename from api-wrapper/cached-weather/go-net-http/.gitignore rename to external-service-integration/cached-weather/go-net-http/.gitignore diff --git a/api-wrapper/cached-weather/go-net-http/API_Specification_v1.yml b/external-service-integration/cached-weather/go-net-http/API_Specification_v1.yml similarity index 100% rename from api-wrapper/cached-weather/go-net-http/API_Specification_v1.yml rename to external-service-integration/cached-weather/go-net-http/API_Specification_v1.yml diff --git a/api-wrapper/cached-weather/go-net-http/README.md b/external-service-integration/cached-weather/go-net-http/README.md similarity index 100% rename from api-wrapper/cached-weather/go-net-http/README.md rename to external-service-integration/cached-weather/go-net-http/README.md diff --git a/api-wrapper/cached-weather/go-net-http/Taskfile.yml b/external-service-integration/cached-weather/go-net-http/Taskfile.yml similarity index 100% rename from api-wrapper/cached-weather/go-net-http/Taskfile.yml rename to external-service-integration/cached-weather/go-net-http/Taskfile.yml diff --git a/api-wrapper/cached-weather/go-net-http/_devenv/docker-compose.yml b/external-service-integration/cached-weather/go-net-http/_devenv/docker-compose.yml similarity index 100% rename from api-wrapper/cached-weather/go-net-http/_devenv/docker-compose.yml rename to external-service-integration/cached-weather/go-net-http/_devenv/docker-compose.yml diff --git a/api-wrapper/cached-weather/go-net-http/api_test.http b/external-service-integration/cached-weather/go-net-http/api_test.http similarity index 100% rename from api-wrapper/cached-weather/go-net-http/api_test.http rename to external-service-integration/cached-weather/go-net-http/api_test.http diff --git a/api-wrapper/cached-weather/go-net-http/cache/cache.go b/external-service-integration/cached-weather/go-net-http/cache/cache.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/cache/cache.go rename to external-service-integration/cached-weather/go-net-http/cache/cache.go diff --git a/api-wrapper/cached-weather/go-net-http/config.properties b/external-service-integration/cached-weather/go-net-http/config.properties similarity index 100% rename from api-wrapper/cached-weather/go-net-http/config.properties rename to external-service-integration/cached-weather/go-net-http/config.properties diff --git a/api-wrapper/cached-weather/go-net-http/config/config.go b/external-service-integration/cached-weather/go-net-http/config/config.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/config/config.go rename to external-service-integration/cached-weather/go-net-http/config/config.go diff --git a/api-wrapper/cached-weather/go-net-http/example.env.txt b/external-service-integration/cached-weather/go-net-http/example.env.txt similarity index 100% rename from api-wrapper/cached-weather/go-net-http/example.env.txt rename to external-service-integration/cached-weather/go-net-http/example.env.txt diff --git a/api-wrapper/cached-weather/go-net-http/go.mod b/external-service-integration/cached-weather/go-net-http/go.mod similarity index 100% rename from api-wrapper/cached-weather/go-net-http/go.mod rename to external-service-integration/cached-weather/go-net-http/go.mod diff --git a/api-wrapper/cached-weather/go-net-http/go.sum b/external-service-integration/cached-weather/go-net-http/go.sum similarity index 100% rename from api-wrapper/cached-weather/go-net-http/go.sum rename to external-service-integration/cached-weather/go-net-http/go.sum diff --git a/api-wrapper/cached-weather/go-net-http/handlers/ping.go b/external-service-integration/cached-weather/go-net-http/handlers/ping.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/handlers/ping.go rename to external-service-integration/cached-weather/go-net-http/handlers/ping.go diff --git a/api-wrapper/cached-weather/go-net-http/handlers/weather.go b/external-service-integration/cached-weather/go-net-http/handlers/weather.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/handlers/weather.go rename to external-service-integration/cached-weather/go-net-http/handlers/weather.go diff --git a/api-wrapper/cached-weather/go-net-http/main.go b/external-service-integration/cached-weather/go-net-http/main.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/main.go rename to external-service-integration/cached-weather/go-net-http/main.go diff --git a/api-wrapper/cached-weather/go-net-http/ratelimit/ratelimit.go b/external-service-integration/cached-weather/go-net-http/ratelimit/ratelimit.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/ratelimit/ratelimit.go rename to external-service-integration/cached-weather/go-net-http/ratelimit/ratelimit.go diff --git a/api-wrapper/cached-weather/go-net-http/redisclient/redisclient.go b/external-service-integration/cached-weather/go-net-http/redisclient/redisclient.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/redisclient/redisclient.go rename to external-service-integration/cached-weather/go-net-http/redisclient/redisclient.go diff --git a/api-wrapper/cached-weather/go-net-http/types/errors.go b/external-service-integration/cached-weather/go-net-http/types/errors.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/types/errors.go rename to external-service-integration/cached-weather/go-net-http/types/errors.go diff --git a/api-wrapper/cached-weather/go-net-http/weather/weather.go b/external-service-integration/cached-weather/go-net-http/weather/weather.go similarity index 100% rename from api-wrapper/cached-weather/go-net-http/weather/weather.go rename to external-service-integration/cached-weather/go-net-http/weather/weather.go diff --git a/api-client-cli/tmdb/go-cobra/.env.example b/external-service-integration/tmdb/go-cobra/.env.example similarity index 100% rename from api-client-cli/tmdb/go-cobra/.env.example rename to external-service-integration/tmdb/go-cobra/.env.example diff --git a/api-client-cli/tmdb/go-cobra/.gitignore b/external-service-integration/tmdb/go-cobra/.gitignore similarity index 100% rename from api-client-cli/tmdb/go-cobra/.gitignore rename to external-service-integration/tmdb/go-cobra/.gitignore diff --git a/api-client-cli/tmdb/go-cobra/README.md b/external-service-integration/tmdb/go-cobra/README.md similarity index 100% rename from api-client-cli/tmdb/go-cobra/README.md rename to external-service-integration/tmdb/go-cobra/README.md diff --git a/api-client-cli/tmdb/go-cobra/Taskfile.yml b/external-service-integration/tmdb/go-cobra/Taskfile.yml similarity index 100% rename from api-client-cli/tmdb/go-cobra/Taskfile.yml rename to external-service-integration/tmdb/go-cobra/Taskfile.yml diff --git a/api-client-cli/tmdb/go-cobra/api.http b/external-service-integration/tmdb/go-cobra/api.http similarity index 100% rename from api-client-cli/tmdb/go-cobra/api.http rename to external-service-integration/tmdb/go-cobra/api.http diff --git a/api-client-cli/tmdb/go-cobra/cmd/movies/movies.go b/external-service-integration/tmdb/go-cobra/cmd/movies/movies.go similarity index 100% rename from api-client-cli/tmdb/go-cobra/cmd/movies/movies.go rename to external-service-integration/tmdb/go-cobra/cmd/movies/movies.go diff --git a/api-client-cli/tmdb/go-cobra/cmd/root.go b/external-service-integration/tmdb/go-cobra/cmd/root.go similarity index 100% rename from api-client-cli/tmdb/go-cobra/cmd/root.go rename to external-service-integration/tmdb/go-cobra/cmd/root.go diff --git a/api-client-cli/tmdb/go-cobra/example-response-movie-now-playing-list.json b/external-service-integration/tmdb/go-cobra/example-response-movie-now-playing-list.json similarity index 100% rename from api-client-cli/tmdb/go-cobra/example-response-movie-now-playing-list.json rename to external-service-integration/tmdb/go-cobra/example-response-movie-now-playing-list.json diff --git a/api-client-cli/tmdb/go-cobra/go.mod b/external-service-integration/tmdb/go-cobra/go.mod similarity index 100% rename from api-client-cli/tmdb/go-cobra/go.mod rename to external-service-integration/tmdb/go-cobra/go.mod diff --git a/api-client-cli/tmdb/go-cobra/go.sum b/external-service-integration/tmdb/go-cobra/go.sum similarity index 100% rename from api-client-cli/tmdb/go-cobra/go.sum rename to external-service-integration/tmdb/go-cobra/go.sum diff --git a/api-client-cli/tmdb/go-cobra/internal/tmdb/client.go b/external-service-integration/tmdb/go-cobra/internal/tmdb/client.go similarity index 100% rename from api-client-cli/tmdb/go-cobra/internal/tmdb/client.go rename to external-service-integration/tmdb/go-cobra/internal/tmdb/client.go diff --git a/api-client-cli/tmdb/go-cobra/internal/tmdb/models.go b/external-service-integration/tmdb/go-cobra/internal/tmdb/models.go similarity index 100% rename from api-client-cli/tmdb/go-cobra/internal/tmdb/models.go rename to external-service-integration/tmdb/go-cobra/internal/tmdb/models.go diff --git a/api-client-cli/tmdb/go-cobra/main.go b/external-service-integration/tmdb/go-cobra/main.go similarity index 100% rename from api-client-cli/tmdb/go-cobra/main.go rename to external-service-integration/tmdb/go-cobra/main.go