') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); PR_26172_OWNER_030-workstream-and-pi-hygiene-governance by ToolboxAid · Pull Request #81 · ToolboxAid/HTML-JavaScript-Gaming · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions docs_build/dev/ProjectInstructions/README.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,17 @@ When a governance or instruction state needs a history snapshot, add a new file
CCYYMMDD_HHMMSS.md

Do not rewrite history snapshots after creation unless the owner explicitly approves.

READ THIS FIRST

1. Read Project Instructions before making changes.
2. Project Instructions are append-only.
3. Existing approved guidance may not be removed.
4. Team ownership must be respected.
5. BACKLOG_MASTER.md is the authoritative backlog.
6. Build Path status derives from backlog status.
7. Direct-to-main commits are prohibited.
8. Use approved PR workflow.
9. Follow OWNER governance decisions.
10. When guidance conflicts, newest OWNER-approved guidance wins.
11. Batch Governance Mode is the default for governance, documentation, and administrative work.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
# All-Teams Governance Rule: Batch Governance Mode

Status: Approved
Owner: OWNER
Applies To: All teams

## Purpose

Increase throughput, reduce governance overhead, reduce review churn, and allow teams to spend more time building.

## Rules

1. Prefer workstream PRs for related governance, documentation, and administrative changes.
2. Avoid one-document-per-PR unless risk, dependency order, or OWNER direction requires it.
3. Review by workstream, not by individual file.
4. Minimize approval cycles.
5. Use stacked sequential PRs only when dependency order requires it.
6. Codex should provide one executable command package for the workstream.
7. Avoid repeated proceed confirmations.
8. Stop only for start gate failure, merge approval, conflict, or OWNER decision.
9. Standard review format:
- changed code files
- findings
- PASS / FAIL
- next action
10. Governance exists to enable delivery, not become the bottleneck.

## Default

Batch Governance Mode is the default operating mode for all teams unless OWNER explicitly overrides it.
11 changes: 11 additions & 0 deletions docs_build/dev/ProjectInstructions/addendums/postgres_only.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
SQLite is deprecated.

Game Foundry Studio standard database:
PostgreSQL

Rules:
- No new SQLite implementations
- No new SQLite dependencies
- Existing SQLite references are technical debt
- New persistence work targets PostgreSQL
- PRs introducing SQLite should be rejected
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
Objects referenced elsewhere cannot be directly deleted.

Lifecycle:
- Active
- Deprecated
- Archived

Applies to:
- Assets
- Audio
- Fonts
- Tags
- Messages
- Emotion Profiles
- TTS Profiles
- Objects
- Worlds
- Characters
- Events

Rule:
Deprecate first.
Delete only when no references exist.
17 changes: 17 additions & 0 deletions docs_build/dev/ProjectInstructions/addendums/table_first_ui.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
Game Foundry Studio uses a table-first creator experience.

Preferred patterns:
- table display
- inline editing
- save/cancel on row
- add row at bottom
- child rows for details
- reusable table components

Avoid:
- large multi-page forms
- modal-heavy workflows
- separate edit pages when inline editing is practical

Reference implementation:
Idea Board is the reference implementation.
22 changes: 22 additions & 0 deletions docs_build/dev/ProjectInstructions/addendums/tool_imagery.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# Tool Imagery Governance

## Badge Standard

- 1024x1024
- Transparent background
- No text
- No labels

## Tool Hero Standard

- 1820x1024
- Mascot scene
- No text
- No labels

## Approved Mascots

- Spark
- Pixel Smith
- ForgeBot
- Foundry Bot
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
# Team Ownership Governance

## OWNER

- Architecture
- Product Direction
- Cross-Team Governance
- Final Approval

## Team Alfa

- Idea Board
- Game Hub
- Game Journey
- Design
- Objects
- Worlds
- Interface
- Controls
- Rules
- Progression

## Team Bravo

- Graphics
- Audio
- Messages
- TTS
- MIDI
- Publishing
- Community
- Marketplace

## Team Charlie

- Governance
- Infrastructure
- Operations
- Diagnostics
- System Health

## Rule

Ownership may only be reassigned by OWNER governance.
Loading