feat: recover interrupted manifest runs - #20

Merged
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery
Aug 25, 2026
Merged

feat: recover interrupted manifest runs#20
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery

Conversation

@NightScripted

Copy link
Copy Markdown
Owner

Summary

  • add v3 manifests with private configuration digests, source fingerprints, atomic checkpoints, and terminal exception/interruption records
  • add --resume-manifest to reconcile incomplete apply runs and execute only verified pending operations
  • checkpoint CLI apply and undo runs before mutation and after every operation; retain v2 undo compatibility
  • document manual manifest retention and update the canonical roadmap after the CodeQL/Actions-policy hardening

Safety impact

  • SQLite access remains read-only.
  • Resume never regenerates a plan or rereads tag rules; it verifies recorded source/destination hashes and refuses changed, missing, or conflicting paths.
  • Manifests remain private, ignored artifacts and are never deleted automatically.

Verification

  • .venv/bin/python -m pytest tests/ -v --cov=. --cov-report=term-missing --cov-fail-under=80 (55 passed; 88.32%)
  • .venv/bin/python -m interrogate . (100.0%)
  • Ruff, format, mypy, yamllint, and package/install CLI smoke test

Closes the remaining R1-2 manifest recovery work.

@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba733c3d-9998-4c9b-8f0e-037e327b7c16


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-appsBot commented Aug 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds resumable v3 run manifests while preserving v2 undo compatibility.

  • Records configuration digests, source fingerprints, execution errors, and atomic per-operation checkpoints.
  • Reconciles interrupted and rollback-related operation states before executing verified pending work.
  • Updates CLI behavior, tests, and recovery documentation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

FilenameOverview
run_manifest.pyIntroduces v3 manifest persistence, operation reconciliation, and hash-verified recovery for incomplete apply runs.
run_renamer.pyIntegrates manifest checkpoints into apply and undo and adds explicit resume CLI handling.
execution.pyAdds progress callbacks for applied, failed, rolled-back, and rollback-failed operation outcomes.
tests/test_run_manifest.pyCovers interrupted runs, retryable failures, failed rollback reconciliation, duplicate cleanup, and changed-source rejection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Start apply and write running v3 manifest] --> B[Execute operation]
B -->|Applied| C[Checkpoint applied]
B -->|Failure| D[Checkpoint failed and roll back completed operations]
D --> E[Checkpoint rolled_back or rollback_failed]
C --> F{Run finished?}
E --> G[Keep manifest incomplete]
G --> H[Resume manifest]
H --> I{Paths and hashes reconcile?}
I -->|No| J[Block without mutation]
I -->|Yes| K[Checkpoint recovered operations]
K --> L[Apply verified pending operations]
L --> F
F -->|Yes| M[Finalize applied manifest]
F -->|No| B
Loading

Reviews (4): Last reviewed commit: "fix: recover verified rollback duplicate..." | Re-trigger Greptile

Comment threadrun_renamer.py Outdated
Comment threadrun_renamer.py Outdated
Comment threadrun_manifest.py Outdated
Comment threadrun_manifest.py
@NightScripted
NightScripted merged commit 3afd33e into mainAug 25, 2026
11 of 12 checks passed
@NightScripted
NightScripted deleted the feat/manifest-recovery branch August 25, 2026 09:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@NightScripted@ZacharyRW
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: recover interrupted manifest runs - #20

Merged
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery
Aug 25, 2026
Merged

feat: recover interrupted manifest runs#20
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery

Conversation

@NightScripted

Copy link
Copy Markdown
Owner

Summary

  • add v3 manifests with private configuration digests, source fingerprints, atomic checkpoints, and terminal exception/interruption records
  • add --resume-manifest to reconcile incomplete apply runs and execute only verified pending operations
  • checkpoint CLI apply and undo runs before mutation and after every operation; retain v2 undo compatibility
  • document manual manifest retention and update the canonical roadmap after the CodeQL/Actions-policy hardening

Safety impact

  • SQLite access remains read-only.
  • Resume never regenerates a plan or rereads tag rules; it verifies recorded source/destination hashes and refuses changed, missing, or conflicting paths.
  • Manifests remain private, ignored artifacts and are never deleted automatically.

Verification

  • .venv/bin/python -m pytest tests/ -v --cov=. --cov-report=term-missing --cov-fail-under=80 (55 passed; 88.32%)
  • .venv/bin/python -m interrogate . (100.0%)
  • Ruff, format, mypy, yamllint, and package/install CLI smoke test

Closes the remaining R1-2 manifest recovery work.

@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba733c3d-9998-4c9b-8f0e-037e327b7c16


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-appsBot commented Aug 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds resumable v3 run manifests while preserving v2 undo compatibility.

  • Records configuration digests, source fingerprints, execution errors, and atomic per-operation checkpoints.
  • Reconciles interrupted and rollback-related operation states before executing verified pending work.
  • Updates CLI behavior, tests, and recovery documentation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

FilenameOverview
run_manifest.pyIntroduces v3 manifest persistence, operation reconciliation, and hash-verified recovery for incomplete apply runs.
run_renamer.pyIntegrates manifest checkpoints into apply and undo and adds explicit resume CLI handling.
execution.pyAdds progress callbacks for applied, failed, rolled-back, and rollback-failed operation outcomes.
tests/test_run_manifest.pyCovers interrupted runs, retryable failures, failed rollback reconciliation, duplicate cleanup, and changed-source rejection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Start apply and write running v3 manifest] --> B[Execute operation]
B -->|Applied| C[Checkpoint applied]
B -->|Failure| D[Checkpoint failed and roll back completed operations]
D --> E[Checkpoint rolled_back or rollback_failed]
C --> F{Run finished?}
E --> G[Keep manifest incomplete]
G --> H[Resume manifest]
H --> I{Paths and hashes reconcile?}
I -->|No| J[Block without mutation]
I -->|Yes| K[Checkpoint recovered operations]
K --> L[Apply verified pending operations]
L --> F
F -->|Yes| M[Finalize applied manifest]
F -->|No| B
Loading

Reviews (4): Last reviewed commit: "fix: recover verified rollback duplicate..." | Re-trigger Greptile

Comment threadrun_renamer.py Outdated
Comment threadrun_renamer.py Outdated
Comment threadrun_manifest.py Outdated
Comment threadrun_manifest.py
@NightScripted
NightScripted merged commit 3afd33e into mainAug 25, 2026
11 of 12 checks passed
@NightScripted
NightScripted deleted the feat/manifest-recovery branch August 25, 2026 09:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@NightScripted@ZacharyRW
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: recover interrupted manifest runs - #20

Merged
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery
Aug 25, 2026
Merged

feat: recover interrupted manifest runs#20
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery

Conversation

@NightScripted

Copy link
Copy Markdown
Owner

Summary

  • add v3 manifests with private configuration digests, source fingerprints, atomic checkpoints, and terminal exception/interruption records
  • add --resume-manifest to reconcile incomplete apply runs and execute only verified pending operations
  • checkpoint CLI apply and undo runs before mutation and after every operation; retain v2 undo compatibility
  • document manual manifest retention and update the canonical roadmap after the CodeQL/Actions-policy hardening

Safety impact

  • SQLite access remains read-only.
  • Resume never regenerates a plan or rereads tag rules; it verifies recorded source/destination hashes and refuses changed, missing, or conflicting paths.
  • Manifests remain private, ignored artifacts and are never deleted automatically.

Verification

  • .venv/bin/python -m pytest tests/ -v --cov=. --cov-report=term-missing --cov-fail-under=80 (55 passed; 88.32%)
  • .venv/bin/python -m interrogate . (100.0%)
  • Ruff, format, mypy, yamllint, and package/install CLI smoke test

Closes the remaining R1-2 manifest recovery work.

@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba733c3d-9998-4c9b-8f0e-037e327b7c16


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-appsBot commented Aug 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds resumable v3 run manifests while preserving v2 undo compatibility.

  • Records configuration digests, source fingerprints, execution errors, and atomic per-operation checkpoints.
  • Reconciles interrupted and rollback-related operation states before executing verified pending work.
  • Updates CLI behavior, tests, and recovery documentation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

FilenameOverview
run_manifest.pyIntroduces v3 manifest persistence, operation reconciliation, and hash-verified recovery for incomplete apply runs.
run_renamer.pyIntegrates manifest checkpoints into apply and undo and adds explicit resume CLI handling.
execution.pyAdds progress callbacks for applied, failed, rolled-back, and rollback-failed operation outcomes.
tests/test_run_manifest.pyCovers interrupted runs, retryable failures, failed rollback reconciliation, duplicate cleanup, and changed-source rejection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Start apply and write running v3 manifest] --> B[Execute operation]
B -->|Applied| C[Checkpoint applied]
B -->|Failure| D[Checkpoint failed and roll back completed operations]
D --> E[Checkpoint rolled_back or rollback_failed]
C --> F{Run finished?}
E --> G[Keep manifest incomplete]
G --> H[Resume manifest]
H --> I{Paths and hashes reconcile?}
I -->|No| J[Block without mutation]
I -->|Yes| K[Checkpoint recovered operations]
K --> L[Apply verified pending operations]
L --> F
F -->|Yes| M[Finalize applied manifest]
F -->|No| B
Loading

Reviews (4): Last reviewed commit: "fix: recover verified rollback duplicate..." | Re-trigger Greptile

Comment threadrun_renamer.py Outdated
Comment threadrun_renamer.py Outdated
Comment threadrun_manifest.py Outdated
Comment threadrun_manifest.py
@NightScripted
NightScripted merged commit 3afd33e into mainAug 25, 2026
11 of 12 checks passed
@NightScripted
NightScripted deleted the feat/manifest-recovery branch August 25, 2026 09:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@NightScripted@ZacharyRW
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: recover interrupted manifest runs - #20

Merged
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery
Aug 25, 2026
Merged

feat: recover interrupted manifest runs#20
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery

Conversation

@NightScripted

Copy link
Copy Markdown
Owner

Summary

  • add v3 manifests with private configuration digests, source fingerprints, atomic checkpoints, and terminal exception/interruption records
  • add --resume-manifest to reconcile incomplete apply runs and execute only verified pending operations
  • checkpoint CLI apply and undo runs before mutation and after every operation; retain v2 undo compatibility
  • document manual manifest retention and update the canonical roadmap after the CodeQL/Actions-policy hardening

Safety impact

  • SQLite access remains read-only.
  • Resume never regenerates a plan or rereads tag rules; it verifies recorded source/destination hashes and refuses changed, missing, or conflicting paths.
  • Manifests remain private, ignored artifacts and are never deleted automatically.

Verification

  • .venv/bin/python -m pytest tests/ -v --cov=. --cov-report=term-missing --cov-fail-under=80 (55 passed; 88.32%)
  • .venv/bin/python -m interrogate . (100.0%)
  • Ruff, format, mypy, yamllint, and package/install CLI smoke test

Closes the remaining R1-2 manifest recovery work.

@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba733c3d-9998-4c9b-8f0e-037e327b7c16


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-appsBot commented Aug 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds resumable v3 run manifests while preserving v2 undo compatibility.

  • Records configuration digests, source fingerprints, execution errors, and atomic per-operation checkpoints.
  • Reconciles interrupted and rollback-related operation states before executing verified pending work.
  • Updates CLI behavior, tests, and recovery documentation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

FilenameOverview
run_manifest.pyIntroduces v3 manifest persistence, operation reconciliation, and hash-verified recovery for incomplete apply runs.
run_renamer.pyIntegrates manifest checkpoints into apply and undo and adds explicit resume CLI handling.
execution.pyAdds progress callbacks for applied, failed, rolled-back, and rollback-failed operation outcomes.
tests/test_run_manifest.pyCovers interrupted runs, retryable failures, failed rollback reconciliation, duplicate cleanup, and changed-source rejection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Start apply and write running v3 manifest] --> B[Execute operation]
B -->|Applied| C[Checkpoint applied]
B -->|Failure| D[Checkpoint failed and roll back completed operations]
D --> E[Checkpoint rolled_back or rollback_failed]
C --> F{Run finished?}
E --> G[Keep manifest incomplete]
G --> H[Resume manifest]
H --> I{Paths and hashes reconcile?}
I -->|No| J[Block without mutation]
I -->|Yes| K[Checkpoint recovered operations]
K --> L[Apply verified pending operations]
L --> F
F -->|Yes| M[Finalize applied manifest]
F -->|No| B
Loading

Reviews (4): Last reviewed commit: "fix: recover verified rollback duplicate..." | Re-trigger Greptile

Comment threadrun_renamer.py Outdated
Comment threadrun_renamer.py Outdated
Comment threadrun_manifest.py Outdated
Comment threadrun_manifest.py
@NightScripted
NightScripted merged commit 3afd33e into mainAug 25, 2026
11 of 12 checks passed
@NightScripted
NightScripted deleted the feat/manifest-recovery branch August 25, 2026 09:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@NightScripted@ZacharyRW
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: recover interrupted manifest runs - #20

Merged
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery
Aug 25, 2026
Merged

feat: recover interrupted manifest runs#20
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery

Conversation

@NightScripted

Copy link
Copy Markdown
Owner

Summary

  • add v3 manifests with private configuration digests, source fingerprints, atomic checkpoints, and terminal exception/interruption records
  • add --resume-manifest to reconcile incomplete apply runs and execute only verified pending operations
  • checkpoint CLI apply and undo runs before mutation and after every operation; retain v2 undo compatibility
  • document manual manifest retention and update the canonical roadmap after the CodeQL/Actions-policy hardening

Safety impact

  • SQLite access remains read-only.
  • Resume never regenerates a plan or rereads tag rules; it verifies recorded source/destination hashes and refuses changed, missing, or conflicting paths.
  • Manifests remain private, ignored artifacts and are never deleted automatically.

Verification

  • .venv/bin/python -m pytest tests/ -v --cov=. --cov-report=term-missing --cov-fail-under=80 (55 passed; 88.32%)
  • .venv/bin/python -m interrogate . (100.0%)
  • Ruff, format, mypy, yamllint, and package/install CLI smoke test

Closes the remaining R1-2 manifest recovery work.

@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba733c3d-9998-4c9b-8f0e-037e327b7c16


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-appsBot commented Aug 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds resumable v3 run manifests while preserving v2 undo compatibility.

  • Records configuration digests, source fingerprints, execution errors, and atomic per-operation checkpoints.
  • Reconciles interrupted and rollback-related operation states before executing verified pending work.
  • Updates CLI behavior, tests, and recovery documentation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

FilenameOverview
run_manifest.pyIntroduces v3 manifest persistence, operation reconciliation, and hash-verified recovery for incomplete apply runs.
run_renamer.pyIntegrates manifest checkpoints into apply and undo and adds explicit resume CLI handling.
execution.pyAdds progress callbacks for applied, failed, rolled-back, and rollback-failed operation outcomes.
tests/test_run_manifest.pyCovers interrupted runs, retryable failures, failed rollback reconciliation, duplicate cleanup, and changed-source rejection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Start apply and write running v3 manifest] --> B[Execute operation]
B -->|Applied| C[Checkpoint applied]
B -->|Failure| D[Checkpoint failed and roll back completed operations]
D --> E[Checkpoint rolled_back or rollback_failed]
C --> F{Run finished?}
E --> G[Keep manifest incomplete]
G --> H[Resume manifest]
H --> I{Paths and hashes reconcile?}
I -->|No| J[Block without mutation]
I -->|Yes| K[Checkpoint recovered operations]
K --> L[Apply verified pending operations]
L --> F
F -->|Yes| M[Finalize applied manifest]
F -->|No| B
Loading

Reviews (4): Last reviewed commit: "fix: recover verified rollback duplicate..." | Re-trigger Greptile

Comment threadrun_renamer.py Outdated
Comment threadrun_renamer.py Outdated
Comment threadrun_manifest.py Outdated
Comment threadrun_manifest.py
@NightScripted
NightScripted merged commit 3afd33e into mainAug 25, 2026
11 of 12 checks passed
@NightScripted
NightScripted deleted the feat/manifest-recovery branch August 25, 2026 09:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@NightScripted@ZacharyRW
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: recover interrupted manifest runs - #20

Merged
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery
Aug 25, 2026
Merged

feat: recover interrupted manifest runs#20
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery

Conversation

@NightScripted

Copy link
Copy Markdown
Owner

Summary

  • add v3 manifests with private configuration digests, source fingerprints, atomic checkpoints, and terminal exception/interruption records
  • add --resume-manifest to reconcile incomplete apply runs and execute only verified pending operations
  • checkpoint CLI apply and undo runs before mutation and after every operation; retain v2 undo compatibility
  • document manual manifest retention and update the canonical roadmap after the CodeQL/Actions-policy hardening

Safety impact

  • SQLite access remains read-only.
  • Resume never regenerates a plan or rereads tag rules; it verifies recorded source/destination hashes and refuses changed, missing, or conflicting paths.
  • Manifests remain private, ignored artifacts and are never deleted automatically.

Verification

  • .venv/bin/python -m pytest tests/ -v --cov=. --cov-report=term-missing --cov-fail-under=80 (55 passed; 88.32%)
  • .venv/bin/python -m interrogate . (100.0%)
  • Ruff, format, mypy, yamllint, and package/install CLI smoke test

Closes the remaining R1-2 manifest recovery work.

@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba733c3d-9998-4c9b-8f0e-037e327b7c16


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-appsBot commented Aug 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds resumable v3 run manifests while preserving v2 undo compatibility.

  • Records configuration digests, source fingerprints, execution errors, and atomic per-operation checkpoints.
  • Reconciles interrupted and rollback-related operation states before executing verified pending work.
  • Updates CLI behavior, tests, and recovery documentation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

FilenameOverview
run_manifest.pyIntroduces v3 manifest persistence, operation reconciliation, and hash-verified recovery for incomplete apply runs.
run_renamer.pyIntegrates manifest checkpoints into apply and undo and adds explicit resume CLI handling.
execution.pyAdds progress callbacks for applied, failed, rolled-back, and rollback-failed operation outcomes.
tests/test_run_manifest.pyCovers interrupted runs, retryable failures, failed rollback reconciliation, duplicate cleanup, and changed-source rejection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Start apply and write running v3 manifest] --> B[Execute operation]
B -->|Applied| C[Checkpoint applied]
B -->|Failure| D[Checkpoint failed and roll back completed operations]
D --> E[Checkpoint rolled_back or rollback_failed]
C --> F{Run finished?}
E --> G[Keep manifest incomplete]
G --> H[Resume manifest]
H --> I{Paths and hashes reconcile?}
I -->|No| J[Block without mutation]
I -->|Yes| K[Checkpoint recovered operations]
K --> L[Apply verified pending operations]
L --> F
F -->|Yes| M[Finalize applied manifest]
F -->|No| B
Loading

Reviews (4): Last reviewed commit: "fix: recover verified rollback duplicate..." | Re-trigger Greptile

Comment threadrun_renamer.py Outdated
Comment threadrun_renamer.py Outdated
Comment threadrun_manifest.py Outdated
Comment threadrun_manifest.py
@NightScripted
NightScripted merged commit 3afd33e into mainAug 25, 2026
11 of 12 checks passed
@NightScripted
NightScripted deleted the feat/manifest-recovery branch August 25, 2026 09:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@NightScripted@ZacharyRW
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: recover interrupted manifest runs - #20

Merged
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery
Aug 25, 2026
Merged

feat: recover interrupted manifest runs#20
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery

Conversation

@NightScripted

Copy link
Copy Markdown
Owner

Summary

  • add v3 manifests with private configuration digests, source fingerprints, atomic checkpoints, and terminal exception/interruption records
  • add --resume-manifest to reconcile incomplete apply runs and execute only verified pending operations
  • checkpoint CLI apply and undo runs before mutation and after every operation; retain v2 undo compatibility
  • document manual manifest retention and update the canonical roadmap after the CodeQL/Actions-policy hardening

Safety impact

  • SQLite access remains read-only.
  • Resume never regenerates a plan or rereads tag rules; it verifies recorded source/destination hashes and refuses changed, missing, or conflicting paths.
  • Manifests remain private, ignored artifacts and are never deleted automatically.

Verification

  • .venv/bin/python -m pytest tests/ -v --cov=. --cov-report=term-missing --cov-fail-under=80 (55 passed; 88.32%)
  • .venv/bin/python -m interrogate . (100.0%)
  • Ruff, format, mypy, yamllint, and package/install CLI smoke test

Closes the remaining R1-2 manifest recovery work.

@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba733c3d-9998-4c9b-8f0e-037e327b7c16


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-appsBot commented Aug 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds resumable v3 run manifests while preserving v2 undo compatibility.

  • Records configuration digests, source fingerprints, execution errors, and atomic per-operation checkpoints.
  • Reconciles interrupted and rollback-related operation states before executing verified pending work.
  • Updates CLI behavior, tests, and recovery documentation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

FilenameOverview
run_manifest.pyIntroduces v3 manifest persistence, operation reconciliation, and hash-verified recovery for incomplete apply runs.
run_renamer.pyIntegrates manifest checkpoints into apply and undo and adds explicit resume CLI handling.
execution.pyAdds progress callbacks for applied, failed, rolled-back, and rollback-failed operation outcomes.
tests/test_run_manifest.pyCovers interrupted runs, retryable failures, failed rollback reconciliation, duplicate cleanup, and changed-source rejection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Start apply and write running v3 manifest] --> B[Execute operation]
B -->|Applied| C[Checkpoint applied]
B -->|Failure| D[Checkpoint failed and roll back completed operations]
D --> E[Checkpoint rolled_back or rollback_failed]
C --> F{Run finished?}
E --> G[Keep manifest incomplete]
G --> H[Resume manifest]
H --> I{Paths and hashes reconcile?}
I -->|No| J[Block without mutation]
I -->|Yes| K[Checkpoint recovered operations]
K --> L[Apply verified pending operations]
L --> F
F -->|Yes| M[Finalize applied manifest]
F -->|No| B
Loading

Reviews (4): Last reviewed commit: "fix: recover verified rollback duplicate..." | Re-trigger Greptile

Comment threadrun_renamer.py Outdated
Comment threadrun_renamer.py Outdated
Comment threadrun_manifest.py Outdated
Comment threadrun_manifest.py
@NightScripted
NightScripted merged commit 3afd33e into mainAug 25, 2026
11 of 12 checks passed
@NightScripted
NightScripted deleted the feat/manifest-recovery branch August 25, 2026 09:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@NightScripted@ZacharyRW
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: recover interrupted manifest runs - #20

Merged
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery
Aug 25, 2026
Merged

feat: recover interrupted manifest runs#20
NightScripted merged 6 commits into
mainfrom
feat/manifest-recovery

Conversation

@NightScripted

Copy link
Copy Markdown
Owner

Summary

  • add v3 manifests with private configuration digests, source fingerprints, atomic checkpoints, and terminal exception/interruption records
  • add --resume-manifest to reconcile incomplete apply runs and execute only verified pending operations
  • checkpoint CLI apply and undo runs before mutation and after every operation; retain v2 undo compatibility
  • document manual manifest retention and update the canonical roadmap after the CodeQL/Actions-policy hardening

Safety impact

  • SQLite access remains read-only.
  • Resume never regenerates a plan or rereads tag rules; it verifies recorded source/destination hashes and refuses changed, missing, or conflicting paths.
  • Manifests remain private, ignored artifacts and are never deleted automatically.

Verification

  • .venv/bin/python -m pytest tests/ -v --cov=. --cov-report=term-missing --cov-fail-under=80 (55 passed; 88.32%)
  • .venv/bin/python -m interrogate . (100.0%)
  • Ruff, format, mypy, yamllint, and package/install CLI smoke test

Closes the remaining R1-2 manifest recovery work.

@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba733c3d-9998-4c9b-8f0e-037e327b7c16


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-appsBot commented Aug 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds resumable v3 run manifests while preserving v2 undo compatibility.

  • Records configuration digests, source fingerprints, execution errors, and atomic per-operation checkpoints.
  • Reconciles interrupted and rollback-related operation states before executing verified pending work.
  • Updates CLI behavior, tests, and recovery documentation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

FilenameOverview
run_manifest.pyIntroduces v3 manifest persistence, operation reconciliation, and hash-verified recovery for incomplete apply runs.
run_renamer.pyIntegrates manifest checkpoints into apply and undo and adds explicit resume CLI handling.
execution.pyAdds progress callbacks for applied, failed, rolled-back, and rollback-failed operation outcomes.
tests/test_run_manifest.pyCovers interrupted runs, retryable failures, failed rollback reconciliation, duplicate cleanup, and changed-source rejection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Start apply and write running v3 manifest] --> B[Execute operation]
B -->|Applied| C[Checkpoint applied]
B -->|Failure| D[Checkpoint failed and roll back completed operations]
D --> E[Checkpoint rolled_back or rollback_failed]
C --> F{Run finished?}
E --> G[Keep manifest incomplete]
G --> H[Resume manifest]
H --> I{Paths and hashes reconcile?}
I -->|No| J[Block without mutation]
I -->|Yes| K[Checkpoint recovered operations]
K --> L[Apply verified pending operations]
L --> F
F -->|Yes| M[Finalize applied manifest]
F -->|No| B
Loading

Reviews (4): Last reviewed commit: "fix: recover verified rollback duplicate..." | Re-trigger Greptile

Comment threadrun_renamer.py Outdated
Comment threadrun_renamer.py Outdated
Comment threadrun_manifest.py Outdated
Comment threadrun_manifest.py
@NightScripted
NightScripted merged commit 3afd33e into mainAug 25, 2026
11 of 12 checks passed
@NightScripted
NightScripted deleted the feat/manifest-recovery branch August 25, 2026 09:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@NightScripted@ZacharyRW