feat: host como jugador #2

Merged
FreeTLab merged 1 commits from feat/host-como-jugador into main 2026-04-24 20:04:00 +02:00
8 changed files with 111 additions and 5 deletions
Showing only changes of commit 1231b32c3c - Show all commits

58
.atl/skill-registry.md Normal file
View File

@@ -0,0 +1,58 @@
# Skill Registry
**Delegator use only.** Any agent that launches sub-agents reads this registry to resolve compact rules, then injects them directly into sub-agent prompts. Sub-agents do NOT read this registry or individual SKILL.md files.
See `_shared/skill-resolver.md` for the full resolution protocol.
## User Skills
| Trigger | Skill | Path |
|---------|-------|------|
| When creating a pull request, opening a PR, or preparing changes for review | branch-pr | /Users/freetlab/.config/opencode/skills/branch-pr/SKILL.md |
| When creating a GitHub issue, reporting a bug, or requesting a feature | issue-creation | /Users/freetlab/.config/opencode/skills/issue-creation/SKILL.md |
| When user says "judgment day", "judgment-day", "review adversarial", "dual review", "doble review", "juzgar", "que lo juzguen" | judgment-day | /Users/freetlab/.config/opencode/skills/judgment-day/SKILL.md |
| When user asks to create a new skill, add agent instructions, or document patterns for AI | skill-creator | /Users/freetlab/.config/opencode/skills/skill-creator/SKILL.md |
## Compact Rules
Pre-digested rules per skill. Delegators copy matching blocks into sub-agent prompts as `## Project Standards (auto-resolved)`.
### branch-pr
- Every PR MUST link an approved issue — no exceptions
- Every PR MUST have exactly one `type:*` label
- Automated checks must pass before merge is possible
- Branch names must match: `^(feat|fix|chore|docs|style|refactor|perf|test|build|ci|revert)/[a-z0-9._-]+$`
- Conventional commits: `^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-z0-9\._-]+\))?!?: .+`
- Commit type determines PR label: feat→type:feature, fix→type:bug, docs→type:docs, refactor→type:refactor, chore→type:chore, style→type:chore, perf→type:feature, test→type:chore, build→type:chore, ci→type:chore, revert→type:bug
- PR body must contain: Closes #N (linked issue), PR type checkbox, Summary, Changes Table, Test Plan
### issue-creation
- Blank issues are disabled — MUST use a template (bug report or feature request)
- Every issue gets `status:needs-review` automatically on creation
- A maintainer MUST add `status:approved` before any PR can be opened
- Questions go to Discussions, not issues
- Bug report template required fields: Pre-flight Checks, Bug Description, Steps to Reproduce, Expected Behavior, Actual Behavior, Operating System, Agent/Client, Shell
- Feature request template required fields: Pre-flight Checks, Problem Description, Proposed Solution, Affected Area
### judgment-day
- Launch TWO sub-agents via delegate (async, parallel — never sequential)
- Each agent receives the same target but works independently
- Neither agent knows about the other — no cross-contamination
- Classify warnings as WARNING (real) or WARNING (theoretical)
- If confirmed CRITICALs or real WARNINGs exist → delegate Fix Agent
- After Fix Agent completes → re-launch both judges in parallel
- After 2 fix iterations, if issues remain → escalate to user
### skill-creator
- Create a skill when: pattern is used repeatedly, project-specific conventions differ, complex workflows need steps, decision trees help AI
- Don't create a skill when: documentation exists, pattern is trivial, one-off task
- Skill structure: frontmatter (name, description, triggers, allowed-tools), Critical Rules, When to Use, Patterns, Commands
## Project Conventions
| File | Path | Notes |
|------|------|-------|
| SPEC.md | /Users/freetlab/Proyectos/farolero/SPEC.md | Existing SDD artifacts with Explore/Propose/Spec/Tasks/Apply/Verify phases |
| .gga | /Users/freetlab/Proyectos/farolero/.gga | Gentleman Guardian Angel config (AI provider, file patterns, rules file) |
Read the convention files listed above for project-specific patterns and rules. All referenced paths have been extracted — no need to read index files to discover more.

50
.gga Normal file
View File

@@ -0,0 +1,50 @@
# Gentleman Guardian Angel Configuration
# https://github.com/your-org/gga
# AI Provider (required)
# Options: claude, gemini, codex, opencode, ollama:<model>, lmstudio[:model], github:<model>
# Examples:
# PROVIDER="claude"
# PROVIDER="gemini"
# PROVIDER="codex"
# PROVIDER="opencode"
# PROVIDER="opencode:anthropic/claude-opus-4-5"
# PROVIDER="ollama:llama3.2"
# PROVIDER="ollama:codellama"
# PROVIDER="lmstudio"
# PROVIDER="lmstudio:qwen2.5-coder-7b-instruct"
# PROVIDER="github:gpt-4o"
# PROVIDER="github:deepseek-r1"
PROVIDER="claude"
# File patterns to include in review (comma-separated)
# Default: * (all files)
# Examples:
# FILE_PATTERNS="*.ts,*.tsx"
# FILE_PATTERNS="*.py"
# FILE_PATTERNS="*.go,*.mod"
FILE_PATTERNS="*.ts,*.tsx,*.js,*.jsx"
# File patterns to exclude from review (comma-separated)
# Default: none
# Examples:
# EXCLUDE_PATTERNS="*.test.ts,*.spec.ts"
# EXCLUDE_PATTERNS="*_test.go,*.mock.ts"
EXCLUDE_PATTERNS="*.test.ts,*.spec.ts,*.test.tsx,*.spec.tsx,*.d.ts"
# File containing code review rules
# Default: AGENTS.md
RULES_FILE="AGENTS.md"
# Strict mode: fail if AI response is ambiguous
# Default: true
STRICT_MODE="true"
# Timeout in seconds for AI provider response
# Default: 300 (5 minutes)
# Increase for large changesets or slow connections
TIMEOUT="300"
# Base branch for --pr-mode (auto-detects main/master/develop if empty)
# Default: auto-detect
# PR_BASE_BRANCH="main"

View File

@@ -230,7 +230,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DropdownButtonFormField<String>( DropdownButtonFormField<String>(
value: seleccionado, initialValue: seleccionado,
decoration: InputDecoration( decoration: InputDecoration(
prefixIcon: const Icon(Icons.person), prefixIcon: const Icon(Icons.person),
hintText: l10n.selectProfile, hintText: l10n.selectProfile,

View File

@@ -81,7 +81,7 @@ class _PantallaLobbyHostState extends State<PantallaLobbyHost> {
), ),
const SizedBox(height: 12), const SizedBox(height: 12),
DropdownButtonFormField<String>( DropdownButtonFormField<String>(
value: _perfilSeleccionado, initialValue: _perfilSeleccionado,
decoration: InputDecoration( decoration: InputDecoration(
prefixIcon: const Icon(Icons.person), prefixIcon: const Icon(Icons.person),
hintText: l10n.selectProfile, hintText: l10n.selectProfile,

1
test.txt Normal file
View File

@@ -0,0 +1 @@
hello

View File

@@ -1,6 +1,5 @@
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:farolero/estado/estado_juego.dart'; import 'package:farolero/estado/estado_juego.dart';
import 'package:farolero/modelos/palabra.dart';
import 'package:farolero/modelos/partida.dart'; import 'package:farolero/modelos/partida.dart';
void main() { void main() {

View File

@@ -1,4 +1,3 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:farolero/estado/estado_juego.dart'; import 'package:farolero/estado/estado_juego.dart';

View File

@@ -1,4 +1,3 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:farolero/modelos/usuario.dart'; import 'package:farolero/modelos/usuario.dart';
import 'package:farolero/servicios/servicio_nearby.dart'; import 'package:farolero/servicios/servicio_nearby.dart';