Backend (Spring Boot 3.2 / Java 21 / PostgreSQL): - JWT auth with BCrypt password hashing - User profile + Mifflin-St Jeor BMR calculator - Food search + barcode via OpenFoodFacts API with local cache - Meal CRUD with user data isolation and ownership checks - AI photo analysis (OpenAI Vision) with confidence intervals - AI correction feedback loop for personalisation - Flyway DB migrations + RFC-7807 error responses Mobile (React Native / TypeScript): - Full navigation stack (Auth → Tabs → Home stack) - Design tokens (WCAG 2.2 AA colours, 8px grid, 48px touch targets) - 10 screens: Login, Register, Home, Search, Camera, AI Result, Edit Meal, Daily Details, History, Profile - Confidence-aware calorie display (kcal ± range) - Repeat last meal shortcut + macro tracking Docs: - docs/PLAN-AND-REQUIREMENTS.md - docs/traceability.csv (35 requirements, all Implemented)
15 KiB
Package all three layers. Test installation scripts. Verify governance survives deployment.
Distribution & Deployment - Virsaitis
Module: Distribution & Deployment Load: When packaging, releasing, or deploying Virsaitis Version: 3.0.0 Updated: 2026-02-17
🎯 Purpose
Defines packaging, versioning, release procedures, and deployment strategies for Virsaitis portable distribution.
🤖 Machine Policy
[VERSIONING]
SCHEME=semantic_versioning (major.minor.patch)
VERSION_SYNC=all_components_match
TAG_FORMAT=v{major}.{minor}.{patch}
[PACKAGING]
DISTRIBUTION=portable_zip
SIZE_TARGET=<50MB
COMPONENTS=agent + mcp + extension + skills + docs + portable
[DEPLOYMENT]
TARGET=user_workspace
INSTALLATION=manual_or_scripted
CONFIGURATION=minimal_required
📦 Distribution Package Structure
Virsaitis Portable v2.0.0
virsaitis-portable-v2.0.0/
├── README.md (Installation guide)
├── CHANGELOG.md (Release notes)
├── LICENSE (MIT or appropriate)
├── install.ps1 (Windows installation script)
├── install.sh (Linux/Mac installation script)
│
├── .github/ (To be copied to user workspace)
│ ├── copilot-instructions.md (Hub)
│ ├── virsaitis-definition-library.md (Authoritative term definitions)
│ ├── copilot-modules/ (11 modules)
│ │ ├── core-policies.md
│ │ ├── agent-standards.md
│ │ ├── mcp-standards.md
│ │ ├── extension-standards.md
│ │ ├── skills-standards.md
│ │ ├── development-workflow.md
│ │ ├── security-controls.md
│ │ ├── requirements-engineering.md
│ │ ├── testing-quality.md
│ │ ├── integration-patterns.md
│ │ └── distribution-deployment.md
│ ├── agents/
│ │ └── Virsaitis-3.0.agent.md (Atomic agent definition)
│ └── skills/ (6 core skills)
│ ├── python-development/
│ │ └── SKILL.md
│ ├── security-controls/
│ │ └── SKILL.md
│ ├── requirements-engineering/
│ │ └── SKILL.md
│ ├── testing-validation/
│ │ └── SKILL.md
│ ├── governance-compliance/
│ │ └── SKILL.md
│ └── typescript-development/
│ └── SKILL.md
│
├── virsaitis-mcp/ (MCP Server)
│ ├── package.json
│ ├── build/ (Compiled TypeScript)
│ │ └── index.js
│ ├── README.md
│ └── LICENSE
│
├── virsaitis-extension/ (VS Code Extension)
│ ├── virsaitis-extension-2.0.0.vsix (.vsix package)
│ ├── README.md
│ └── LICENSE
│
├── docs/ (Documentation)
│ ├── QUICK-START.md
│ ├── CONFIGURATION.md
│ ├── TROUBLESHOOTING.md
│ ├── ARCHITECTURE.md
│ └── FAQ.md
│
└── templates/ (Optional templates)
├── SKILL-TEMPLATE.md
├── SKILL-TEMPLATE-QUICK.md
└── requirement-template.md
🔢 Semantic Versioning
Version Structure
FORMAT: MAJOR.MINOR.PATCH
EXAMPLES:
1.0.0- Initial release1.1.0- New feature (backward compatible)1.1.1- Bug fix (backward compatible)2.0.0- Breaking change
When to Increment
MAJOR (breaking changes):
- Agent.md structure change (breaks existing integrations)
- MCP API breaking change
- Extension command removal
- Skill format change (not backward compatible)
MINOR (new features, backward compatible):
- New skill added
- New MCP tool added
- New extension command
- New copilot module
PATCH (bug fixes, backward compatible):
- Bug fix in MCP validation
- Extension UI fix
- Documentation correction
- Typo fix in Agent.md
Version Synchronization
ALL COMPONENTS MUST MATCH:
package.json(virsaitis-mcp, virsaitis-extension)CHANGELOG.md(root, per-component)- Git tag (
v2.0.0) - Distribution filename (
virsaitis-portable-v2.0.0.zip) - Agent.md version header
- Skill metadata.framework-version
VERIFY SYNC:
# Check all versions match
grep -r '"version":' */package.json
grep -r '**Version**:' .github/*/
📝 Release Checklist
Pre-Release (Development Complete)
- All features implemented
- All tests passing (100%)
- Coverage ≥70% overall
- Security tests 100% pass
- No TIER-0 violations
- Documentation updated
- CHANGELOG updated (all components)
- Version numbers synchronized
Build & Package
⚡ CHECKPOINT — All three layers included in package? Agent + MCP + Extension. Missing one breaks governance.
- Clean build:
npm run clean && npm run build - MCP server compiled:
virsaitis-mcp/build/ - Extension packaged:
vsce package→.vsixfile - Agent.md validated (atomic structure)
- Skills validated:
skills-ref validate - Copy all components to distribution directory
- Create portable ZIP archive
- Verify archive contents
- Test archive extraction
Testing (Clean Environment)
- Fresh VS Code installation
- Extract portable package
- Run installation script
- Verify file locations
- Start MCP server
- Install Extension (.vsix)
- Configure MCP server URL
- Test: Protected file modification (should block)
- Test: Skill activation (python-development)
- Test: Agent mode activation
- Test: Status bar shows "Active"
- Review: All integration points working
Documentation
- README.md complete
- QUICK-START.md updated
- CHANGELOG.md finalized
- Known issues documented
- Migration guide (if breaking changes)
- API documentation up to date
Release
- Commit all changes
- Tag release:
git tag -a v2.0.0 -m "Release v2.0.0" - Push tag:
git push origin v2.0.0 - Create GitHub Release
- Upload portable ZIP to release
- Publish release notes
- Announce release
🛠️ Installation Scripts
Windows Installation (install.ps1)
# install.ps1 - Virsaitis Portable Installation for Windows
param(
[string]$WorkspacePath = (Get-Location),
[string]$MCPPort = "3000"
)
Write-Host "Virsaitis Portable v2.0.0 Installation" -ForegroundColor Cyan
Write-Host "=======================================" -ForegroundColor Cyan
# 1. Copy .github/ to workspace
Write-Host "`n[1/5] Copying governance files..."
Copy-Item -Path ".github" -Destination "$WorkspacePath/.github" -Recurse -Force
Write-Host "✓ Governance files copied" -ForegroundColor Green
# 2. Install MCP Server
Write-Host "`n[2/5] Installing MCP server..."
Set-Location virsaitis-mcp
npm install --production
Write-Host "✓ MCP server installed" -ForegroundColor Green
# 3. Install VS Code Extension
Write-Host "`n[3/5] Installing VS Code extension..."
$vsixPath = Get-ChildItem -Path "../virsaitis-extension/*.vsix" | Select-Object -First 1
code --install-extension $vsixPath.FullName
Write-Host "✓ Extension installed" -ForegroundColor Green
# 4. Configure Extension
Write-Host "`n[4/5] Configuring extension..."
$settingsPath = "$env:APPDATA/Code/User/settings.json"
if (Test-Path $settingsPath) {
$settings = Get-Content $settingsPath | ConvertFrom-Json
$settings.'virsaitis.enabled' = $true
$settings.'virsaitis.mcpServerCommand' = "node"
$settings.'virsaitis.mcpServerArgs' = @("build/index.js")
$settings | ConvertTo-Json -Depth 10 | Set-Content $settingsPath
}
Write-Host "✓ Extension configured" -ForegroundColor Green
# 5. Start MCP Server
Write-Host "`n[5/5] Starting MCP server..."
Start-Process -NoNewWindow -FilePath "node" -ArgumentList "build/index.js", "--port", $MCPPort
Write-Host "`n✓ Installation complete!" -ForegroundColor Green
Write-Host "`nNext steps:"
Write-Host "1. Reload VS Code window (Ctrl+Shift+P → 'Developer: Reload Window')"
Write-Host "2. Verify Virsaitis status bar shows 'Active' (bottom right)"
Write-Host "3. Try editing .github/copilot-instructions.md (should be protected)"
Write-Host "`nDocumentation: docs/QUICK-START.md"
Linux/Mac Installation (install.sh)
#!/bin/bash
# install.sh - Virsaitis Portable Installation for Linux/Mac
WORKSPACE_PATH=${1:-.}
MCP_PORT=${2:-3000}
echo "Virsaitis Portable v2.0.0 Installation"
echo "======================================="
# 1. Copy .github/ to workspace
echo -e "\n[1/5] Copying governance files..."
cp -r .github "$WORKSPACE_PATH/.github"
echo "✓ Governance files copied"
# 2. Install MCP Server
echo -e "\n[2/5] Installing MCP server..."
cd virsaitis-mcp
npm install --production
echo "✓ MCP server installed"
# 3. Install VS Code Extension
echo -e "\n[3/5] Installing VS Code extension..."
VSIX_FILE=$(ls ../virsaitis-extension/*.vsix | head -1)
code --install-extension "$VSIX_FILE"
echo "✓ Extension installed"
# 4. Configure Extension
echo -e "\n[4/5] Configuring extension..."
SETTINGS_PATH="$HOME/.config/Code/User/settings.json"
if [ -f "$SETTINGS_PATH" ]; then
jq '. + {"virsaitis.enabled": true, "virsaitis.mcpServerCommand": "node", "virsaitis.mcpServerArgs": ["build/index.js"]}' \
"$SETTINGS_PATH" > "$SETTINGS_PATH.tmp"
mv "$SETTINGS_PATH.tmp" "$SETTINGS_PATH"
fi
echo "✓ Extension configured"
# 5. Start MCP Server
echo -e "\n[5/5] Starting MCP server..."
nohup node build/index.js --port $MCP_PORT > mcp.log 2>&1 &
echo -e "\n✓ Installation complete!"
echo -e "\nNext steps:"
echo "1. Reload VS Code window (Ctrl+Shift+P → 'Developer: Reload Window')"
echo "2. Verify Virsaitis status bar shows 'Active' (bottom right)"
echo "3. Try editing .github/copilot-instructions.md (should be protected)"
echo -e "\nDocumentation: docs/QUICK-START.md"
🎯 Deployment Strategies
Strategy 1: Local Installation (Recommended)
TARGET: Single developer workspace METHOD: Extract portable ZIP, run installation script BENEFITS: Simple, complete control, no dependencies USE CASE: Individual developers, project teams
Strategy 2: Organization-Wide
TARGET: Multiple developers, shared governance METHOD: Central MCP server, distributed Extension + Skills BENEFITS: Consistent governance, centralized updates USE CASE: Large teams, enterprise deployments
ARCHITECTURE:
⚡ CHECKPOINT — Installation scripts use mcpServerCommand/mcpServerArgs (stdio), not mcpServerUrl (HTTP).
Central MCP Server (virsaitis.company.com:3000)
↑
│ HTTP
↓
Developer 1 (Extension → MCP)
Developer 2 (Extension → MCP)
Developer 3 (Extension → MCP)
...
Developer N (Extension → MCP)
.github/skills/ distributed via:
- GitHub Enterprise repository
- VS Code Settings Sync
- Organization policy deployment
Strategy 3: Project Template
TARGET: New project creation METHOD: Bootstrap new projects with Virsaitis pre-configured BENEFITS: Governance from day one USE CASE: Greenfield projects, standardized setup
🔧 Configuration Management
Minimal Required Configuration
USER MUST SET:
{
"virsaitis.enabled": true,
"virsaitis.mcpServerCommand": "node",
"virsaitis.mcpServerArgs": ["build/index.js"]
}
OPTIONAL CONFIGURATION:
{
"virsaitis.showShieldIcons": true,
"virsaitis.blockTier0": true,
"virsaitis.auditLogPath": "./virsaitis-audit.log",
"virsaitis.failOpen": false
}
Environment Variables (MCP Server)
# MCP Server configuration
export VIRSAITIS_PORT=3000
export VIRSAITIS_AGENT_PATH=".github/agents/Virsaitis-3.0.agent.md"
export VIRSAITIS_AUDIT_LOG="./mcp-audit.log"
📊 Distribution Metrics
Package Size Targets
| Component | Target Size | Actual (v2.0.0) |
|---|---|---|
| Agent | <100 KB | ~50 KB |
| Skills | <500 KB | ~300 KB |
| MCP Server | <10 MB | ~8 MB |
| Extension | <5 MB | ~3 MB |
| Documentation | <5 MB | ~2 MB |
| Total ZIP | <50 MB | ~15 MB |
Performance Targets
| Metric | Target | Measurement |
|---|---|---|
| Installation time | <5 minutes | Manual timing |
| MCP startup | <2 seconds | time node build/index.js |
| Extension activation | <200ms | VS Code telemetry |
| Skill load time | <50ms | Progressive disclosure |
🔄 Update Procedure
Patch Update (2.0.0 → 2.0.1)
- Download new portable ZIP
- Extract to temporary location
- Stop MCP server
- Replace MCP server files
- Replace Extension (.vsix), reinstall
- Restart MCP server
- Reload VS Code
- Verify: Check status bar, test protected file
- No .github/ changes needed (backward compatible)
Minor Update (2.0.1 → 2.1.0)
- Download new portable ZIP
- Extract to temporary location
- Backup current .github/ (important!)
- Stop MCP server
- Replace MCP server files
- Replace Extension, reinstall
- Selectively merge .github/ updates (review changes)
- Restart MCP server
- Reload VS Code
- Review: New features, configuration changes
Major Update (2.x.x → 3.0.0)
- READ MIGRATION GUIDE (critical!)
- Backup entire workspace
- Review breaking changes
- Plan migration steps
- Test in isolated environment first
- Follow migration guide step-by-step
- Verify all integration points
- Update project dependencies if needed
💡 Best Practices
Testing Before Release
ALWAYS TEST IN CLEAN ENVIRONMENT:
- Fresh OS install (VM recommended)
- Fresh VS Code install
- No existing configurations
- Follow installation guide exactly
- Document any issues
Documentation
MUST INCLUDE:
- Installation instructions (step-by-step)
- Configuration guide
- Troubleshooting section
- Known issues
- Migration guide (for breaking changes)
Backward Compatibility
MAINTAIN WHEN POSSIBLE:
- Keep old MCP tool names (add new, deprecate old)
- Support old configuration formats (warn, don't break)
- Provide migration scripts for data
- Document deprecations clearly
📚 Quick Reference
| Task | Command/Tool | Location |
|---|---|---|
| Build MCP | npm run build |
virsaitis-mcp/ |
| Package Extension | vsce package |
virsaitis-extension/ |
| Validate Skills | skills-ref validate |
.github/skills/ |
| Create ZIP | Archive utility | virsaitis-portable/ |
| Install (Win) | .\install.ps1 |
Extracted ZIP |
| Install (Linux) | ./install.sh |
Extracted ZIP |
Distribution & Deployment Module v3.0.0 Portable packaging and deployment strategies
Key Rules From This Module
- Package all three layers together. Governance must survive deployment.
- Installation scripts configure stdio transport (mcpServerCommand + mcpServerArgs).
- Test installation scripts on clean machines before release.
- Verify governance enforcement works end-to-end after deployment.
- Definitions:
.github/virsaitis-definition-library.md
Return to hub: .github/copilot-instructions.md