Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
ada1c27
Fable http client
nielsdrost7 Jul 3, 2026
a396028
Fully Functional Fable5 Automation system
nielsdrost7 Jul 3, 2026
68d8fad
Improvements
nielsdrost7 Jul 3, 2026
36b83c1
Improvements
nielsdrost7 Jul 3, 2026
408aac2
Improvements
nielsdrost7 Jul 3, 2026
5bc2a0e
Fable Test Automation Improvements
nielsdrost7 Jul 3, 2026
d2b0c31
ran pint
nielsdrost7 Jul 3, 2026
c616368
Fable 5 test automation improvements
nielsdrost7 Jul 3, 2026
bae391f
Fable 5 test automation improvements
nielsdrost7 Jul 3, 2026
368f9a8
remove IDE files from repository
nielsdrost7 Jul 3, 2026
34c4bc4
Fable 5 test automation improvements
nielsdrost7 Jul 3, 2026
0d1e7b6
Fable 5 test automation improvements
nielsdrost7 Jul 3, 2026
f808e9a
Fable 5 test automation improvements
nielsdrost7 Jul 3, 2026
87ab88f
Fable 5 test automation improvements
nielsdrost7 Jul 3, 2026
406d9db
Test honesty improvements
nielsdrost7 Jul 3, 2026
f8f91dd
Fable 5 test automation improvements
nielsdrost7 Jul 3, 2026
487f62c
fix(tests): seed roles/permissions in panel test base classes
nielsdrost7 Jul 3, 2026
1853508
fix(tests): restore company crud permissions
nielsdrost7 Jul 3, 2026
5fb26a9
style: apply Laravel Pint fixes
github-actions[bot] Jul 3, 2026
3ea15da
improve .gitignore
nielsdrost7 Jul 3, 2026
aa24901
improve .gitignore
nielsdrost7 Jul 3, 2026
b0190a9
claude cleanup
nielsdrost7 Jul 6, 2026
4c87774
improve .gitignore
nielsdrost7 Jul 6, 2026
bcbbafb
feat(#130): report template storage layer and brick registry (Phase 1)
nielsdrost7 Jul 13, 2026
0f6aa7b
feat(#130): five-band report builder UI in admin and company panels (…
nielsdrost7 Jul 13, 2026
83abbe1
feat(#130): report renderer and PDF pipeline (Phase 3)
nielsdrost7 Jul 13, 2026
84d061c
feat(#411): per-document PDF template selection (Phase 4)
nielsdrost7 Jul 13, 2026
acdb249
fix(#130): dompdf-safe row layout in ReportRenderer
nielsdrost7 Jul 13, 2026
297c649
feat(#130): opt-in Browsershot (headless Chromium) PDF driver
nielsdrost7 Jul 13, 2026
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
87 changes: 87 additions & 0 deletions .claude/fable5/FABLE5_EXECUTION_PRD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
FABLE5 AUTONOMOUS EXECUTION PRD
InvoicePlane-v2

────────────────────────────────────────
PURPOSE
────────────────────────────────────────
Fable5 processes GitHub issues into draft PRs while reusing existing branches from:
underdogg-forks/invoiceplane-v2

PRs already exist in:
invoiceplane/invoiceplane-v2

Branches already exist in:
underdogg-forks/invoiceplane-v2

Fable5 must reconcile both systems.

────────────────────────────────────────
CRITICAL RULE
────────────────────────────────────────
NEVER CREATE NEW BRANCHES IF A PR-BOUND BRANCH ALREADY EXISTS.

Always reuse:
- existing PR branches
- existing fork branches

Branch identity is authoritative.

────────────────────────────────────────
SOURCE OF TRUTH PRIORITY
────────────────────────────────────────
1. Existing GitHub PR (invoiceplane/invoiceplane-v2)
2. Existing branch in fork (underdogg-forks/invoiceplane-v2)
3. Issue definition
4. Repository code state

────────────────────────────────────────
EXECUTION MODEL
────────────────────────────────────────
- Iterate through all provided issue IDs
- For each issue:
- locate existing PR
- extract associated branch from fork
- checkout and continue work on that branch
- do NOT reinitialize branch

────────────────────────────────────────
BRANCH REUSE RULE
────────────────────────────────────────
If PR exists:
- fetch PR branch from upstream or fork
- checkout branch locally
- continue commits

If PR does NOT exist:
- only then create new branch

────────────────────────────────────────
COMMIT POLICY
────────────────────────────────────────
- frequent commits required
- atomic logical changes only
- never mix multiple issues unless explicitly grouped

────────────────────────────────────────
PR POLICY
────────────────────────────────────────
- all PRs must remain DRAFT
- PR title format:
[IP-{issueId}] description
- PR body must be updated, never replaced blindly
- preserve GitHub discussion history

────────────────────────────────────────
FAILURE HANDLING
────────────────────────────────────────
If branch cannot be found:
- attempt fetch from:
underdogg-forks/invoiceplane-v2
- if still missing:
skip issue and log reason

────────────────────────────────────────
EXECUTION END CONDITION
────────────────────────────────────────
Stop when:
- all issues processed OR skipped
37 changes: 37 additions & 0 deletions .claude/fable5/Fable5PolicyLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

declare(strict_types=1);

final class Fable5PolicyLoader
{
public function load(): array
{
return [
'prd' => $this->loadFile('.claude/fable5/FABLE5_EXECUTION_PRD.md'),
'skills' => $this->loadDirectory('.claude/fable5/skills'),
'runtime' => $this->loadFile('.claude/fable5/runtime/overrides.md'),
'repo' => $this->loadFile('CLAUDE.md'),
];
}

private function loadFile(string $path): array
{
return file_exists($path)
? [file_get_contents($path)]
: [];
}

private function loadDirectory(string $path): array
{
if (!is_dir($path)) {
return [];
}

$files = glob($path . '/*.md');

return array_map(
fn ($file) => file_get_contents($file),
$files
);
}
}
75 changes: 75 additions & 0 deletions .claude/fable5/prd/EXECUTION_BOOT_FLOW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
FABLE5 EXECUTION BOOT FLOW

────────────────────────────────────────
PHASE 0 — SYSTEM INITIALIZATION
────────────────────────────────────────
Before any issue execution begins, Fable5 MUST build a deterministic execution graph.

This step is mandatory and must complete successfully before any branch work starts.

────────────────────────────────────────
PHASE 1 — DATA COLLECTION
────────────────────────────────────────
Fetch the following sources:

1. All open PRs from:
invoiceplane/invoiceplane-v2

2. All branches from:
underdogg-forks/invoiceplane-v2

3. Input issue list (static execution payload)

────────────────────────────────────────
PHASE 2 — RECONCILIATION
────────────────────────────────────────
Build an ExecutionGraph by mapping:

Issue ID →
Existing PR →
Associated branch (if available) →
Fork branch state

Rules:

- If PR exists AND branch exists in fork:
→ mark node as EXISTING_PR

- If PR exists BUT branch missing:
→ mark node as PR_MISSING_BRANCH

- If branch exists BUT no PR:
→ mark node as ORPHAN_BRANCH

- If neither exists:
→ mark node as NEW

────────────────────────────────────────
PHASE 3 — EXECUTION STRATEGY GENERATION
────────────────────────────────────────
Fable5 MUST derive execution order from graph:

Priority order:
1. EXISTING_PR (reuse and continue work)
2. ORPHAN_BRANCH (recover and attach to PR if needed)
3. PR_MISSING_BRANCH (repair state)
4. NEW (create fresh branches)

────────────────────────────────────────
PHASE 4 — PARALLELIZATION PLAN
────────────────────────────────────────
Fable5 may execute branches in parallel only if:

- no shared module writes exist
- no overlapping DTO / Service modifications occur

Otherwise execution must be serialized per module lock rules.

────────────────────────────────────────
PHASE 5 — EXECUTION HANDOFF
────────────────────────────────────────
Only after graph is complete:

→ begin issue processing loop
→ reuse branches from graph
→ never recreate existing execution state
7 changes: 7 additions & 0 deletions .claude/fable5/runtime/overrides.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
RUNTIME OVERRIDES

- allow_reuse_existing_branches=true
- forbid_branch_recreation=true
- execution_mode=continuous
- concurrency=enabled
- commit_frequency=high
26 changes: 26 additions & 0 deletions .claude/fable5/skills/concurrency.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
CONCURRENCY RULES

────────────────────────────────────────
PARALLEL EXECUTION
────────────────────────────────────────
Allowed only when:
- branches belong to different PRs
- no shared module writes

────────────────────────────────────────
MODULE LOCKING
────────────────────────────────────────
A module is locked when:
- a branch is actively modifying it

No concurrent edits allowed on:
- same Service
- same DTO
- same Filament Resource

────────────────────────────────────────
SAFE PARALLEL MODEL
────────────────────────────────────────
Each PR branch is an isolated execution unit.

No cross-branch writes to same module.
29 changes: 29 additions & 0 deletions .claude/fable5/skills/git-reuse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
PR + BRANCH REUSE POLICY

────────────────────────────────────────
CORE PRINCIPLE
────────────────────────────────────────
Existing work is authoritative.

If a branch exists in:
underdogg-forks/invoiceplane-v2

and is linked to a PR in:
invoiceplane/invoiceplane-v2

it MUST be reused.

────────────────────────────────────────
MAPPING RULE
────────────────────────────────────────
Issue ID → PR → Branch → Fork repository state

This mapping is immutable during execution.

────────────────────────────────────────
NO DUPLICATION RULE
────────────────────────────────────────
Never:
- recreate PR branch
- reinitialize git history
- reapply already existing commits
34 changes: 34 additions & 0 deletions .claude/fable5/skills/git.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
GIT EXECUTION RULES

────────────────────────────────────────
BRANCH DISCOVERY
────────────────────────────────────────
Always resolve branches in this order:

1. GitHub PR branch reference
2. local fork (underdogg-forks/invoiceplane-v2)
3. remote origin fallback

Never create a branch if a PR-linked branch exists.

────────────────────────────────────────
BRANCH CHECKOUT RULE
────────────────────────────────────────
When PR exists:
- fetch PR head ref
- checkout exact branch
- continue history

No rebase unless explicitly required by issue.

────────────────────────────────────────
COMMIT RULES
────────────────────────────────────────
- atomic commits only
- one logical change per commit
- frequent commits required

────────────────────────────────────────
SAFETY RULE
────────────────────────────────────────
Never overwrite branch history that already belongs to a PR.
64 changes: 0 additions & 64 deletions .claude/skills/abstract-seeder/SKILL.md

This file was deleted.

4 changes: 2 additions & 2 deletions .claude/skills/ci-schema-invariant-gate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ These are handled by other skills.

If CI fails:

- migrations failing → schema issue (handled by test-honesty)
- seed failing → factory/data issue (handled by test-honesty)
- migrations failing → schema issue (handled by data-layer-contracts)
- seed failing → factory/data issue (handled by data-layer-contracts)
- tests failing → behavior issue (handled by test layer)

CI does NOT interpret or classify failures.
Expand Down
Loading
Loading