chore: cascade main → dev (db487fd) [skip ci] #5

Merged
jmiller merged 9 commits from main into dev 2026-05-11 21:18:45 +00:00
9 changed files with 168 additions and 246 deletions
+25
View File
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
MokoStandards Repository Manifest
Auto-generated by cleanup script.
See: https://git.mokoconsulting.tech/MokoConsulting/moko-platform/wiki/Home
-->
<moko-platform xmlns="https://standards.mokoconsulting.tech/moko-platform/1.0" schema-version="1.0">
<identity>
<name>joomla-api-mcp</name>
<org>MokoConsulting</org>
<description>MCP server for Joomla Web Services API operations</description>
<license spdx="GPL-3.0-or-later">GNU General Public License v3</license>
</identity>
<governance>
<platform>nodejs</platform>
<standards-version>04.07.00</standards-version>
<standards-source>https://git.mokoconsulting.tech/MokoConsulting/moko-platform</standards-source>
<last-synced>2026-05-10T19:51:10+00:00</last-synced>
</governance>
<build>
<language>TypeScript</language>
<package-type>mcp-server</package-type>
<entry-point>src/</entry-point>
</build>
</moko-platform>
-78
View File
@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
MokoStandards Repository Manifest
Auto-generated by MokoStandards bulk sync.
Manual edits to <governance> and <last-synced> may be overwritten.
See: docs/standards/mokostandards-file-spec.md
-->
<mokostandards xmlns="https://standards.mokoconsulting.tech/mokostandards/1.0" schema-version="1.0">
<identity>
<name>joomla-api-mcp</name>
<org>MokoConsulting</org>
<description>MCP server for Joomla Web Services API operations</description>
<license spdx="GPL-3.0-or-later">GNU General Public License v3</license>
</identity>
<governance>
<platform>mcp-server</platform>
<standards-version>04.07.00</standards-version>
<standards-source>https://git.mokoconsulting.tech/MokoConsulting/MokoStandards</standards-source>
<last-synced>2026-05-07T19:13:00+00:00</last-synced>
</governance>
<build>
<language>TypeScript</language>
<package-type>mcp-server</package-type>
</build>
<deploy>
<target name="dev">
<host>${{ secrets.DEV_HOST }}</host>
<path>${{ secrets.DEV_PATH }}</path>
<method>sftp</method>
<branch>dev/**</branch>
<src-dir>src/</src-dir>
</target>
<target name="demo">
<host>${{ secrets.DEMO_HOST }}</host>
<path>${{ secrets.DEMO_PATH }}</path>
<method>sftp</method>
<branch>main</branch>
<src-dir>src/</src-dir>
</target>
</deploy>
<scripts>
<script name="lint" phase="lint">
<command>make lint</command>
<description>Lint via make</description>
<runner>make</runner>
</script>
<script name="validate" phase="validate">
<command>make validate</command>
<description>Validate via make</description>
<runner>make</runner>
</script>
<script name="test" phase="test">
<command>make test</command>
<description>Test via make</description>
<runner>make</runner>
</script>
<script name="clean" phase="build">
<command>make clean</command>
<description>Clean via make</description>
<runner>make</runner>
</script>
<script name="build" phase="build">
<command>make build</command>
<description>Build via make</description>
<runner>make</runner>
</script>
<script name="package" phase="build">
<command>make package</command>
<description>Package via make</description>
<runner>make</runner>
</script>
<script name="release" phase="release">
<command>make release</command>
<description>Release via make</description>
<runner>make</runner>
</script>
</scripts>
</mokostandards>
+4
View File
@@ -15,6 +15,10 @@ on:
branches: [main]
paths: ['src/**', 'package.json', 'tsconfig.json']
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
+4
View File
@@ -12,6 +12,10 @@ on:
- cron: '0 9 * * 1' # Every Monday at 9am UTC
workflow_dispatch:
permissions:
contents: read
jobs:
check-sdk:
runs-on: ubuntu-latest
+4
View File
@@ -13,6 +13,10 @@ on:
paths: ['src/index.ts']
workflow_dispatch:
permissions:
contents: read
jobs:
inventory:
runs-on: ubuntu-latest
+90
View File
@@ -0,0 +1,90 @@
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
# SPDX-License-Identifier: GPL-3.0-or-later
#
# Enforces branch merge policy:
# feature/* → dev only
# fix/* → dev only
# hotfix/* → dev or main (emergency)
# dev → main only
# alpha/* → dev only
# beta/* → dev only
# rc/* → main only
name: Branch Policy Check
on:
pull_request:
types: [opened, synchronize, reopened, edited]
jobs:
check-target:
name: Verify merge target
runs-on: ubuntu-latest
steps:
- name: Check branch policy
run: |
HEAD="${{ github.head_ref }}"
BASE="${{ github.base_ref }}"
echo "PR: ${HEAD} → ${BASE}"
ALLOWED=true
REASON=""
case "$HEAD" in
feature/*|feat/*)
if [ "$BASE" != "dev" ]; then
ALLOWED=false
REASON="Feature branches must target 'dev', not '${BASE}'"
fi
;;
fix/*|bugfix/*)
if [ "$BASE" != "dev" ]; then
ALLOWED=false
REASON="Fix branches must target 'dev', not '${BASE}'"
fi
;;
hotfix/*)
if [ "$BASE" != "dev" ] && [ "$BASE" != "main" ]; then
ALLOWED=false
REASON="Hotfix branches can only target 'dev' or 'main', not '${BASE}'"
fi
;;
alpha/*|beta/*)
if [ "$BASE" != "dev" ]; then
ALLOWED=false
REASON="Pre-release branches must target 'dev', not '${BASE}'"
fi
;;
rc/*)
if [ "$BASE" != "main" ]; then
ALLOWED=false
REASON="Release candidate branches must target 'main', not '${BASE}'"
fi
;;
dev)
if [ "$BASE" != "main" ]; then
ALLOWED=false
REASON="Dev branch can only merge into 'main', not '${BASE}'"
fi
;;
esac
if [ "$ALLOWED" = false ]; then
echo "::error::${REASON}"
echo ""
echo "## Branch Policy Violation" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "${REASON}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Allowed merge paths:" >> $GITHUB_STEP_SUMMARY
echo "- \`feature/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY
echo "- \`fix/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY
echo "- \`hotfix/*\` → \`dev\` or \`main\`" >> $GITHUB_STEP_SUMMARY
echo "- \`dev\` → \`main\`" >> $GITHUB_STEP_SUMMARY
echo "- \`rc/*\` → \`main\`" >> $GITHUB_STEP_SUMMARY
exit 1
fi
echo "Branch policy: OK (${HEAD} → ${BASE})"
echo "## Branch Policy: Passed" >> $GITHUB_STEP_SUMMARY
+41
View File
@@ -0,0 +1,41 @@
# CLAUDE.md
This file provides guidance to Claude Code when working with this repository.
## Project Overview
**joomla-api-mcp** -- MCP server for Joomla Web Services API operations
| Field | Value |
|---|---|
| **Platform** | mcp-server |
| **Language** | TypeScript |
| **Default branch** | main |
| **License** | GPL-3.0-or-later |
| **Wiki** | [joomla-api-mcp Wiki](https://git.mokoconsulting.tech/MokoConsulting/joomla-api-mcp/wiki) |
| **Standards** | [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/moko-platform/wiki/Home) |
## Common Commands
```bash
npm install # Install dependencies
npm run build # Compile TypeScript
npm run dev # Development mode
```
## Architecture
This is an MCP (Model Context Protocol) server. Key files:
- `src/index.ts` -- server entry point and tool registration
- `src/config.ts` -- configuration loading
- `src/tools/` -- individual tool implementations
- `dist/` -- compiled output (gitignored)
## Rules
- **Never commit** `.claude/`, `.mcp.json`, `TODO.md`, or `*.min.css`/`*.min.js`
- **Attribution**: use `Authored-by: Moko Consulting` in commits
- **Branch strategy**: develop on `dev`, merge to `main` for release
- **Minification**: handled at build time (CI) and runtime (MokoMinifyHelper for Joomla templates)
- **Wiki**: documentation lives in the Gitea wiki, not in `docs/` files
- **Standards**: this repo follows [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/moko-platform/wiki/Home)
-142
View File
@@ -1,142 +0,0 @@
<!--
Copyright (C) 2026 [Organization Name] <contact@example.com>
This file is part of [Project Name].
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
# [Project Name] Roadmap
## Scope and Intent
This document defines the roadmap for [Project Name] starting with version **[X.Y.Z]**. It establishes the sequencing, intent, and maturity expectations for deliverables governed by this project.
This roadmap is forward-looking by design. Completed work prior to the current baseline version is considered foundational and is intentionally excluded. This file tracks **current and future-state development only**.
## Version [X.Y.Z] — [Phase Name] ✅ COMPLETED / 🔄 IN PROGRESS / 📋 PLANNED
Focus: [Brief description of this version's primary focus]
### Completed Deliverables
***[Category Name]**
* ✅ [Specific deliverable or feature]
* ✅ [Specific deliverable or feature]
***[Category Name]**
* ✅ [Specific deliverable or feature]
### In Progress
* 🔄 [Item currently being worked on]
* 🔄 [Item currently being worked on]
### Planned Deliverables
* [Future planned item]
* [Future planned item]
### Achieved Outcomes
* ✅ [Measurable outcome or benefit]
* ✅ [Measurable outcome or benefit]
* 🔄 [Partially achieved outcome]
## Version [X.Y+1.Z] — [Next Phase Name]
Focus: [Brief description of next version's primary focus]
### In-Scope Deliverables
* [Deliverable for next version]
* [Deliverable for next version]
### Outcomes
* [Expected outcome or benefit]
* [Expected outcome or benefit]
## Version [X.Y+2.Z] — [Future Phase Name]
Focus: [Brief description of future version's primary focus]
### Planned Deliverables
* [Future deliverable]
* [Future deliverable]
### Outcomes
* [Expected outcome]
* [Expected outcome]
## Version [X.Y+3.Z] and Beyond — [Long-term Vision]
Focus: [Long-term strategic direction]
### Forward-Looking Initiatives
* [Strategic initiative]
* [Strategic initiative]
### Outcomes
* [Long-term goal]
* [Long-term goal]
---
This roadmap is intentionally conservative and additive. New versions extend prior guarantees without breaking existing contracts.
## Guidelines for Version Planning
### Version Numbering
Use semantic versioning for clarity:
- **Major versions** (X.0.0): Breaking changes, major architectural shifts
- **Minor versions** (X.Y.0): New features, significant enhancements
- **Patch versions** (X.Y.Z): Bug fixes, minor improvements
### Planning Horizon
- **Current Version**: Actively being delivered
- **Next 2-3 Versions**: Clearly defined with specific deliverables
- **Future Versions**: High-level themes and strategic direction
### Status Indicators
-**COMPLETED**: Delivered and validated
- 🔄 **IN PROGRESS**: Active development underway
- 📋 **PLANNED**: Scheduled but not yet started
- ⏸️ **PAUSED**: Temporarily on hold
-**CANCELLED**: No longer pursuing
## Metadata
```
Owner: [Owner Name/Role]
Reviewers: [Reviewer Names/Roles]
Status: Active
Last Updated: [YYYY-MM-DD]
Next Review: [YYYY-MM-DD]
```
## Revision History
| Date | Version | Author | Notes |
| ---------- | -------- | -------------- | ------------------------------- |
| YYYY-MM-DD | X.Y.Z | [Author Name] | [Description of changes] |
| YYYY-MM-DD | X.Y.Z | [Author Name] | [Description of changes] |
-26
View File
@@ -1,26 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended",
"schedule:weekly",
":disableDependencyDashboard"
],
"labels": ["dependencies"],
"automerge": false,
"platformAutomerge": false,
"rangeStrategy": "bump",
"packageRules": [
{
"matchUpdateTypes": ["patch"],
"automerge": true
},
{
"matchManagers": ["composer"],
"enabled": true
},
{
"matchManagers": ["npm"],
"enabled": true
}
]
}