docs: extend README adventures (input editing, gates demo, private schema) + Path fix - #16

Merged
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz
Jul 3, 2026
Merged

docs: extend README adventures (input editing, gates demo, private schema) + Path fix#16
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz

Conversation

@IanMayo

Copy link
Copy Markdown
Contributor

What

Two things in one branch:

  1. Type-clean the autocomplete example — wrap the input filename in Path(...) in examples/explore_platform.py, since build_platform_from_file is annotated to take a Path. Removes a Pylance warning in the shipped learning file. (We chose to keep the builder API Path-strict rather than widen it.)

  2. Extend the README "Self-guided adventures" — fold in the genuinely-missing hands-on material that the open PLAYGROUND.md proposal (docs: add PLAYGROUND.md hands-on guide #12) had but our README lacked:

    • Adventure 1: edit examples/calculation_input.xml and re-run to watch the validated output change; then break it on purpose (negative/non-numeric BandCount) to see the gate reject it, print the reason, exit non-zero, and write no stale artifact.
    • Adventure 2: show serialize.to_xml(platform) in the REPL — the same object, as XML.
    • Adventure 5 (new): point the CLI at the gitignored private/ real schema (generate/validate/compare against private/ paths), including the caveat that acoustic pipeline imports the committed models so it can't run end-to-end on real models without a reviewed change.

Verification

  • python examples/explore_platform.py runs; mypy clean on it.
  • ruff check src tests passes; full pytest suite (41 tests) passes.
  • Every command and the break-it-on-purpose error output was run end-to-end before documenting. private/ is confirmed gitignored; the section avoids referencing files that don't exist yet.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits June 20, 2026 18:25
Wrap the input filename in Path(...) so the scratch file type-checks
cleanly under Pylance — the builder is annotated to take a Path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
…ivate-schema path
Fold in the hands-on bits from the PLAYGROUND.md proposal (#12):
- Adventure 1: edit examples/calculation_input.xml and re-run; break it
on purpose to watch the gate reject invalid input with no stale artifact.
- Adventure 2: show serialize.to_xml in the REPL.
- Adventure 5 (new): point the CLI at the gitignored private/ real schema
via generate/validate/compare, with the caveat that full pipeline imports
the committed models.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-07-03 08:49 UTC

@IanMayo
IanMayo merged commit 46cf457 into mainJul 3, 2026
3 checks passed
@IanMayo
IanMayo deleted the claude/wonderful-noether-ycnjwz branch July 3, 2026 08:49
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

@IanMayo@claude
, '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

docs: extend README adventures (input editing, gates demo, private schema) + Path fix - #16

Merged
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz
Jul 3, 2026
Merged

docs: extend README adventures (input editing, gates demo, private schema) + Path fix#16
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz

Conversation

@IanMayo

Copy link
Copy Markdown
Contributor

What

Two things in one branch:

  1. Type-clean the autocomplete example — wrap the input filename in Path(...) in examples/explore_platform.py, since build_platform_from_file is annotated to take a Path. Removes a Pylance warning in the shipped learning file. (We chose to keep the builder API Path-strict rather than widen it.)

  2. Extend the README "Self-guided adventures" — fold in the genuinely-missing hands-on material that the open PLAYGROUND.md proposal (docs: add PLAYGROUND.md hands-on guide #12) had but our README lacked:

    • Adventure 1: edit examples/calculation_input.xml and re-run to watch the validated output change; then break it on purpose (negative/non-numeric BandCount) to see the gate reject it, print the reason, exit non-zero, and write no stale artifact.
    • Adventure 2: show serialize.to_xml(platform) in the REPL — the same object, as XML.
    • Adventure 5 (new): point the CLI at the gitignored private/ real schema (generate/validate/compare against private/ paths), including the caveat that acoustic pipeline imports the committed models so it can't run end-to-end on real models without a reviewed change.

Verification

  • python examples/explore_platform.py runs; mypy clean on it.
  • ruff check src tests passes; full pytest suite (41 tests) passes.
  • Every command and the break-it-on-purpose error output was run end-to-end before documenting. private/ is confirmed gitignored; the section avoids referencing files that don't exist yet.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits June 20, 2026 18:25
Wrap the input filename in Path(...) so the scratch file type-checks
cleanly under Pylance — the builder is annotated to take a Path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
…ivate-schema path
Fold in the hands-on bits from the PLAYGROUND.md proposal (#12):
- Adventure 1: edit examples/calculation_input.xml and re-run; break it
on purpose to watch the gate reject invalid input with no stale artifact.
- Adventure 2: show serialize.to_xml in the REPL.
- Adventure 5 (new): point the CLI at the gitignored private/ real schema
via generate/validate/compare, with the caveat that full pipeline imports
the committed models.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-07-03 08:49 UTC

@IanMayo
IanMayo merged commit 46cf457 into mainJul 3, 2026
3 checks passed
@IanMayo
IanMayo deleted the claude/wonderful-noether-ycnjwz branch July 3, 2026 08:49
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

@IanMayo@claude
, '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

docs: extend README adventures (input editing, gates demo, private schema) + Path fix - #16

Merged
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz
Jul 3, 2026
Merged

docs: extend README adventures (input editing, gates demo, private schema) + Path fix#16
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz

Conversation

@IanMayo

Copy link
Copy Markdown
Contributor

What

Two things in one branch:

  1. Type-clean the autocomplete example — wrap the input filename in Path(...) in examples/explore_platform.py, since build_platform_from_file is annotated to take a Path. Removes a Pylance warning in the shipped learning file. (We chose to keep the builder API Path-strict rather than widen it.)

  2. Extend the README "Self-guided adventures" — fold in the genuinely-missing hands-on material that the open PLAYGROUND.md proposal (docs: add PLAYGROUND.md hands-on guide #12) had but our README lacked:

    • Adventure 1: edit examples/calculation_input.xml and re-run to watch the validated output change; then break it on purpose (negative/non-numeric BandCount) to see the gate reject it, print the reason, exit non-zero, and write no stale artifact.
    • Adventure 2: show serialize.to_xml(platform) in the REPL — the same object, as XML.
    • Adventure 5 (new): point the CLI at the gitignored private/ real schema (generate/validate/compare against private/ paths), including the caveat that acoustic pipeline imports the committed models so it can't run end-to-end on real models without a reviewed change.

Verification

  • python examples/explore_platform.py runs; mypy clean on it.
  • ruff check src tests passes; full pytest suite (41 tests) passes.
  • Every command and the break-it-on-purpose error output was run end-to-end before documenting. private/ is confirmed gitignored; the section avoids referencing files that don't exist yet.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits June 20, 2026 18:25
Wrap the input filename in Path(...) so the scratch file type-checks
cleanly under Pylance — the builder is annotated to take a Path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
…ivate-schema path
Fold in the hands-on bits from the PLAYGROUND.md proposal (#12):
- Adventure 1: edit examples/calculation_input.xml and re-run; break it
on purpose to watch the gate reject invalid input with no stale artifact.
- Adventure 2: show serialize.to_xml in the REPL.
- Adventure 5 (new): point the CLI at the gitignored private/ real schema
via generate/validate/compare, with the caveat that full pipeline imports
the committed models.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-07-03 08:49 UTC

@IanMayo
IanMayo merged commit 46cf457 into mainJul 3, 2026
3 checks passed
@IanMayo
IanMayo deleted the claude/wonderful-noether-ycnjwz branch July 3, 2026 08:49
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

@IanMayo@claude
, '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

docs: extend README adventures (input editing, gates demo, private schema) + Path fix - #16

Merged
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz
Jul 3, 2026
Merged

docs: extend README adventures (input editing, gates demo, private schema) + Path fix#16
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz

Conversation

@IanMayo

Copy link
Copy Markdown
Contributor

What

Two things in one branch:

  1. Type-clean the autocomplete example — wrap the input filename in Path(...) in examples/explore_platform.py, since build_platform_from_file is annotated to take a Path. Removes a Pylance warning in the shipped learning file. (We chose to keep the builder API Path-strict rather than widen it.)

  2. Extend the README "Self-guided adventures" — fold in the genuinely-missing hands-on material that the open PLAYGROUND.md proposal (docs: add PLAYGROUND.md hands-on guide #12) had but our README lacked:

    • Adventure 1: edit examples/calculation_input.xml and re-run to watch the validated output change; then break it on purpose (negative/non-numeric BandCount) to see the gate reject it, print the reason, exit non-zero, and write no stale artifact.
    • Adventure 2: show serialize.to_xml(platform) in the REPL — the same object, as XML.
    • Adventure 5 (new): point the CLI at the gitignored private/ real schema (generate/validate/compare against private/ paths), including the caveat that acoustic pipeline imports the committed models so it can't run end-to-end on real models without a reviewed change.

Verification

  • python examples/explore_platform.py runs; mypy clean on it.
  • ruff check src tests passes; full pytest suite (41 tests) passes.
  • Every command and the break-it-on-purpose error output was run end-to-end before documenting. private/ is confirmed gitignored; the section avoids referencing files that don't exist yet.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits June 20, 2026 18:25
Wrap the input filename in Path(...) so the scratch file type-checks
cleanly under Pylance — the builder is annotated to take a Path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
…ivate-schema path
Fold in the hands-on bits from the PLAYGROUND.md proposal (#12):
- Adventure 1: edit examples/calculation_input.xml and re-run; break it
on purpose to watch the gate reject invalid input with no stale artifact.
- Adventure 2: show serialize.to_xml in the REPL.
- Adventure 5 (new): point the CLI at the gitignored private/ real schema
via generate/validate/compare, with the caveat that full pipeline imports
the committed models.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-07-03 08:49 UTC

@IanMayo
IanMayo merged commit 46cf457 into mainJul 3, 2026
3 checks passed
@IanMayo
IanMayo deleted the claude/wonderful-noether-ycnjwz branch July 3, 2026 08:49
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

@IanMayo@claude
, '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

docs: extend README adventures (input editing, gates demo, private schema) + Path fix - #16

Merged
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz
Jul 3, 2026
Merged

docs: extend README adventures (input editing, gates demo, private schema) + Path fix#16
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz

Conversation

@IanMayo

Copy link
Copy Markdown
Contributor

What

Two things in one branch:

  1. Type-clean the autocomplete example — wrap the input filename in Path(...) in examples/explore_platform.py, since build_platform_from_file is annotated to take a Path. Removes a Pylance warning in the shipped learning file. (We chose to keep the builder API Path-strict rather than widen it.)

  2. Extend the README "Self-guided adventures" — fold in the genuinely-missing hands-on material that the open PLAYGROUND.md proposal (docs: add PLAYGROUND.md hands-on guide #12) had but our README lacked:

    • Adventure 1: edit examples/calculation_input.xml and re-run to watch the validated output change; then break it on purpose (negative/non-numeric BandCount) to see the gate reject it, print the reason, exit non-zero, and write no stale artifact.
    • Adventure 2: show serialize.to_xml(platform) in the REPL — the same object, as XML.
    • Adventure 5 (new): point the CLI at the gitignored private/ real schema (generate/validate/compare against private/ paths), including the caveat that acoustic pipeline imports the committed models so it can't run end-to-end on real models without a reviewed change.

Verification

  • python examples/explore_platform.py runs; mypy clean on it.
  • ruff check src tests passes; full pytest suite (41 tests) passes.
  • Every command and the break-it-on-purpose error output was run end-to-end before documenting. private/ is confirmed gitignored; the section avoids referencing files that don't exist yet.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits June 20, 2026 18:25
Wrap the input filename in Path(...) so the scratch file type-checks
cleanly under Pylance — the builder is annotated to take a Path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
…ivate-schema path
Fold in the hands-on bits from the PLAYGROUND.md proposal (#12):
- Adventure 1: edit examples/calculation_input.xml and re-run; break it
on purpose to watch the gate reject invalid input with no stale artifact.
- Adventure 2: show serialize.to_xml in the REPL.
- Adventure 5 (new): point the CLI at the gitignored private/ real schema
via generate/validate/compare, with the caveat that full pipeline imports
the committed models.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-07-03 08:49 UTC

@IanMayo
IanMayo merged commit 46cf457 into mainJul 3, 2026
3 checks passed
@IanMayo
IanMayo deleted the claude/wonderful-noether-ycnjwz branch July 3, 2026 08:49
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

@IanMayo@claude
, '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

docs: extend README adventures (input editing, gates demo, private schema) + Path fix - #16

Merged
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz
Jul 3, 2026
Merged

docs: extend README adventures (input editing, gates demo, private schema) + Path fix#16
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz

Conversation

@IanMayo

Copy link
Copy Markdown
Contributor

What

Two things in one branch:

  1. Type-clean the autocomplete example — wrap the input filename in Path(...) in examples/explore_platform.py, since build_platform_from_file is annotated to take a Path. Removes a Pylance warning in the shipped learning file. (We chose to keep the builder API Path-strict rather than widen it.)

  2. Extend the README "Self-guided adventures" — fold in the genuinely-missing hands-on material that the open PLAYGROUND.md proposal (docs: add PLAYGROUND.md hands-on guide #12) had but our README lacked:

    • Adventure 1: edit examples/calculation_input.xml and re-run to watch the validated output change; then break it on purpose (negative/non-numeric BandCount) to see the gate reject it, print the reason, exit non-zero, and write no stale artifact.
    • Adventure 2: show serialize.to_xml(platform) in the REPL — the same object, as XML.
    • Adventure 5 (new): point the CLI at the gitignored private/ real schema (generate/validate/compare against private/ paths), including the caveat that acoustic pipeline imports the committed models so it can't run end-to-end on real models without a reviewed change.

Verification

  • python examples/explore_platform.py runs; mypy clean on it.
  • ruff check src tests passes; full pytest suite (41 tests) passes.
  • Every command and the break-it-on-purpose error output was run end-to-end before documenting. private/ is confirmed gitignored; the section avoids referencing files that don't exist yet.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits June 20, 2026 18:25
Wrap the input filename in Path(...) so the scratch file type-checks
cleanly under Pylance — the builder is annotated to take a Path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
…ivate-schema path
Fold in the hands-on bits from the PLAYGROUND.md proposal (#12):
- Adventure 1: edit examples/calculation_input.xml and re-run; break it
on purpose to watch the gate reject invalid input with no stale artifact.
- Adventure 2: show serialize.to_xml in the REPL.
- Adventure 5 (new): point the CLI at the gitignored private/ real schema
via generate/validate/compare, with the caveat that full pipeline imports
the committed models.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-07-03 08:49 UTC

@IanMayo
IanMayo merged commit 46cf457 into mainJul 3, 2026
3 checks passed
@IanMayo
IanMayo deleted the claude/wonderful-noether-ycnjwz branch July 3, 2026 08:49
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

@IanMayo@claude
, '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

docs: extend README adventures (input editing, gates demo, private schema) + Path fix - #16

Merged
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz
Jul 3, 2026
Merged

docs: extend README adventures (input editing, gates demo, private schema) + Path fix#16
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz

Conversation

@IanMayo

Copy link
Copy Markdown
Contributor

What

Two things in one branch:

  1. Type-clean the autocomplete example — wrap the input filename in Path(...) in examples/explore_platform.py, since build_platform_from_file is annotated to take a Path. Removes a Pylance warning in the shipped learning file. (We chose to keep the builder API Path-strict rather than widen it.)

  2. Extend the README "Self-guided adventures" — fold in the genuinely-missing hands-on material that the open PLAYGROUND.md proposal (docs: add PLAYGROUND.md hands-on guide #12) had but our README lacked:

    • Adventure 1: edit examples/calculation_input.xml and re-run to watch the validated output change; then break it on purpose (negative/non-numeric BandCount) to see the gate reject it, print the reason, exit non-zero, and write no stale artifact.
    • Adventure 2: show serialize.to_xml(platform) in the REPL — the same object, as XML.
    • Adventure 5 (new): point the CLI at the gitignored private/ real schema (generate/validate/compare against private/ paths), including the caveat that acoustic pipeline imports the committed models so it can't run end-to-end on real models without a reviewed change.

Verification

  • python examples/explore_platform.py runs; mypy clean on it.
  • ruff check src tests passes; full pytest suite (41 tests) passes.
  • Every command and the break-it-on-purpose error output was run end-to-end before documenting. private/ is confirmed gitignored; the section avoids referencing files that don't exist yet.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits June 20, 2026 18:25
Wrap the input filename in Path(...) so the scratch file type-checks
cleanly under Pylance — the builder is annotated to take a Path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
…ivate-schema path
Fold in the hands-on bits from the PLAYGROUND.md proposal (#12):
- Adventure 1: edit examples/calculation_input.xml and re-run; break it
on purpose to watch the gate reject invalid input with no stale artifact.
- Adventure 2: show serialize.to_xml in the REPL.
- Adventure 5 (new): point the CLI at the gitignored private/ real schema
via generate/validate/compare, with the caveat that full pipeline imports
the committed models.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-07-03 08:49 UTC

@IanMayo
IanMayo merged commit 46cf457 into mainJul 3, 2026
3 checks passed
@IanMayo
IanMayo deleted the claude/wonderful-noether-ycnjwz branch July 3, 2026 08:49
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

@IanMayo@claude
, '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

docs: extend README adventures (input editing, gates demo, private schema) + Path fix - #16

Merged
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz
Jul 3, 2026
Merged

docs: extend README adventures (input editing, gates demo, private schema) + Path fix#16
IanMayo merged 2 commits into
mainfrom
claude/wonderful-noether-ycnjwz

Conversation

@IanMayo

Copy link
Copy Markdown
Contributor

What

Two things in one branch:

  1. Type-clean the autocomplete example — wrap the input filename in Path(...) in examples/explore_platform.py, since build_platform_from_file is annotated to take a Path. Removes a Pylance warning in the shipped learning file. (We chose to keep the builder API Path-strict rather than widen it.)

  2. Extend the README "Self-guided adventures" — fold in the genuinely-missing hands-on material that the open PLAYGROUND.md proposal (docs: add PLAYGROUND.md hands-on guide #12) had but our README lacked:

    • Adventure 1: edit examples/calculation_input.xml and re-run to watch the validated output change; then break it on purpose (negative/non-numeric BandCount) to see the gate reject it, print the reason, exit non-zero, and write no stale artifact.
    • Adventure 2: show serialize.to_xml(platform) in the REPL — the same object, as XML.
    • Adventure 5 (new): point the CLI at the gitignored private/ real schema (generate/validate/compare against private/ paths), including the caveat that acoustic pipeline imports the committed models so it can't run end-to-end on real models without a reviewed change.

Verification

  • python examples/explore_platform.py runs; mypy clean on it.
  • ruff check src tests passes; full pytest suite (41 tests) passes.
  • Every command and the break-it-on-purpose error output was run end-to-end before documenting. private/ is confirmed gitignored; the section avoids referencing files that don't exist yet.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits June 20, 2026 18:25
Wrap the input filename in Path(...) so the scratch file type-checks
cleanly under Pylance — the builder is annotated to take a Path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
…ivate-schema path
Fold in the hands-on bits from the PLAYGROUND.md proposal (#12):
- Adventure 1: edit examples/calculation_input.xml and re-run; break it
on purpose to watch the gate reject invalid input with no stale artifact.
- Adventure 2: show serialize.to_xml in the REPL.
- Adventure 5 (new): point the CLI at the gitignored private/ real schema
via generate/validate/compare, with the caveat that full pipeline imports
the committed models.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHAkhfmfcCdWTHZuvRcJNF
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-07-03 08:49 UTC

@IanMayo
IanMayo merged commit 46cf457 into mainJul 3, 2026
3 checks passed
@IanMayo
IanMayo deleted the claude/wonderful-noether-ycnjwz branch July 3, 2026 08:49
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

@IanMayo@claude