- PHP 88.1%
- Twig 7.3%
- JavaScript 2.5%
- CSS 1.8%
- Shell 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .gitea/workflows | ||
| assets | ||
| bin | ||
| config | ||
| deploy | ||
| docs | ||
| migrations | ||
| public | ||
| resources | ||
| scripts | ||
| src | ||
| templates | ||
| tests | ||
| tools | ||
| .dockerignore | ||
| .env | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .php-cs-fixer.dist.php | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| compose.override.yaml.example | ||
| compose.yaml | ||
| composer.json | ||
| composer.lock | ||
| LICENSE | ||
| MAGIFY_CATALOG_MODERNIZATION_ROADMAP.md | ||
| phpstan.neon | ||
| phpunit.xml.dist | ||
| README.md | ||
| symfony.lock | ||
Magify Connector
One-way Magento → Magify → Shopify catalog middleware. P00–P19 implement normalized adapters, encrypted workspace configuration, durable discovery/planning/recovery, guarded draft catalog components, operator console and native packaging/restore. P20 prepares the MVP 0.1 local candidate: live pilot is BLOCKED and production is NO-GO. The user selected local qualification only; no release tag or production deployment is authorized.
Start with the current compatibility matrix, pilot evidence, 32-gate acceptance checklist, release notes and operator guide. The roadmap and phase reports retain detailed history; planned files are not implementation/qualification evidence.
Local setup
Requirements: Docker Desktop/Engine with Linux containers and Docker Compose v2. No host PHP, Composer or Node is required. PHP 8.4.26, Symfony components 7.4 LTS, MySQL 8.4.11 and Redis 7.4 are selected; Composer versions are pinned in composer.lock. Configuration is explicit rather than generated through Flex recipes; symfony.lock is an empty recipe registry, not evidence of applied recipes.
- Check that loopback port 8015 is free. Keep Bagira 8000, Ygen 8001, Hover 8013 and Whather 8014/HMR 5173 untouched. Change MAGIFY_HTTP_PORT in the local env if needed.
- Obtain approval for local-only APP_SECRET, MYSQL_PASSWORD, MYSQL_ROOT_PASSWORD in ignored .env.local and the external dev-v1 AEAD keyring in ignored .secrets/keyring.json. Local fixture qualification requires no Magento/Shopify credentials. Persistent installation/admin/store setup needs its own scope. Symfony runtime consumes Compose/process environment directly and does not load .env.local itself.
- Build PHP without generating secrets (PowerShell):
docker build -t magify-local-php:p01 -f deploy/php/Dockerfile .
After specific approval, explicitly bootstrap the three environment secrets and external keyring; the tool refuses an existing .env.local and never prints values:
docker run --rm --mount "type=bind,source=$($PWD.Path),target=/app" --entrypoint php magify-local-php:p01 tools/bootstrap-dev.php --generate
docker run --rm --mount "type=bind,source=$($PWD.Path),target=/app" --entrypoint php magify-local-php:p01 tools/bootstrap-keyring.php --generate --approved
docker compose --env-file .env.local up -d --build --wait app nginx mysql redis
docker compose --env-file .env.local exec -T app composer install --no-interaction --prefer-dist
docker compose --env-file .env.local exec -T app php bin/console doctrine:migrations:migrate --no-interaction
docker compose --env-file .env.local exec -T app sh -c 'mkdir -p var/safety public/assets; cp -R assets/styles assets/controllers public/assets/'
docker compose --env-file .env.local exec -T app php tools/check-local.php
On Linux use $(pwd) as the bind source. Windows file protection relies on the current user directory ACL; POSIX chmod does not enforce Windows ACL. Keep .env.local private and excluded from backups/support exports intended for sharing. Rotate dev values by recreating only the approved disposable Magify database volume, never another project's data. Do not print compose config with resolved secrets; use config --quiet.
When this separately approved runtime is running, open http://127.0.0.1:8015/healthz for liveness and /readyz for local MySQL migration/Redis readiness. Failures return 503 without endpoint/credential details. Nginx restricts readiness to local/private access. The authenticated dashboard at / and /login are implemented. Administrator bootstrap requires separately approved identity/password input; see the secrets runbook. P20 fixture services bind no host ports and leave no running URL.
MySQL/Redis have no published ports. Compose project magify-local isolates its services, network and named MySQL/Redis/vendor/cache volumes. PHP runs as www-data; only Nginx publishes loopback HTTP. Actual worker/scheduler/relay/recovery commands are opt-in under the runtime profile. They are not placeholders. Inspect current connections, read/write authority, safety markers and outstanding outcomes before enabling them; a running worker never grants store approval. Local image pcntl support/graceful signal behavior must be checked before using local long-running workers; native deployment requires CLI pcntl.
P19 write safety blocks commerce mutations if var/safety is missing/inaccessible or contains WRITE_DISABLED/RECOVERY_READ_ONLY. Creating the local directory grants no authority; keep markers active after restore. Native shared artifacts/safety and protected configuration use the deployment runbook.
# Stop only this project; data remains in named volumes.
docker compose --env-file .env.local down
Validation and CI
Native production
Live reads and writes require a named pair and bounded action approval. Shopify authentication, schema-qualified pinned documents, guarded catalog/inventory/publication paths are implemented locally; no actual store is qualified. New products stay draft/unpublished. Inventory is disabled in the selected candidate; bulk mutations default off. Publication, identity-definition setup, adoption and destructive actions require separate approval. Strict dry run may read/renew auth/persist local plans but submits no commerce mutation, including bulk query jobs.
Read the Magento contract, Shopify auth contract and component contracts before connector setup. Official offline 2026-10 schema validation passed in P17; schema validation does not prove actual store semantics. Performance evidence is synthetic discovery/ledger measurement, not a live full-catalog SLA. P20 pilot lists the remaining actual-store, native-host and release prerequisites.