Skip to content

11 of 21 generator-owned artifacts are in NEITHER merge=os-regen nor NOT_DRIVER_MANAGED — the routing gap has no instrument #13731

Description

@claude

Observation-class finding, measured while implementing #13646 (which routes one such artifact). Filed unassigned; deliberately NOT fixed there — one card, one route.

The class

#13335 records skills/**/references/_index.md as generator-owned but unrouted, and says the substance of that card is deciding its disposition. #13646 was the same shape for the elevation census page. Both are instances. This is the enumeration, so the next one is met by a list rather than by a merge conflict.

Measured across all 79 workspace manifests plus the root, on d32b0f501:

generator-ish scripts (a `gen:*` key, or a `--fix` / `--update` mode): 21
named as the `gen` of a driver-managed row in REGEN_ARTIFACTS: 10
in NEITHER that table NOR NOT_DRIVER_MANAGED: 11

Several of the 11 are already accounted for by a declaration on the artifact rather than on the script — gen:migration-registry and the gen:test-typecheck-debt family are NOT_DRIVER_MANAGED by path, and gen:authorable-surface-base is deliberately not named as any row's gen (the reasoning is in regen-artifacts.mjs beside the authorable-surface.base.json row).

That leaves the genuinely unaccounted set:

scriptnote
gen:skill-refsalready filed as #13335 — a member, not a duplicate of this
gen:sdui-lockstepwrites packages/sdui-parser/objectui-lockstep.json
gen:openapi
gen:skill-docs
gen:sbom
gen:react-blocks
gen:test-typecheck-debt in @objectstack/client and @objectstack/restthe per-package copies; only the packages/spec one is declared

Why the enumeration is the unit of work, not each file

.gitattributes's own header says the dangerous mistake is "adding a path to .gitattributes because a generator writes it, without asking whether recomputing it can lose a decision a human made" — which is why NOT_DRIVER_MANAGED exists and carries a per-path reason. The gap is therefore not "these paths are unrouted"; it is that for each of them, no one has recorded which of the two dispositions applies.pnpm check:merge-driver reconciles the table against .gitattributes in both directions and is green today, which means it cannot see an artifact that is in neither list — exactly the state #4675's fix left this file class in, and the reason #13646 and #13335 were each discovered by hitting them.

⚠️ Two of the entries above deserve care rather than a batch route, on the evidence of #13646: content/docs/permissions/** looked routable by symmetry with its sibling tree and is not (22 hand-written pages around one generated one), and a shrink-only ratchet must never be regenerated mid-merge. So the deliverable is a recorded disposition per path, not a block of new merge=os-regen lines.

Suggested shape

Either extend check:merge-driver with a third reconciliation — every artifact some gen: script writes must appear in one of the two ledgers — or work the list above once and accept that a future generator can re-open the gap. The first closes the class; the second repeats #4675's omission at a smaller scale.

Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, '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" + '
11 of 21 generator-owned artifacts are in NEITHER `merge=os-regen` nor `NOT_DRIVER_MANAGED` — the routing gap has no instrument · Issue #13731 · objectstack-ai/objectstack · GitHub
Skip to content

11 of 21 generator-owned artifacts are in NEITHER merge=os-regen nor NOT_DRIVER_MANAGED — the routing gap has no instrument #13731

Description

@claude

Observation-class finding, measured while implementing #13646 (which routes one such artifact). Filed unassigned; deliberately NOT fixed there — one card, one route.

The class

#13335 records skills/**/references/_index.md as generator-owned but unrouted, and says the substance of that card is deciding its disposition. #13646 was the same shape for the elevation census page. Both are instances. This is the enumeration, so the next one is met by a list rather than by a merge conflict.

Measured across all 79 workspace manifests plus the root, on d32b0f501:

generator-ish scripts (a `gen:*` key, or a `--fix` / `--update` mode): 21
named as the `gen` of a driver-managed row in REGEN_ARTIFACTS: 10
in NEITHER that table NOR NOT_DRIVER_MANAGED: 11

Several of the 11 are already accounted for by a declaration on the artifact rather than on the script — gen:migration-registry and the gen:test-typecheck-debt family are NOT_DRIVER_MANAGED by path, and gen:authorable-surface-base is deliberately not named as any row's gen (the reasoning is in regen-artifacts.mjs beside the authorable-surface.base.json row).

That leaves the genuinely unaccounted set:

scriptnote
gen:skill-refsalready filed as #13335 — a member, not a duplicate of this
gen:sdui-lockstepwrites packages/sdui-parser/objectui-lockstep.json
gen:openapi
gen:skill-docs
gen:sbom
gen:react-blocks
gen:test-typecheck-debt in @objectstack/client and @objectstack/restthe per-package copies; only the packages/spec one is declared

Why the enumeration is the unit of work, not each file

.gitattributes's own header says the dangerous mistake is "adding a path to .gitattributes because a generator writes it, without asking whether recomputing it can lose a decision a human made" — which is why NOT_DRIVER_MANAGED exists and carries a per-path reason. The gap is therefore not "these paths are unrouted"; it is that for each of them, no one has recorded which of the two dispositions applies.pnpm check:merge-driver reconciles the table against .gitattributes in both directions and is green today, which means it cannot see an artifact that is in neither list — exactly the state #4675's fix left this file class in, and the reason #13646 and #13335 were each discovered by hitting them.

⚠️ Two of the entries above deserve care rather than a batch route, on the evidence of #13646: content/docs/permissions/** looked routable by symmetry with its sibling tree and is not (22 hand-written pages around one generated one), and a shrink-only ratchet must never be regenerated mid-merge. So the deliverable is a recorded disposition per path, not a block of new merge=os-regen lines.

Suggested shape

Either extend check:merge-driver with a third reconciliation — every artifact some gen: script writes must appear in one of the two ledgers — or work the list above once and accept that a future generator can re-open the gap. The first closes the class; the second repeats #4675's omission at a smaller scale.

Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, '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('^' + ".*" + ' 11 of 21 generator-owned artifacts are in NEITHER `merge=os-regen` nor `NOT_DRIVER_MANAGED` — the routing gap has no instrument · Issue #13731 · objectstack-ai/objectstack · GitHub
Skip to content

11 of 21 generator-owned artifacts are in NEITHER merge=os-regen nor NOT_DRIVER_MANAGED — the routing gap has no instrument #13731

Description

@claude

Observation-class finding, measured while implementing #13646 (which routes one such artifact). Filed unassigned; deliberately NOT fixed there — one card, one route.

The class

#13335 records skills/**/references/_index.md as generator-owned but unrouted, and says the substance of that card is deciding its disposition. #13646 was the same shape for the elevation census page. Both are instances. This is the enumeration, so the next one is met by a list rather than by a merge conflict.

Measured across all 79 workspace manifests plus the root, on d32b0f501:

generator-ish scripts (a `gen:*` key, or a `--fix` / `--update` mode): 21
named as the `gen` of a driver-managed row in REGEN_ARTIFACTS: 10
in NEITHER that table NOR NOT_DRIVER_MANAGED: 11

Several of the 11 are already accounted for by a declaration on the artifact rather than on the script — gen:migration-registry and the gen:test-typecheck-debt family are NOT_DRIVER_MANAGED by path, and gen:authorable-surface-base is deliberately not named as any row's gen (the reasoning is in regen-artifacts.mjs beside the authorable-surface.base.json row).

That leaves the genuinely unaccounted set:

scriptnote
gen:skill-refsalready filed as #13335 — a member, not a duplicate of this
gen:sdui-lockstepwrites packages/sdui-parser/objectui-lockstep.json
gen:openapi
gen:skill-docs
gen:sbom
gen:react-blocks
gen:test-typecheck-debt in @objectstack/client and @objectstack/restthe per-package copies; only the packages/spec one is declared

Why the enumeration is the unit of work, not each file

.gitattributes's own header says the dangerous mistake is "adding a path to .gitattributes because a generator writes it, without asking whether recomputing it can lose a decision a human made" — which is why NOT_DRIVER_MANAGED exists and carries a per-path reason. The gap is therefore not "these paths are unrouted"; it is that for each of them, no one has recorded which of the two dispositions applies.pnpm check:merge-driver reconciles the table against .gitattributes in both directions and is green today, which means it cannot see an artifact that is in neither list — exactly the state #4675's fix left this file class in, and the reason #13646 and #13335 were each discovered by hitting them.

⚠️ Two of the entries above deserve care rather than a batch route, on the evidence of #13646: content/docs/permissions/** looked routable by symmetry with its sibling tree and is not (22 hand-written pages around one generated one), and a shrink-only ratchet must never be regenerated mid-merge. So the deliverable is a recorded disposition per path, not a block of new merge=os-regen lines.

Suggested shape

Either extend check:merge-driver with a third reconciliation — every artifact some gen: script writes must appear in one of the two ledgers — or work the list above once and accept that a future generator can re-open the gap. The first closes the class; the second repeats #4675's omission at a smaller scale.

Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, '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('^' + ".*" + ' 11 of 21 generator-owned artifacts are in NEITHER `merge=os-regen` nor `NOT_DRIVER_MANAGED` — the routing gap has no instrument · Issue #13731 · objectstack-ai/objectstack · GitHub
Skip to content

11 of 21 generator-owned artifacts are in NEITHER merge=os-regen nor NOT_DRIVER_MANAGED — the routing gap has no instrument #13731

Description

@claude

Observation-class finding, measured while implementing #13646 (which routes one such artifact). Filed unassigned; deliberately NOT fixed there — one card, one route.

The class

#13335 records skills/**/references/_index.md as generator-owned but unrouted, and says the substance of that card is deciding its disposition. #13646 was the same shape for the elevation census page. Both are instances. This is the enumeration, so the next one is met by a list rather than by a merge conflict.

Measured across all 79 workspace manifests plus the root, on d32b0f501:

generator-ish scripts (a `gen:*` key, or a `--fix` / `--update` mode): 21
named as the `gen` of a driver-managed row in REGEN_ARTIFACTS: 10
in NEITHER that table NOR NOT_DRIVER_MANAGED: 11

Several of the 11 are already accounted for by a declaration on the artifact rather than on the script — gen:migration-registry and the gen:test-typecheck-debt family are NOT_DRIVER_MANAGED by path, and gen:authorable-surface-base is deliberately not named as any row's gen (the reasoning is in regen-artifacts.mjs beside the authorable-surface.base.json row).

That leaves the genuinely unaccounted set:

scriptnote
gen:skill-refsalready filed as #13335 — a member, not a duplicate of this
gen:sdui-lockstepwrites packages/sdui-parser/objectui-lockstep.json
gen:openapi
gen:skill-docs
gen:sbom
gen:react-blocks
gen:test-typecheck-debt in @objectstack/client and @objectstack/restthe per-package copies; only the packages/spec one is declared

Why the enumeration is the unit of work, not each file

.gitattributes's own header says the dangerous mistake is "adding a path to .gitattributes because a generator writes it, without asking whether recomputing it can lose a decision a human made" — which is why NOT_DRIVER_MANAGED exists and carries a per-path reason. The gap is therefore not "these paths are unrouted"; it is that for each of them, no one has recorded which of the two dispositions applies.pnpm check:merge-driver reconciles the table against .gitattributes in both directions and is green today, which means it cannot see an artifact that is in neither list — exactly the state #4675's fix left this file class in, and the reason #13646 and #13335 were each discovered by hitting them.

⚠️ Two of the entries above deserve care rather than a batch route, on the evidence of #13646: content/docs/permissions/** looked routable by symmetry with its sibling tree and is not (22 hand-written pages around one generated one), and a shrink-only ratchet must never be regenerated mid-merge. So the deliverable is a recorded disposition per path, not a block of new merge=os-regen lines.

Suggested shape

Either extend check:merge-driver with a third reconciliation — every artifact some gen: script writes must appear in one of the two ledgers — or work the list above once and accept that a future generator can re-open the gap. The first closes the class; the second repeats #4675's omission at a smaller scale.

Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, '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" + ' 11 of 21 generator-owned artifacts are in NEITHER `merge=os-regen` nor `NOT_DRIVER_MANAGED` — the routing gap has no instrument · Issue #13731 · objectstack-ai/objectstack · GitHub
Skip to content

11 of 21 generator-owned artifacts are in NEITHER merge=os-regen nor NOT_DRIVER_MANAGED — the routing gap has no instrument #13731

Description

@claude

Observation-class finding, measured while implementing #13646 (which routes one such artifact). Filed unassigned; deliberately NOT fixed there — one card, one route.

The class

#13335 records skills/**/references/_index.md as generator-owned but unrouted, and says the substance of that card is deciding its disposition. #13646 was the same shape for the elevation census page. Both are instances. This is the enumeration, so the next one is met by a list rather than by a merge conflict.

Measured across all 79 workspace manifests plus the root, on d32b0f501:

generator-ish scripts (a `gen:*` key, or a `--fix` / `--update` mode): 21
named as the `gen` of a driver-managed row in REGEN_ARTIFACTS: 10
in NEITHER that table NOR NOT_DRIVER_MANAGED: 11

Several of the 11 are already accounted for by a declaration on the artifact rather than on the script — gen:migration-registry and the gen:test-typecheck-debt family are NOT_DRIVER_MANAGED by path, and gen:authorable-surface-base is deliberately not named as any row's gen (the reasoning is in regen-artifacts.mjs beside the authorable-surface.base.json row).

That leaves the genuinely unaccounted set:

scriptnote
gen:skill-refsalready filed as #13335 — a member, not a duplicate of this
gen:sdui-lockstepwrites packages/sdui-parser/objectui-lockstep.json
gen:openapi
gen:skill-docs
gen:sbom
gen:react-blocks
gen:test-typecheck-debt in @objectstack/client and @objectstack/restthe per-package copies; only the packages/spec one is declared

Why the enumeration is the unit of work, not each file

.gitattributes's own header says the dangerous mistake is "adding a path to .gitattributes because a generator writes it, without asking whether recomputing it can lose a decision a human made" — which is why NOT_DRIVER_MANAGED exists and carries a per-path reason. The gap is therefore not "these paths are unrouted"; it is that for each of them, no one has recorded which of the two dispositions applies.pnpm check:merge-driver reconciles the table against .gitattributes in both directions and is green today, which means it cannot see an artifact that is in neither list — exactly the state #4675's fix left this file class in, and the reason #13646 and #13335 were each discovered by hitting them.

⚠️ Two of the entries above deserve care rather than a batch route, on the evidence of #13646: content/docs/permissions/** looked routable by symmetry with its sibling tree and is not (22 hand-written pages around one generated one), and a shrink-only ratchet must never be regenerated mid-merge. So the deliverable is a recorded disposition per path, not a block of new merge=os-regen lines.

Suggested shape

Either extend check:merge-driver with a third reconciliation — every artifact some gen: script writes must appear in one of the two ledgers — or work the list above once and accept that a future generator can re-open the gap. The first closes the class; the second repeats #4675's omission at a smaller scale.

Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, '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('^' + ".*" + ' 11 of 21 generator-owned artifacts are in NEITHER `merge=os-regen` nor `NOT_DRIVER_MANAGED` — the routing gap has no instrument · Issue #13731 · objectstack-ai/objectstack · GitHub
Skip to content

11 of 21 generator-owned artifacts are in NEITHER merge=os-regen nor NOT_DRIVER_MANAGED — the routing gap has no instrument #13731

Description

@claude

Observation-class finding, measured while implementing #13646 (which routes one such artifact). Filed unassigned; deliberately NOT fixed there — one card, one route.

The class

#13335 records skills/**/references/_index.md as generator-owned but unrouted, and says the substance of that card is deciding its disposition. #13646 was the same shape for the elevation census page. Both are instances. This is the enumeration, so the next one is met by a list rather than by a merge conflict.

Measured across all 79 workspace manifests plus the root, on d32b0f501:

generator-ish scripts (a `gen:*` key, or a `--fix` / `--update` mode): 21
named as the `gen` of a driver-managed row in REGEN_ARTIFACTS: 10
in NEITHER that table NOR NOT_DRIVER_MANAGED: 11

Several of the 11 are already accounted for by a declaration on the artifact rather than on the script — gen:migration-registry and the gen:test-typecheck-debt family are NOT_DRIVER_MANAGED by path, and gen:authorable-surface-base is deliberately not named as any row's gen (the reasoning is in regen-artifacts.mjs beside the authorable-surface.base.json row).

That leaves the genuinely unaccounted set:

scriptnote
gen:skill-refsalready filed as #13335 — a member, not a duplicate of this
gen:sdui-lockstepwrites packages/sdui-parser/objectui-lockstep.json
gen:openapi
gen:skill-docs
gen:sbom
gen:react-blocks
gen:test-typecheck-debt in @objectstack/client and @objectstack/restthe per-package copies; only the packages/spec one is declared

Why the enumeration is the unit of work, not each file

.gitattributes's own header says the dangerous mistake is "adding a path to .gitattributes because a generator writes it, without asking whether recomputing it can lose a decision a human made" — which is why NOT_DRIVER_MANAGED exists and carries a per-path reason. The gap is therefore not "these paths are unrouted"; it is that for each of them, no one has recorded which of the two dispositions applies.pnpm check:merge-driver reconciles the table against .gitattributes in both directions and is green today, which means it cannot see an artifact that is in neither list — exactly the state #4675's fix left this file class in, and the reason #13646 and #13335 were each discovered by hitting them.

⚠️ Two of the entries above deserve care rather than a batch route, on the evidence of #13646: content/docs/permissions/** looked routable by symmetry with its sibling tree and is not (22 hand-written pages around one generated one), and a shrink-only ratchet must never be regenerated mid-merge. So the deliverable is a recorded disposition per path, not a block of new merge=os-regen lines.

Suggested shape

Either extend check:merge-driver with a third reconciliation — every artifact some gen: script writes must appear in one of the two ledgers — or work the list above once and accept that a future generator can re-open the gap. The first closes the class; the second repeats #4675's omission at a smaller scale.

Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, '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); } })(); })(); 11 of 21 generator-owned artifacts are in NEITHER `merge=os-regen` nor `NOT_DRIVER_MANAGED` — the routing gap has no instrument · Issue #13731 · objectstack-ai/objectstack · GitHub
Skip to content

11 of 21 generator-owned artifacts are in NEITHER merge=os-regen nor NOT_DRIVER_MANAGED — the routing gap has no instrument #13731

Description

@claude

Observation-class finding, measured while implementing #13646 (which routes one such artifact). Filed unassigned; deliberately NOT fixed there — one card, one route.

The class

#13335 records skills/**/references/_index.md as generator-owned but unrouted, and says the substance of that card is deciding its disposition. #13646 was the same shape for the elevation census page. Both are instances. This is the enumeration, so the next one is met by a list rather than by a merge conflict.

Measured across all 79 workspace manifests plus the root, on d32b0f501:

generator-ish scripts (a `gen:*` key, or a `--fix` / `--update` mode): 21
named as the `gen` of a driver-managed row in REGEN_ARTIFACTS: 10
in NEITHER that table NOR NOT_DRIVER_MANAGED: 11

Several of the 11 are already accounted for by a declaration on the artifact rather than on the script — gen:migration-registry and the gen:test-typecheck-debt family are NOT_DRIVER_MANAGED by path, and gen:authorable-surface-base is deliberately not named as any row's gen (the reasoning is in regen-artifacts.mjs beside the authorable-surface.base.json row).

That leaves the genuinely unaccounted set:

scriptnote
gen:skill-refsalready filed as #13335 — a member, not a duplicate of this
gen:sdui-lockstepwrites packages/sdui-parser/objectui-lockstep.json
gen:openapi
gen:skill-docs
gen:sbom
gen:react-blocks
gen:test-typecheck-debt in @objectstack/client and @objectstack/restthe per-package copies; only the packages/spec one is declared

Why the enumeration is the unit of work, not each file

.gitattributes's own header says the dangerous mistake is "adding a path to .gitattributes because a generator writes it, without asking whether recomputing it can lose a decision a human made" — which is why NOT_DRIVER_MANAGED exists and carries a per-path reason. The gap is therefore not "these paths are unrouted"; it is that for each of them, no one has recorded which of the two dispositions applies.pnpm check:merge-driver reconciles the table against .gitattributes in both directions and is green today, which means it cannot see an artifact that is in neither list — exactly the state #4675's fix left this file class in, and the reason #13646 and #13335 were each discovered by hitting them.

⚠️ Two of the entries above deserve care rather than a batch route, on the evidence of #13646: content/docs/permissions/** looked routable by symmetry with its sibling tree and is not (22 hand-written pages around one generated one), and a shrink-only ratchet must never be regenerated mid-merge. So the deliverable is a recorded disposition per path, not a block of new merge=os-regen lines.

Suggested shape

Either extend check:merge-driver with a third reconciliation — every artifact some gen: script writes must appear in one of the two ledgers — or work the list above once and accept that a future generator can re-open the gap. The first closes the class; the second repeats #4675's omission at a smaller scale.

Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions