Skip to content

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling - #241

Open
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode
Open

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling#241
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode

Conversation

@sebastianbraun25

@sebastianbraun25sebastianbraun25 commented Aug 31, 2026

Copy link
Copy Markdown

Note

This PR was created in collaboration between a human and AI: implementation, tests, and
PR text were created by an AI assistant under the guidance and review of the human author.

Problem

openkb add currently reports a whole-file "added" outcome even when one or more individual
concepts/entities failed to generate during compilation. _compile_concepts in
openkb/agent/compiler.py collects exceptions from the per-concept/per-entity generation tasks
via asyncio.gather(..., return_exceptions=True), logs a [WARN] ... planned but only N written
line, and continues — but the file's hash is still registered and the source is still eligible for
auto_delete_added_files, so a partially-compiled document looks identical to a fully successful
one from the CLI/API caller's point of view.

Solution / Changes

  • New insert_mode config key (.openkb/config.yaml) with three values:
    • "normal" (default): unchanged behavior — a concept/entity generation failure during compile
      is logged as a warning and the file is still reported "added".
    • "fail-fast": the first concept/entity generation failure cancels every other still-pending
      generation in the batch and immediately raises ConceptCompilationError — nothing from the
      batch is written.
    • "fail-at-end": every planned concept/entity generation is attempted (so every failure for the
      document is logged in one pass) before ConceptCompilationError is raised if anything failed.
  • Both strict modes rely entirely on the existing mutation-snapshot rollback
    (openkb.add_coordinator/openkb.mutation) to discard the add and report it "failed" — no new
    rollback path needed. The existing "keep raw/ on failed" and "keep the debug log on a
    non-'added' outcome" behaviors already cover raw-file and log-preservation for strict mode.
  • _compile_concepts's three early-return paths (unparseable plan, scalar plan,
    all-items-filtered-as-malformed) now also raise under a strict insert_mode, not just individual
    concept/entity generation failures — a genuinely empty plan (nothing was ever planned) still
    counts as complete success in every mode.
  • compile_short_doc/compile_long_doc resolve insert_mode from the already-loaded KB config, so
    no CLI-level plumbing is needed.
  • Backward compatible: default "normal" behavior is unchanged.

Issues

…ict compile-failure handling
- Add `insert_mode` config key (`.openkb/config.yaml`) with three values:
- "normal" (default): unchanged behavior — a concept/entity generation
failure during compile is logged as a warning and the file is still
reported "added".
- "fail-fast": the first concept/entity generation failure cancels every
other still-pending generation in the batch and immediately raises
`ConceptCompilationError` — nothing from the batch is written.
- "fail-at-end": every planned concept/entity generation is attempted (so
every failure for the document is logged in one pass) before
`ConceptCompilationError` is raised if anything failed.
- Both strict modes rely entirely on the existing mutation-snapshot rollback
(`openkb.add_coordinator`/`openkb.mutation`) to discard the add and report
it "failed" — no new rollback path needed. The existing "keep raw/ on
failed" and "keep the debug log on a non-'added' outcome" behaviors already
cover the raw-file and log-preservation requirements for strict mode.
- `_compile_concepts`'s three early-return paths (unparseable plan, scalar
plan, all-items-filtered-as-malformed) now also raise under a strict
insert_mode, not just individual concept/entity generation failures — a
genuinely empty plan (nothing was ever planned) still counts as complete
success in every mode.
- `compile_short_doc`/`compile_long_doc` resolve `insert_mode` from the
already-loaded KB config, so no CLI-level plumbing is needed.
ResolvesVectifyAI#239
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling

1 participant

@sebastianbraun25
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling by sebastianbraun25 · Pull Request #241 · VectifyAI/OpenKB · GitHub
Skip to content

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling - #241

Open
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode
Open

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling#241
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode

Conversation

@sebastianbraun25

@sebastianbraun25sebastianbraun25 commented Aug 31, 2026

Copy link
Copy Markdown

Note

This PR was created in collaboration between a human and AI: implementation, tests, and
PR text were created by an AI assistant under the guidance and review of the human author.

Problem

openkb add currently reports a whole-file "added" outcome even when one or more individual
concepts/entities failed to generate during compilation. _compile_concepts in
openkb/agent/compiler.py collects exceptions from the per-concept/per-entity generation tasks
via asyncio.gather(..., return_exceptions=True), logs a [WARN] ... planned but only N written
line, and continues — but the file's hash is still registered and the source is still eligible for
auto_delete_added_files, so a partially-compiled document looks identical to a fully successful
one from the CLI/API caller's point of view.

Solution / Changes

  • New insert_mode config key (.openkb/config.yaml) with three values:
    • "normal" (default): unchanged behavior — a concept/entity generation failure during compile
      is logged as a warning and the file is still reported "added".
    • "fail-fast": the first concept/entity generation failure cancels every other still-pending
      generation in the batch and immediately raises ConceptCompilationError — nothing from the
      batch is written.
    • "fail-at-end": every planned concept/entity generation is attempted (so every failure for the
      document is logged in one pass) before ConceptCompilationError is raised if anything failed.
  • Both strict modes rely entirely on the existing mutation-snapshot rollback
    (openkb.add_coordinator/openkb.mutation) to discard the add and report it "failed" — no new
    rollback path needed. The existing "keep raw/ on failed" and "keep the debug log on a
    non-'added' outcome" behaviors already cover raw-file and log-preservation for strict mode.
  • _compile_concepts's three early-return paths (unparseable plan, scalar plan,
    all-items-filtered-as-malformed) now also raise under a strict insert_mode, not just individual
    concept/entity generation failures — a genuinely empty plan (nothing was ever planned) still
    counts as complete success in every mode.
  • compile_short_doc/compile_long_doc resolve insert_mode from the already-loaded KB config, so
    no CLI-level plumbing is needed.
  • Backward compatible: default "normal" behavior is unchanged.

Issues

…ict compile-failure handling
- Add `insert_mode` config key (`.openkb/config.yaml`) with three values:
- "normal" (default): unchanged behavior — a concept/entity generation
failure during compile is logged as a warning and the file is still
reported "added".
- "fail-fast": the first concept/entity generation failure cancels every
other still-pending generation in the batch and immediately raises
`ConceptCompilationError` — nothing from the batch is written.
- "fail-at-end": every planned concept/entity generation is attempted (so
every failure for the document is logged in one pass) before
`ConceptCompilationError` is raised if anything failed.
- Both strict modes rely entirely on the existing mutation-snapshot rollback
(`openkb.add_coordinator`/`openkb.mutation`) to discard the add and report
it "failed" — no new rollback path needed. The existing "keep raw/ on
failed" and "keep the debug log on a non-'added' outcome" behaviors already
cover the raw-file and log-preservation requirements for strict mode.
- `_compile_concepts`'s three early-return paths (unparseable plan, scalar
plan, all-items-filtered-as-malformed) now also raise under a strict
insert_mode, not just individual concept/entity generation failures — a
genuinely empty plan (nothing was ever planned) still counts as complete
success in every mode.
- `compile_short_doc`/`compile_long_doc` resolve `insert_mode` from the
already-loaded KB config, so no CLI-level plumbing is needed.
ResolvesVectifyAI#239
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling

1 participant

@sebastianbraun25
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling by sebastianbraun25 · Pull Request #241 · VectifyAI/OpenKB · GitHub
Skip to content

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling - #241

Open
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode
Open

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling#241
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode

Conversation

@sebastianbraun25

@sebastianbraun25sebastianbraun25 commented Aug 31, 2026

Copy link
Copy Markdown

Note

This PR was created in collaboration between a human and AI: implementation, tests, and
PR text were created by an AI assistant under the guidance and review of the human author.

Problem

openkb add currently reports a whole-file "added" outcome even when one or more individual
concepts/entities failed to generate during compilation. _compile_concepts in
openkb/agent/compiler.py collects exceptions from the per-concept/per-entity generation tasks
via asyncio.gather(..., return_exceptions=True), logs a [WARN] ... planned but only N written
line, and continues — but the file's hash is still registered and the source is still eligible for
auto_delete_added_files, so a partially-compiled document looks identical to a fully successful
one from the CLI/API caller's point of view.

Solution / Changes

  • New insert_mode config key (.openkb/config.yaml) with three values:
    • "normal" (default): unchanged behavior — a concept/entity generation failure during compile
      is logged as a warning and the file is still reported "added".
    • "fail-fast": the first concept/entity generation failure cancels every other still-pending
      generation in the batch and immediately raises ConceptCompilationError — nothing from the
      batch is written.
    • "fail-at-end": every planned concept/entity generation is attempted (so every failure for the
      document is logged in one pass) before ConceptCompilationError is raised if anything failed.
  • Both strict modes rely entirely on the existing mutation-snapshot rollback
    (openkb.add_coordinator/openkb.mutation) to discard the add and report it "failed" — no new
    rollback path needed. The existing "keep raw/ on failed" and "keep the debug log on a
    non-'added' outcome" behaviors already cover raw-file and log-preservation for strict mode.
  • _compile_concepts's three early-return paths (unparseable plan, scalar plan,
    all-items-filtered-as-malformed) now also raise under a strict insert_mode, not just individual
    concept/entity generation failures — a genuinely empty plan (nothing was ever planned) still
    counts as complete success in every mode.
  • compile_short_doc/compile_long_doc resolve insert_mode from the already-loaded KB config, so
    no CLI-level plumbing is needed.
  • Backward compatible: default "normal" behavior is unchanged.

Issues

…ict compile-failure handling
- Add `insert_mode` config key (`.openkb/config.yaml`) with three values:
- "normal" (default): unchanged behavior — a concept/entity generation
failure during compile is logged as a warning and the file is still
reported "added".
- "fail-fast": the first concept/entity generation failure cancels every
other still-pending generation in the batch and immediately raises
`ConceptCompilationError` — nothing from the batch is written.
- "fail-at-end": every planned concept/entity generation is attempted (so
every failure for the document is logged in one pass) before
`ConceptCompilationError` is raised if anything failed.
- Both strict modes rely entirely on the existing mutation-snapshot rollback
(`openkb.add_coordinator`/`openkb.mutation`) to discard the add and report
it "failed" — no new rollback path needed. The existing "keep raw/ on
failed" and "keep the debug log on a non-'added' outcome" behaviors already
cover the raw-file and log-preservation requirements for strict mode.
- `_compile_concepts`'s three early-return paths (unparseable plan, scalar
plan, all-items-filtered-as-malformed) now also raise under a strict
insert_mode, not just individual concept/entity generation failures — a
genuinely empty plan (nothing was ever planned) still counts as complete
success in every mode.
- `compile_short_doc`/`compile_long_doc` resolve `insert_mode` from the
already-loaded KB config, so no CLI-level plumbing is needed.
ResolvesVectifyAI#239
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling

1 participant

@sebastianbraun25
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', '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('^' + ".*" + ' feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling by sebastianbraun25 · Pull Request #241 · VectifyAI/OpenKB · GitHub
Skip to content

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling - #241

Open
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode
Open

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling#241
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode

Conversation

@sebastianbraun25

@sebastianbraun25sebastianbraun25 commented Aug 31, 2026

Copy link
Copy Markdown

Note

This PR was created in collaboration between a human and AI: implementation, tests, and
PR text were created by an AI assistant under the guidance and review of the human author.

Problem

openkb add currently reports a whole-file "added" outcome even when one or more individual
concepts/entities failed to generate during compilation. _compile_concepts in
openkb/agent/compiler.py collects exceptions from the per-concept/per-entity generation tasks
via asyncio.gather(..., return_exceptions=True), logs a [WARN] ... planned but only N written
line, and continues — but the file's hash is still registered and the source is still eligible for
auto_delete_added_files, so a partially-compiled document looks identical to a fully successful
one from the CLI/API caller's point of view.

Solution / Changes

  • New insert_mode config key (.openkb/config.yaml) with three values:
    • "normal" (default): unchanged behavior — a concept/entity generation failure during compile
      is logged as a warning and the file is still reported "added".
    • "fail-fast": the first concept/entity generation failure cancels every other still-pending
      generation in the batch and immediately raises ConceptCompilationError — nothing from the
      batch is written.
    • "fail-at-end": every planned concept/entity generation is attempted (so every failure for the
      document is logged in one pass) before ConceptCompilationError is raised if anything failed.
  • Both strict modes rely entirely on the existing mutation-snapshot rollback
    (openkb.add_coordinator/openkb.mutation) to discard the add and report it "failed" — no new
    rollback path needed. The existing "keep raw/ on failed" and "keep the debug log on a
    non-'added' outcome" behaviors already cover raw-file and log-preservation for strict mode.
  • _compile_concepts's three early-return paths (unparseable plan, scalar plan,
    all-items-filtered-as-malformed) now also raise under a strict insert_mode, not just individual
    concept/entity generation failures — a genuinely empty plan (nothing was ever planned) still
    counts as complete success in every mode.
  • compile_short_doc/compile_long_doc resolve insert_mode from the already-loaded KB config, so
    no CLI-level plumbing is needed.
  • Backward compatible: default "normal" behavior is unchanged.

Issues

…ict compile-failure handling
- Add `insert_mode` config key (`.openkb/config.yaml`) with three values:
- "normal" (default): unchanged behavior — a concept/entity generation
failure during compile is logged as a warning and the file is still
reported "added".
- "fail-fast": the first concept/entity generation failure cancels every
other still-pending generation in the batch and immediately raises
`ConceptCompilationError` — nothing from the batch is written.
- "fail-at-end": every planned concept/entity generation is attempted (so
every failure for the document is logged in one pass) before
`ConceptCompilationError` is raised if anything failed.
- Both strict modes rely entirely on the existing mutation-snapshot rollback
(`openkb.add_coordinator`/`openkb.mutation`) to discard the add and report
it "failed" — no new rollback path needed. The existing "keep raw/ on
failed" and "keep the debug log on a non-'added' outcome" behaviors already
cover the raw-file and log-preservation requirements for strict mode.
- `_compile_concepts`'s three early-return paths (unparseable plan, scalar
plan, all-items-filtered-as-malformed) now also raise under a strict
insert_mode, not just individual concept/entity generation failures — a
genuinely empty plan (nothing was ever planned) still counts as complete
success in every mode.
- `compile_short_doc`/`compile_long_doc` resolve `insert_mode` from the
already-loaded KB config, so no CLI-level plumbing is needed.
ResolvesVectifyAI#239
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling

1 participant

@sebastianbraun25
, '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" + ' feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling by sebastianbraun25 · Pull Request #241 · VectifyAI/OpenKB · GitHub
Skip to content

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling - #241

Open
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode
Open

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling#241
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode

Conversation

@sebastianbraun25

@sebastianbraun25sebastianbraun25 commented Aug 31, 2026

Copy link
Copy Markdown

Note

This PR was created in collaboration between a human and AI: implementation, tests, and
PR text were created by an AI assistant under the guidance and review of the human author.

Problem

openkb add currently reports a whole-file "added" outcome even when one or more individual
concepts/entities failed to generate during compilation. _compile_concepts in
openkb/agent/compiler.py collects exceptions from the per-concept/per-entity generation tasks
via asyncio.gather(..., return_exceptions=True), logs a [WARN] ... planned but only N written
line, and continues — but the file's hash is still registered and the source is still eligible for
auto_delete_added_files, so a partially-compiled document looks identical to a fully successful
one from the CLI/API caller's point of view.

Solution / Changes

  • New insert_mode config key (.openkb/config.yaml) with three values:
    • "normal" (default): unchanged behavior — a concept/entity generation failure during compile
      is logged as a warning and the file is still reported "added".
    • "fail-fast": the first concept/entity generation failure cancels every other still-pending
      generation in the batch and immediately raises ConceptCompilationError — nothing from the
      batch is written.
    • "fail-at-end": every planned concept/entity generation is attempted (so every failure for the
      document is logged in one pass) before ConceptCompilationError is raised if anything failed.
  • Both strict modes rely entirely on the existing mutation-snapshot rollback
    (openkb.add_coordinator/openkb.mutation) to discard the add and report it "failed" — no new
    rollback path needed. The existing "keep raw/ on failed" and "keep the debug log on a
    non-'added' outcome" behaviors already cover raw-file and log-preservation for strict mode.
  • _compile_concepts's three early-return paths (unparseable plan, scalar plan,
    all-items-filtered-as-malformed) now also raise under a strict insert_mode, not just individual
    concept/entity generation failures — a genuinely empty plan (nothing was ever planned) still
    counts as complete success in every mode.
  • compile_short_doc/compile_long_doc resolve insert_mode from the already-loaded KB config, so
    no CLI-level plumbing is needed.
  • Backward compatible: default "normal" behavior is unchanged.

Issues

…ict compile-failure handling
- Add `insert_mode` config key (`.openkb/config.yaml`) with three values:
- "normal" (default): unchanged behavior — a concept/entity generation
failure during compile is logged as a warning and the file is still
reported "added".
- "fail-fast": the first concept/entity generation failure cancels every
other still-pending generation in the batch and immediately raises
`ConceptCompilationError` — nothing from the batch is written.
- "fail-at-end": every planned concept/entity generation is attempted (so
every failure for the document is logged in one pass) before
`ConceptCompilationError` is raised if anything failed.
- Both strict modes rely entirely on the existing mutation-snapshot rollback
(`openkb.add_coordinator`/`openkb.mutation`) to discard the add and report
it "failed" — no new rollback path needed. The existing "keep raw/ on
failed" and "keep the debug log on a non-'added' outcome" behaviors already
cover the raw-file and log-preservation requirements for strict mode.
- `_compile_concepts`'s three early-return paths (unparseable plan, scalar
plan, all-items-filtered-as-malformed) now also raise under a strict
insert_mode, not just individual concept/entity generation failures — a
genuinely empty plan (nothing was ever planned) still counts as complete
success in every mode.
- `compile_short_doc`/`compile_long_doc` resolve `insert_mode` from the
already-loaded KB config, so no CLI-level plumbing is needed.
ResolvesVectifyAI#239
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling

1 participant

@sebastianbraun25
, '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('^' + ".*" + ' feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling by sebastianbraun25 · Pull Request #241 · VectifyAI/OpenKB · GitHub
Skip to content

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling - #241

Open
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode
Open

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling#241
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode

Conversation

@sebastianbraun25

@sebastianbraun25sebastianbraun25 commented Aug 31, 2026

Copy link
Copy Markdown

Note

This PR was created in collaboration between a human and AI: implementation, tests, and
PR text were created by an AI assistant under the guidance and review of the human author.

Problem

openkb add currently reports a whole-file "added" outcome even when one or more individual
concepts/entities failed to generate during compilation. _compile_concepts in
openkb/agent/compiler.py collects exceptions from the per-concept/per-entity generation tasks
via asyncio.gather(..., return_exceptions=True), logs a [WARN] ... planned but only N written
line, and continues — but the file's hash is still registered and the source is still eligible for
auto_delete_added_files, so a partially-compiled document looks identical to a fully successful
one from the CLI/API caller's point of view.

Solution / Changes

  • New insert_mode config key (.openkb/config.yaml) with three values:
    • "normal" (default): unchanged behavior — a concept/entity generation failure during compile
      is logged as a warning and the file is still reported "added".
    • "fail-fast": the first concept/entity generation failure cancels every other still-pending
      generation in the batch and immediately raises ConceptCompilationError — nothing from the
      batch is written.
    • "fail-at-end": every planned concept/entity generation is attempted (so every failure for the
      document is logged in one pass) before ConceptCompilationError is raised if anything failed.
  • Both strict modes rely entirely on the existing mutation-snapshot rollback
    (openkb.add_coordinator/openkb.mutation) to discard the add and report it "failed" — no new
    rollback path needed. The existing "keep raw/ on failed" and "keep the debug log on a
    non-'added' outcome" behaviors already cover raw-file and log-preservation for strict mode.
  • _compile_concepts's three early-return paths (unparseable plan, scalar plan,
    all-items-filtered-as-malformed) now also raise under a strict insert_mode, not just individual
    concept/entity generation failures — a genuinely empty plan (nothing was ever planned) still
    counts as complete success in every mode.
  • compile_short_doc/compile_long_doc resolve insert_mode from the already-loaded KB config, so
    no CLI-level plumbing is needed.
  • Backward compatible: default "normal" behavior is unchanged.

Issues

…ict compile-failure handling
- Add `insert_mode` config key (`.openkb/config.yaml`) with three values:
- "normal" (default): unchanged behavior — a concept/entity generation
failure during compile is logged as a warning and the file is still
reported "added".
- "fail-fast": the first concept/entity generation failure cancels every
other still-pending generation in the batch and immediately raises
`ConceptCompilationError` — nothing from the batch is written.
- "fail-at-end": every planned concept/entity generation is attempted (so
every failure for the document is logged in one pass) before
`ConceptCompilationError` is raised if anything failed.
- Both strict modes rely entirely on the existing mutation-snapshot rollback
(`openkb.add_coordinator`/`openkb.mutation`) to discard the add and report
it "failed" — no new rollback path needed. The existing "keep raw/ on
failed" and "keep the debug log on a non-'added' outcome" behaviors already
cover the raw-file and log-preservation requirements for strict mode.
- `_compile_concepts`'s three early-return paths (unparseable plan, scalar
plan, all-items-filtered-as-malformed) now also raise under a strict
insert_mode, not just individual concept/entity generation failures — a
genuinely empty plan (nothing was ever planned) still counts as complete
success in every mode.
- `compile_short_doc`/`compile_long_doc` resolve `insert_mode` from the
already-loaded KB config, so no CLI-level plumbing is needed.
ResolvesVectifyAI#239
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling

1 participant

@sebastianbraun25
, '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); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling by sebastianbraun25 · Pull Request #241 · VectifyAI/OpenKB · GitHub
Skip to content

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling - #241

Open
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode
Open

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling#241
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode

Conversation

@sebastianbraun25

@sebastianbraun25sebastianbraun25 commented Aug 31, 2026

Copy link
Copy Markdown

Note

This PR was created in collaboration between a human and AI: implementation, tests, and
PR text were created by an AI assistant under the guidance and review of the human author.

Problem

openkb add currently reports a whole-file "added" outcome even when one or more individual
concepts/entities failed to generate during compilation. _compile_concepts in
openkb/agent/compiler.py collects exceptions from the per-concept/per-entity generation tasks
via asyncio.gather(..., return_exceptions=True), logs a [WARN] ... planned but only N written
line, and continues — but the file's hash is still registered and the source is still eligible for
auto_delete_added_files, so a partially-compiled document looks identical to a fully successful
one from the CLI/API caller's point of view.

Solution / Changes

  • New insert_mode config key (.openkb/config.yaml) with three values:
    • "normal" (default): unchanged behavior — a concept/entity generation failure during compile
      is logged as a warning and the file is still reported "added".
    • "fail-fast": the first concept/entity generation failure cancels every other still-pending
      generation in the batch and immediately raises ConceptCompilationError — nothing from the
      batch is written.
    • "fail-at-end": every planned concept/entity generation is attempted (so every failure for the
      document is logged in one pass) before ConceptCompilationError is raised if anything failed.
  • Both strict modes rely entirely on the existing mutation-snapshot rollback
    (openkb.add_coordinator/openkb.mutation) to discard the add and report it "failed" — no new
    rollback path needed. The existing "keep raw/ on failed" and "keep the debug log on a
    non-'added' outcome" behaviors already cover raw-file and log-preservation for strict mode.
  • _compile_concepts's three early-return paths (unparseable plan, scalar plan,
    all-items-filtered-as-malformed) now also raise under a strict insert_mode, not just individual
    concept/entity generation failures — a genuinely empty plan (nothing was ever planned) still
    counts as complete success in every mode.
  • compile_short_doc/compile_long_doc resolve insert_mode from the already-loaded KB config, so
    no CLI-level plumbing is needed.
  • Backward compatible: default "normal" behavior is unchanged.

Issues

…ict compile-failure handling
- Add `insert_mode` config key (`.openkb/config.yaml`) with three values:
- "normal" (default): unchanged behavior — a concept/entity generation
failure during compile is logged as a warning and the file is still
reported "added".
- "fail-fast": the first concept/entity generation failure cancels every
other still-pending generation in the batch and immediately raises
`ConceptCompilationError` — nothing from the batch is written.
- "fail-at-end": every planned concept/entity generation is attempted (so
every failure for the document is logged in one pass) before
`ConceptCompilationError` is raised if anything failed.
- Both strict modes rely entirely on the existing mutation-snapshot rollback
(`openkb.add_coordinator`/`openkb.mutation`) to discard the add and report
it "failed" — no new rollback path needed. The existing "keep raw/ on
failed" and "keep the debug log on a non-'added' outcome" behaviors already
cover the raw-file and log-preservation requirements for strict mode.
- `_compile_concepts`'s three early-return paths (unparseable plan, scalar
plan, all-items-filtered-as-malformed) now also raise under a strict
insert_mode, not just individual concept/entity generation failures — a
genuinely empty plan (nothing was ever planned) still counts as complete
success in every mode.
- `compile_short_doc`/`compile_long_doc` resolve `insert_mode` from the
already-loaded KB config, so no CLI-level plumbing is needed.
ResolvesVectifyAI#239
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling

1 participant

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

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling - #241

Open
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode
Open

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling#241
sebastianbraun25 wants to merge 1 commit into
VectifyAI:mainfrom
sebastianbraun25:feat/issue-239-insert-mode

Conversation

@sebastianbraun25

@sebastianbraun25sebastianbraun25 commented Aug 31, 2026

Copy link
Copy Markdown

Note

This PR was created in collaboration between a human and AI: implementation, tests, and
PR text were created by an AI assistant under the guidance and review of the human author.

Problem

openkb add currently reports a whole-file "added" outcome even when one or more individual
concepts/entities failed to generate during compilation. _compile_concepts in
openkb/agent/compiler.py collects exceptions from the per-concept/per-entity generation tasks
via asyncio.gather(..., return_exceptions=True), logs a [WARN] ... planned but only N written
line, and continues — but the file's hash is still registered and the source is still eligible for
auto_delete_added_files, so a partially-compiled document looks identical to a fully successful
one from the CLI/API caller's point of view.

Solution / Changes

  • New insert_mode config key (.openkb/config.yaml) with three values:
    • "normal" (default): unchanged behavior — a concept/entity generation failure during compile
      is logged as a warning and the file is still reported "added".
    • "fail-fast": the first concept/entity generation failure cancels every other still-pending
      generation in the batch and immediately raises ConceptCompilationError — nothing from the
      batch is written.
    • "fail-at-end": every planned concept/entity generation is attempted (so every failure for the
      document is logged in one pass) before ConceptCompilationError is raised if anything failed.
  • Both strict modes rely entirely on the existing mutation-snapshot rollback
    (openkb.add_coordinator/openkb.mutation) to discard the add and report it "failed" — no new
    rollback path needed. The existing "keep raw/ on failed" and "keep the debug log on a
    non-'added' outcome" behaviors already cover raw-file and log-preservation for strict mode.
  • _compile_concepts's three early-return paths (unparseable plan, scalar plan,
    all-items-filtered-as-malformed) now also raise under a strict insert_mode, not just individual
    concept/entity generation failures — a genuinely empty plan (nothing was ever planned) still
    counts as complete success in every mode.
  • compile_short_doc/compile_long_doc resolve insert_mode from the already-loaded KB config, so
    no CLI-level plumbing is needed.
  • Backward compatible: default "normal" behavior is unchanged.

Issues

…ict compile-failure handling
- Add `insert_mode` config key (`.openkb/config.yaml`) with three values:
- "normal" (default): unchanged behavior — a concept/entity generation
failure during compile is logged as a warning and the file is still
reported "added".
- "fail-fast": the first concept/entity generation failure cancels every
other still-pending generation in the batch and immediately raises
`ConceptCompilationError` — nothing from the batch is written.
- "fail-at-end": every planned concept/entity generation is attempted (so
every failure for the document is logged in one pass) before
`ConceptCompilationError` is raised if anything failed.
- Both strict modes rely entirely on the existing mutation-snapshot rollback
(`openkb.add_coordinator`/`openkb.mutation`) to discard the add and report
it "failed" — no new rollback path needed. The existing "keep raw/ on
failed" and "keep the debug log on a non-'added' outcome" behaviors already
cover the raw-file and log-preservation requirements for strict mode.
- `_compile_concepts`'s three early-return paths (unparseable plan, scalar
plan, all-items-filtered-as-malformed) now also raise under a strict
insert_mode, not just individual concept/entity generation failures — a
genuinely empty plan (nothing was ever planned) still counts as complete
success in every mode.
- `compile_short_doc`/`compile_long_doc` resolve `insert_mode` from the
already-loaded KB config, so no CLI-level plumbing is needed.
ResolvesVectifyAI#239
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

feat(cli): configurable insert_mode (fail-fast / fail-at-end) for strict compile-failure handling

1 participant

@sebastianbraun25