29 Commits

Author SHA1 Message Date
Jonathan Miller 1799401db5 feat: add standard file headers to all 57 files missing them
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
- Add Copyright + FILE INFORMATION headers to 11 PHP enterprise classes
- Add FILE INFORMATION blocks to 9 PHP files with incomplete headers
- Add headers to 2 test files
- Add markdown comment headers to 27 index/README files
- Add headers to 5 root markdown files
- Add FILE INFORMATION to 4 files with existing but incomplete headers

All files now conform to moko-platform file header standard.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 17:10:19 -05:00
Jonathan Miller 1d87be7d5e fix: standardize file headers — REPO rename, SPDX case, missing fields
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
- Update REPO: from MokoStandards-API to moko-platform in 125 files
- Fix wrong org path (mokoconsulting-tech → MokoConsulting) in 10 files
- Fix SPDX-LICENSE-IDENTIFIER case in 2 template files
- Add missing REPO: field to 3 files

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 17:01:17 -05:00
Jonathan Miller 38a975ee57 chore: remove VERSION from all file header comments
Branch Policy Check / Verify merge target (pull_request) Successful in 0s
Remove VERSION: XX.YY.ZZ lines from 213 file headers across PHP,
TypeScript, TF definitions, workflows, CSS, markdown, and XML files.
Version is tracked in composer.json and CHANGELOG.md only.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 16:51:00 -05:00
Jonathan Miller 34aace2638 refactor: remove docs/ — wiki-first, relocate non-doc files
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
- Remove 52 markdown files from docs/ (all content lives in Gitea wiki)
- Relocate legal_doc_generator.html → tools/
- Relocate mokostandards-schema.xsd → templates/schemas/
- Fix XSD path in MokoStandardsParser.php
- Update index.md and README.md to reference wiki

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 16:40:53 -05:00
Jonathan Miller 0e82802f0c feat(mcp): add mokostandards MCP server with 24 governance tools
Embeds an MCP server in mcp/ that exposes MokoStandards CLI tools as
AI assistant tools: platform detection, repo health checks, validation
(structure, headers, secrets, changelog, version consistency, enterprise
readiness, drift scan), Joomla/Dolibarr-specific checks, definitions
browser, policy/guide reader, and release notes generation.

Also adds McpServerPlugin, MCP platform detection, and MCP workflow
templates.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 15:44:10 -05:00
Jonathan Miller 57d05a74bd refactor: simplify platform types across definitions and sync engine
Old → New:
  crm-module → dolibarr
  crm-platform → platform
  waas-component → joomla
  joomla-template → joomla (merged)
  default-repository → generic
  standards-repository → standards
  client-site → client
  generic-repository → generic

Updated: definitions, RepositorySynchronizer.php, WORKFLOW_STANDARDS.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-05 15:29:57 -05:00
Jonathan Miller 46a87d2a98 fix: update mokostandards xmlns to point to MokoStandards-API repo
Schema documentation lives alongside the API implementation.
Updated namespace URI in spec docs, XSD schema, PHP parser,
XML template, and self-referencing .mokostandards manifest.

Old: https://standards.mokoconsulting.tech/mokostandards/1.0
New: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards-API

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-05 14:44:17 -05:00
Jonathan Miller 2bfbc2d89d refactor: sync engine clones template repos at runtime for workflows
No longer references local templates/workflows/ — instead clones
the canonical template repo (Joomla/Dolibarr/Generic/Client) at
sync time to get the latest workflow files directly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-02 18:17:53 -05:00
Jonathan Miller a4fbcc0f87 refactor: update sync engine to use new canonical workflow sources
- Replace old .template files with actual workflow YMLs from template repos
- Update RepositorySynchronizer to use new 10/11-workflow standard
- Remove legacy shared workflows (enterprise-firewall, auto-assign, etc.)
- Joomla workflows sourced from MokoStandards-Template-Joomla
- Dolibarr workflows sourced from MokoStandards-Template-Dolibarr

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-02 18:12:50 -05:00
Jonathan Miller abc08fb6f2 docs: update for consolidated Joomla template repo
- Update WORKFLOW_STANDARDS.md to reference MokoStandards-Template-Joomla
- Remove 6 obsolete sync definitions for deleted individual template repos
- Update sync commands to use unified template

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-02 17:41:28 -05:00
jmiller cbbb4895bb fix: always emit <client> tag in UpdateXmlGenerator, map 0→site 1→administrator
Bulk Repository Sync / Sync Standards to Repositories (push) Successful in 1m16s
2026-04-30 15:01:03 +00:00
Jonathan Miller 8758570216 fix: migrate .mokostandards from .github/ to .gitea/ on Gitea
migrateMokoStandards() now checks both root and .github/.mokostandards
as sources, migrating to .gitea/.mokostandards when running on Gitea.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 22:47:01 -05:00
Jonathan Miller 5548eae35d chore: add debug logging to workflow sync deduplication 2026-04-26 15:54:43 -05:00
Jonathan Miller 531e462d9d fix: use API repo root for template resolution in bulk sync
syncFilesToBranch was resolving template paths against $standardsRoot
(../MokoStandards) instead of $repoRoot (the API repo where templates
actually live). This caused all template-sourced entries to silently
fail with "Source file not found", resulting in 0 files synced.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 15:41:22 -05:00
Jonathan Miller ff07d0a563 fix: prevent self-referencing composer dependency in enterprise package
ensureComposerEnterprise() now skips repos whose composer.json name
matches 'mokoconsulting-tech/enterprise' to avoid the package requiring
itself. Also removes the re-added self-reference from composer.json.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 11:55:10 -05:00
Jonathan Miller 5c0cb98082 fix: resolve label names to IDs in GiteaAdapter::createIssue
Gitea API expects label IDs (int64) not names. When string labels are
passed, resolve them via listLabels() before posting. Fixes 422
Unprocessable Entity errors that were causing tracking issue creation
to fail and repos to be marked as skipped during bulk sync.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 11:53:38 -05:00
Jonathan Miller 2a84875a4e fix: repair bulk sync — array assignment bug + add missing workflow mappings
- Line 876: change $entries = to $entries[] = (was overwriting all shared
  workflow entries, causing every repo to be skipped with empty result)
- Add deploy-rs, export-mysql, pull-from-dev to shared workflows (all platforms)
- Add deploy-dev, deploy-demo, deploy.yml to waas-component platform
- This fix restores the bulk-repo-sync ability to push workflow templates

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-25 00:16:38 -05:00
Jonathan Miller c00a04087f Fix: protected files skip entirely before stale token check
Protected files (like updates.xml) were being overwritten because
the stale-token check ran AFTER the canOverwrite gate. Now protected
files continue (skip) immediately, even with --force.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 14:10:14 -05:00
Jonathan Miller 0f9f110c2d Gitea-primary: update definitions, sync lib, token guidance
- waas-component.tf: 27 lines — GitHub URLs→Gitea, GA_TOKEN guidance,
  gitea-actions[bot], jmiller username
- joomla-template.tf: same pattern
- RepositorySynchronizer.php: jmiller-moko→jmiller

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 12:45:23 -05:00
Jonathan Miller 7b863f690d fix: remove all stale api/ path references across PHP codebase
Updated ~60 files: comments, usage docs, SCRIPT_PATH constants,
wrapper paths, require paths, error messages, and help text.
All api/validate/ → validate/, api/automation/ → automation/, etc.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 19:18:22 -05:00
Jonathan Miller bd53fe834f feat: add gitignore validation, move bulk-repo-sync workflow here
- Add REQUIRED_GITIGNORE_ENTRIES constant with mandatory patterns:
  Sublime project/workspace, sftp-config, IDE dirs, secrets, vendor, logs
- Add validateGitignoreEntries() method for checking required entries
- mergeGitConfigFile() still appends missing entries (non-destructive)
- Add .gitea/workflows/bulk-repo-sync.yml (moved from MokoStandards)
  - Runs from this repo directly (checkout self, not remote)
  - Org updated to MokoConsulting (Gitea)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 18:17:24 -05:00
Jonathan Miller 12382e30cc fix: split repoRoot into apiRoot + standardsRoot
- Definitions load from MokoStandards-API (repoRoot = API repo)
- Template files load from MokoStandards (standardsRoot = sibling dir)
- Set MOKOSTANDARDS_ROOT env var to override template source location

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 19:18:44 -05:00
Jonathan Miller 4f2d000f16 feat: sync to all branches, add listBranches, add ext-zip
- RepositorySynchronizer now syncs files to ALL branches (main + dev + any others)
- Extract syncFilesToBranch() method for per-branch file operations
- Add GiteaAdapter::listBranches() method
- Add ext-zip to composer.json require
- Fix Guzzle base_uri resolution (trailing slash + strip leading slash)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 19:11:47 -05:00
Jonathan Miller ed9313e6cb fix: Guzzle base_uri resolution for Gitea API paths
Strip leading slash from endpoints and ensure base_uri has trailing slash
so Guzzle preserves the /api/v1 path prefix per RFC 3986.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 18:52:04 -05:00
Jonathan Miller b0cc468155 feat: migrate to Gitea-only workflows and API
- RepositorySynchronizer defaults to GiteaAdapter
- PlatformAdapterFactory points to git.mokoconsulting.tech
- All plugins reference .gitea/workflows instead of .github/workflows
- push_files.php uses Gitea API
- Common.php REPO URLs updated to Gitea
- sync_dolibarr_readmes.php updated to Gitea URLs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 17:40:18 -05:00
Jonathan Miller e96a851617 fix: replace all hardcoded GitHub API URLs with platform adapter pattern
- cli/create_project.php: use PlatformAdapterFactory, guard GraphQL for GitHub-only
- cli/joomla_release.php: use adapter for API init, platform-aware clone/upload URLs
- release/generate_joomla_update_xml.php: use PlatformAdapterFactory for API init
- release/generate_dolibarr_version_txt.php: same
- validate/scan_drift.php: use PlatformAdapterFactory for API init
- validate/check_repo_health.php: use platform-aware API base URL
- validate/check_composer_deps.php: route through adapter ApiClient
- maintenance/repo_inventory.php: route through adapter ApiClient, guard GraphQL
- maintenance/rotate_secrets.php: route through adapter ApiClient
- maintenance/update_version_from_readme.php: use PlatformAdapterFactory, rename method
- lib/Common.php: set primary REPO_URL to Gitea

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:12:41 -05:00
jmiller 0b80fec88d feat: add templates, CLI dirs, docs, and Gitea-first platform config 2026-04-15 02:35:30 +00:00
Jonathan Miller bc0bff9022 feat: dual-platform support (Gitea + GitHub) and Joomla template tooling
- Add web URL helpers to GitPlatformAdapter interface (getRepoWebUrl,
  getPullRequestWebUrl, getIssueWebUrl, getBranchWebUrl, getMetadataDir,
  getStepSummaryEnvVar) with implementations in both adapters
- Refactor bulk_sync, push_files, repo_cleanup to use PlatformAdapterFactory
  instead of hardcoded GitHub API URLs and raw curl calls
- Fix RepositorySynchronizer override file and .mokostandards migration to
  use platform-aware metadata directories
- Add joomla-template platform type with full definition and detection
- Add bulk_joomla_template.php CLI tool (scaffold, sync, list, sync-updates)
- Dual update servers in templateDetails.xml (Gitea priority 1, GitHub priority 2)
- Dual download URLs in updates.xml (Gitea primary, GitHub fallback)
- Target Joomla 5.x and 6.x, PHP 8.1 minimum

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 20:16:28 -05:00
Claude Code 5e63faf229 Initial: MokoStandards Enterprise API extracted from MokoStandards
Standalone Composer package (mokoconsulting-tech/enterprise).
Source: api/, bin/, lib/ directories from MokoStandards main repo.
Autoload paths updated for standalone layout.
2026-04-13 06:12:04 +00:00