@graffiticode/l0175 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/compiler.d.ts +12 -0
  2. package/dist/compiler.d.ts.map +1 -0
  3. package/dist/compiler.js +1285 -0
  4. package/dist/compiler.js.map +1 -0
  5. package/dist/embedding.d.ts +64 -0
  6. package/dist/embedding.d.ts.map +1 -0
  7. package/dist/embedding.js +294 -0
  8. package/dist/embedding.js.map +1 -0
  9. package/dist/index.d.ts +7 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +8 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/lexicon.d.ts +644 -0
  14. package/dist/lexicon.d.ts.map +1 -0
  15. package/dist/lexicon.js +101 -0
  16. package/dist/lexicon.js.map +1 -0
  17. package/dist/static/instructions.md +527 -0
  18. package/dist/static/language-info.json +85 -0
  19. package/dist/static/lexicon.json +1112 -0
  20. package/dist/static/schema.json +162 -0
  21. package/dist/static/scope.json +28 -0
  22. package/dist/static/spec.html +572 -0
  23. package/dist/static/stems.md +374 -0
  24. package/dist/static/template.gc +67 -0
  25. package/dist/static/usage-guide.md +111 -0
  26. package/package.json +33 -0
  27. package/spec/README.md +18 -0
  28. package/spec/data/examples.gc +84 -0
  29. package/spec/data/examples_with_explanations.md +124 -0
  30. package/spec/data/training_examples.json +122 -0
  31. package/spec/docs.md +102 -0
  32. package/spec/examples.md +91 -0
  33. package/spec/instructions.md +337 -0
  34. package/spec/language-info.json +78 -0
  35. package/spec/schema.json +162 -0
  36. package/spec/scope.json +28 -0
  37. package/spec/spec.md +277 -0
  38. package/spec/stems.md +374 -0
  39. package/spec/template.gc +67 -0
  40. package/spec/unparse-hints.json +3 -0
  41. package/spec/usage-guide.md +111 -0
@@ -0,0 +1,572 @@
1
+ <!DOCTYPE html>
2
+ <!-- Built with spec-md https://spec-md.com -->
3
+ <html>
4
+ <head><meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1"><title>L0175 Vocabulary</title>
6
+ <style>@media (prefers-color-scheme: light){:root{--color-foreground: #333333;--color-background: #ffffff;--color-light-grey: #ccc;--color-grey: #666666;--color-white: #fff;--color-link: #3b5998;--color-subsection-link: var(--color-foreground);--color-toc-link: var(--color-foreground);--color-toc-id: var(--color-link);--color-toggle-border: #bbc;--color-sidebar-background: #f0f0f0;--color-sidebar-viewing-link: #8b9;--color-sidebar-toggle-button: rgba(0, 0, 0, .7);--color-sidebar-shadow-inset: rgba(0, 0, 0, .05);--color-sidebar-shadow: rgba(0, 0, 0, .04);--color-sidebar-large-shadow: rgba(0, 0, 0, .08);--color-pre-background: #fafafa;--color-pre-border: #e9e9e9;--color-code-background: rgba(0, 0, 0, .03);--color-spec-todo: var(--color-grey);--color-spec-example: #fafaff;--color-spec-example-border: #bbbbff;--color-spec-counter-example: #fffafa;--color-spec-counter-border: #ffbbbb;--color-spec-counter-example-link: #98593b;--color-spec-added-border: #396;--color-spec-removed-border: #933;--color-spec-prose: var(--color-grey);--color-spec-quantifier-list: var(--color-link);--color-spec-quantifier-optional: #83238e;--color-spec-condition: #1c7758;--color-spec-param: var(--color-grey);--color-spec-rx: var(--color-foreground);--color-spec-note-border: #f4e925;--color-spec-note-background: #fefef3;--color-spec-note-first-link: #6c6613;--color-source-link: var(--color-light-grey);--color-table-header: #f9f9f9;--color-table-header-border: #d0d0d0;--color-token-inserted: hsla(241, 71%, 34%, .69);--color-token-deleted: hsla(324, 92%, 33%, .74);--color-inserts-background: rgba(0, 200, 30, .08);--color-deletions-background: rgba(200, 0, 0, .08);--selection-background-color: #cacee0;--selection-background-color-link: #f0babe}.selection-link:hover{--selection-background-color: #3b5998}}@media (prefers-color-scheme: dark){:root{--color-foreground: #b6b6b6;--color-background: #262626;--color-light-grey: #373737;--color-grey: #828282;--color-white: rgb(29, 29, 29);--color-link: #89b7da;--color-subsection-link: var(--color-foreground);--color-toc-link: var(--color-foreground);--color-toc-id: var(--color-link);--color-toggle-border: #bbc;--color-sidebar-background: #323232;--color-sidebar-viewing-link: #8b9;--color-sidebar-toggle-button: rgba(220, 220, 220, .7);--color-sidebar-shadow-inset: rgba(0, 0, 0, .05);--color-sidebar-shadow: rgba(0, 0, 0, .04);--color-sidebar-large-shadow: rgba(0, 0, 0, .08);--color-pre-background: #2e2e2e;--color-pre-border: #3a3a3a;--color-code-background: rgba(41, 41, 41, .03);--color-spec-todo: var(--color-grey);--color-spec-example: #2b2b35;--color-spec-example-border: #4d4d6d;--color-spec-counter-example: #322828;--color-spec-counter-border: #664040;--color-spec-counter-example-link: #ff702d;--color-spec-added-border: #396;--color-spec-removed-border: #933;--color-spec-prose: var(--color-grey);--color-spec-quantifier-list: var(--color-link);--color-spec-quantifier-optional: #c689ce;--color-spec-condition: #6fa889;--color-spec-param: var(--color-grey);--color-spec-rx: var(--color-foreground);--color-spec-note-border: #605e39;--color-spec-note-background: #303028;--color-spec-note-first-link: #f0e330;--color-source-link: var(--color-grey);--color-table-header: #373737;--color-table-header-border: #525252;--color-token-inserted: hsla(241, 63%, 70%, .69);--color-token-deleted: hsla(325, 64%, 67%, .74);--color-inserts-background: rgba(0, 200, 30, .08);--color-deletions-background: rgba(200, 0, 0, .08);--selection-background-color: #656565;--selection-background-color-link: #f0babe}.selection-link:hover{--selection-background-color: #829edb}}:root{color:var(--color-foreground);background-color:var(--color-background);font-family:var(--font-family);font-size:15px;line-height:1.5;--mono-font-size: 13px;--indent: 1rem;--list-indent: 1.5rem;--dfn-indent: 0rem;--font-family: Cambria, "Palatino Linotype", Palatino, "Liberation Serif", serif;--font-family-monospace: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace}@media (min-width: 720px){:root{font-size:17px;--mono-font-size: 15px;--indent: 2rem;--list-indent: 2rem;--dfn-indent: 2rem}}body{margin:3rem 0 3rem}article{margin:0 1rem}@media (min-width: 720px){body{margin:6rem auto 3rem;max-width:800px;padding-left:75px;padding-right:clamp(0px,calc((100vw - 800px) * .25),75px)}}.source-link{display:none}@media screen and (min-width: 720px){.source-link{display:block;position:absolute;width:18px;fill:var(--color-source-link);opacity:.3}.source-link:hover{opacity:1}}.outdated-selection-link,.selection-link{position:absolute;display:block;color:var(--color-white);background:var(--selection-background-color);border-radius:4px;font-size:36px;height:23px;line-height:48px;text-align:center;text-decoration:none;width:25px;user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.outdated-selection-link:hover,.selection-link:hover{text-decoration:none}.outdated-selection-link:before,.selection-link:before{border:5px solid transparent;content:"";height:0;margin-top:-5px;margin-right:-5px;position:absolute;right:1px;top:50%;width:0}@media (max-width: 719px){.outdated-selection-link:before,.selection-link:before{border-bottom-color:var(--selection-background-color);border-top:0;right:50%;top:1px}}@media (min-width: 720px){.outdated-selection-link:before,.selection-link:before{border-left-color:var(--selection-background-color);border-right:0;right:1px;top:50%}}.outdated-selection-link{background:var(--selection-background-color-link);font-size:21px;font-weight:800;line-height:27px}.outdated-selection-link:hover:after{content:"This selection content has changed since this link was created.";font:9pt/11pt var(--font-family);position:absolute;display:block;white-space:nowrap;padding:2px 5px 1px;top:-20px;background:black;color:var(--color-white)}a{color:var(--color-link);text-decoration:none}a:hover{text-decoration:underline}img{max-width:100%}dl{margin:1rem 0 1rem var(--dfn-indent)}dd{margin:.25em 0 .5em var(--indent)}dd+dd{margin-top:1rem}dfn,.spec-ref{font-style:italic}dfn>a,.spec-ref>a{color:inherit}h1,h2,h3,h4,h5,h6{font-weight:bold;margin:3em 0 1em;position:relative}@media (min-width: 720px){header>h1{margin:6em 0 3em}}h1{font-size:1.5em;margin-top:5em}h2,h3{font-size:1.25em}h4,h5,h6{font-size:1em}section{padding-top:1rem;margin-top:-1rem}section.subsec>h6{margin-top:2em}section.subsec>h6>a{color:var(--color-subsection-link)}section .spec-secid{margin-right:1ex}@media (min-width: 720px){section .spec-secid{position:absolute;right:100%;text-align:right;white-space:nowrap}}footer{font-size:75%;opacity:.5;text-align:center;margin-top:12rem}.spec-toc{margin:1rem 0 3rem}.spec-toc .title{content:"Contents";display:block;font-weight:bold;margin:5em 0 1em}.spec-toc .spec-secid{margin-right:1ex}.spec-toc ol{list-style:none;padding-left:0;margin-top:0;margin-bottom:0}.spec-toc ol ol{list-style:none;padding-left:2ex;margin-bottom:.25em}.spec-toc li{position:relative;padding:5px 0 0 30px;margin:-5px 0 0 -30px}.spec-toc a{color:var(--color-toc-link)}.spec-toc a:hover{text-decoration:none}.spec-toc a .spec-secid{color:var(--color-toc-id)}.spec-toc a:hover .spec-secid{text-decoration:underline}.spec-toc .toggle{display:none}.spec-toc .toggle+label{cursor:pointer;left:6px;opacity:1;padding:5px 6px 5px 7px;position:absolute;top:6px;transform:rotate(0deg);transition:all .18s ease-in-out}.spec-toc .toggle+label:after{border-color:transparent transparent transparent var(--color-toggle-border);border-style:solid;border-width:6px 0 6px 7px;content:" ";display:block;height:0;width:0}@media (pointer: fine){.spec-toc .toggle+label{left:10px;padding:3px 5px 3px 6px;top:8px}}.spec-toc .toggle:checked+label{transform:rotate(90deg)}@media (hover: hover){.spec-toc li:not(:hover)>.toggle:checked+label{opacity:0}}.spec-toc .toggle:not(:checked)~ol{max-height:0;overflow:hidden;margin:0}.spec-sidebar-toggle{display:none}.spec-sidebar-toggle+label>.spec-sidebar-button{position:fixed;right:0;top:0;padding:10px 15px;font-size:30px;color:var(--color-sidebar-toggle-button);z-index:2;cursor:pointer;user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.spec-sidebar-toggle:checked+label:after{content:"";position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:0}.spec-sidebar{display:none;position:fixed;right:0;top:0;width:min(320px,calc(100vw - 48px));font-size:14px;line-height:1.75;overflow-y:scroll;height:100%;padding:0 0 5rem 30px;box-sizing:border-box;background:var(--color-sidebar-background);box-shadow:inset 1px 0 var(--color-sidebar-shadow-inset),-4px 0 8px -2px var(--color-sidebar-shadow);overscroll-behavior:contain}.spec-sidebar{user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.spec-sidebar-toggle:checked~.spec-sidebar{display:block}.spec-sidebar .viewing>a:after{color:var(--color-sidebar-viewing-link);content:"\2022";margin-left:1ex}@media (min-width: 1220px){.spec-sidebar-toggle+label{display:none}.spec-sidebar{display:block;box-shadow:inset 1px 0 var(--color-sidebar-shadow-inset),inset 4px 0 8px -2px var(--color-sidebar-large-shadow)!important}body{padding-right:345px}}.spec-note{background:var(--color-spec-note-background);border-left:solid 4px var(--color-spec-note-border);margin:1rem -1rem;min-width:70vw;padding:8px 1rem 12px calc(1rem - 4px);width:-moz-fit-content;width:-webkit-fit-content;width:fit-content}@media (min-width: 720px){.spec-note{min-width:416px}}.spec-note>a:first-child{color:var(--color-spec-note-first-link);display:block;font:italic 11pt/18pt var(--font-family);opacity:.6;user-select:none}.spec-todo{color:var(--color-spec-todo);margin:1em 0 1em 5em;min-height:1em}.spec-todo::before{content:"todo";display:block;float:left;margin-left:-5em;text-transform:uppercase}.spec-index ol{list-style-type:none;margin:0 0 0 var(--indent);padding:0;column-width:210px;column-gap:var(--indent)}.spec-index ol li{width:min-content;white-space:nowrap}pre,code{font-family:var(--font-family-monospace);font-size:var(--mono-font-size);font-weight:inherit}code{background:var(--color-code-background);margin:-2px -1px;padding:3px 3px;white-space:pre-wrap}pre>code{background:none;font-weight:inherit;margin:0;padding:0;white-space:pre}pre{background:var(--color-pre-background);border-left:solid 4px var(--color-pre-border);margin:1rem -1rem;min-width:70vw;padding:12px 1rem 12px calc(1rem - 4px);width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;max-width:calc(100vw - 2rem);overflow-y:auto}@media (min-width: 720px){pre{min-width:40ch}}.spec-example{background:var(--color-spec-example);border-left:solid 4px var(--color-spec-example-border);padding-top:8px}.spec-counter-example{background:var(--color-spec-counter-example);border-left:solid 4px var(--color-spec-counter-border);padding-top:8px}.spec-example>a,.spec-counter-example>a{display:block;font:italic 11pt/18pt var(--font-family);opacity:.6;user-select:none}.spec-counter-example>a{color:var(--color-spec-counter-example-link)}table{border-collapse:collapse}th{background-color:var(--color-table-header)}td,th{border:1px solid var(--color-table-header-border);padding:.4em;vertical-align:baseline}ol,ul{padding-left:var(--list-indent)}li>ol,li>ul{margin-top:.25em;margin-bottom:.5em}li+li{margin-top:.25em}li.task{list-style-type:none;position:relative}li.task>input:first-child{margin-left:0;position:absolute;transform:translateX(calc(-100% - 1ch))}ins{background-color:var(--color-inserts-background);text-decoration:none}del{background-color:var(--color-deletions-background)}.spec-added,.spec-removed{border-left:4px solid;margin-left:-18px;padding-left:14px}.spec-added{border-color:var(--color-spec-added-border)}.spec-removed{border-color:var(--color-spec-removed-border);text-decoration:line-through}.spec-keyword{font-weight:bold}.spec-string{font-family:var(--font-family-monospace);font-size:85%;white-space:pre}var{font-style:italic}*[data-name]{transition:.15s background ease-out;border-radius:2px;padding:0 3px;margin:0 -3px}.spec-semantic,.spec-algo{margin:1rem 0 1rem var(--dfn-indent)}.spec-semantic>.spec-nt::after,.spec-algo>.spec-call:first-child::after{content:":";font-style:normal;font-weight:bold;margin-left:1ex}.spec-semantic ol,.spec-semantic ol ol ol ol,.spec-algo ol,.spec-algo ol ol ol ol{list-style-type:decimal}.spec-semantic ol ol,.spec-semantic ol ol ol ol ol,.spec-algo ol ol,.spec-algo ol ol ol ol ol{list-style-type:lower-alpha}.spec-semantic ol ol ol,.spec-semantic ol ol ol ol ol ol,.spec-algo ol ol ol,.spec-algo ol ol ol ol ol ol{list-style-type:lower-roman}.spec-call>a{color:inherit}.spec-production{margin:1rem 0 1rem var(--dfn-indent)}.spec-production>.spec-nt::after{content:":";font-style:normal;font-weight:bold;margin:0 1ex}.spec-semantic.d2>.spec-nt::after,.spec-production.d2>.spec-nt::after{content:"::"}.spec-semantic.d3>.spec-nt::after,.spec-production.d3>.spec-nt::after{content:":::"}.spec-production>.spec-rhs{line-height:1.1;margin:.25em 0 .5em calc(2 * var(--indent));text-indent:calc(-1 * var(--indent))}.spec-semantic>.spec-rhs{display:inline-block;text-indent:calc(-1 * var(--indent));margin-left:calc(1ex + var(--indent))}.spec-rhs>*{text-indent:0}.spec-oneof{display:inline}.spec-oneof::before{content:"one of";font-style:normal;font-weight:bold}.spec-oneof-grid{max-width:calc(100vw - 2rem);overflow:auto;margin:-1ex -1rem;padding:1ex 1rem}.spec-oneof-grid>table{margin-left:var(--indent)}.spec-oneof .spec-rhs{border:none;margin:0;padding:0 0 0 1rem;vertical-align:baseline;white-space:pre}.spec-oneof .spec-rhs:first-child{padding:0}.spec-rhs .spec-constrained:not(:first-child),.spec-rhs .spec-quantified:not(:first-child),.spec-rhs .spec-nt:not(:first-child),.spec-rhs .spec-t:not(:first-child),.spec-rhs .spec-rx:not(:first-child),.spec-rhs .spec-prose:not(:first-child),.spec-rhs .spec-empty:not(:first-child),.spec-rhs .spec-lookahead:not(:first-child){margin-left:1ex;display:inline-block}.spec-condition{font-size:85%}.spec-condition::before{content:"[if "}.spec-condition.not::before{content:"[if not "}.spec-condition::after{content:"]"}.spec-empty,.spec-prose{color:var(--color-spec-prose)}.spec-nt{font-style:italic}.spec-nt>a{color:inherit}.spec-quantifiers,.spec-params{font-size:65%;font-style:normal;vertical-align:sub}.spec-quantifier.list{color:var(--color-spec-quantifier-list)}.spec-quantifier.optional{color:var(--color-spec-quantifier-optional)}.spec-params,.spec-condition{color:var(--color-spec-condition)}.spec-params::before{content:"["}.spec-params::after{content:"]"}.spec-quantifier:not(:last-child)::after,.spec-param:not(:last-child)::after{color:var(--color-spec-param);content:", "}.spec-param.conditional::before{content:"?"}.spec-param.negated::before{content:"!"}.spec-t,.spec-rx{color:var(--color-spec-rx);font-family:var(--font-family-monospace);font-weight:bold}.spec-butnot::before{color:var(--color-grey);content:"but not";font-family:var(--font-family);font-weight:normal;margin-right:1ex}.spec-butnot>*:not(:first-child)::before{color:var(--color-grey);content:"or";font-family:var(--font-family);font-weight:normal;margin-right:1ex}.spec-rhs .spec-oneof::before,.spec-rhs .spec-butnot::before{margin-left:1ex}.spec-lookahead>*{margin:0!important}.spec-lookahead>*:not(:first-child)::before{color:var(--color-grey);content:", ";font-family:var(--font-family);font-style:normal;font-weight:normal}.spec-lookahead::before{color:var(--color-grey);content:"[lookahead = ";font-family:var(--font-family);font-style:normal;font-weight:normal}.spec-lookahead.not::before{content:"[lookahead \2260 "}.spec-lookahead.set::before{content:"[lookahead \2208 {";margin-right:0}.spec-lookahead.set.not::before{content:"[lookahead \2209 {"}.spec-lookahead.ntset::before{content:"[lookahead \2208 ";margin-right:0}.spec-lookahead.ntset.not::before{content:"[lookahead \2209 "}.spec-lookahead::after{color:var(--color-grey);content:"]"}.spec-lookahead.set::after{content:"}]"}code[class*=language-],pre[class*=language-]{color:var(--color-prism-foreground);background:none;text-shadow:0 1px var(--color-prism-text-shadow);font-family:var(--font-family-monospace);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{text-shadow:none;background:var(--color-prism-background)}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{text-shadow:none;background:var(--color-prism-background)}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--color-prism-block-background)}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.atrule,.token.attr-value,.token.keyword,.token.property,.token.selector,.token.attr-name,.token.builtin,.token.entity,.token.url,.token.inserted{color:var(--color-token-inserted);background:none}.token.tag,.token.boolean,.token.number,.token.string,.token.char,.token.constant,.token.symbol,.token.regex,.token.important,.token.variable,.token.function,.token.class-name,.token.deleted{color:var(--color-token-deleted)}.token.comment,.token.prolog,.token.doctype,.token.cdata,.token.description{color:inherit;opacity:.3}.token.punctuation{color:inherit;opacity:.5}.token.operator,.token.namespace{color:inherit;opacity:.7}</style>
7
+ <script>(function(){var r,a=[];document.addEventListener("readystatechange",function(){document.readyState==="interactive"&&u()});function u(){var n=document.querySelector('label[for="spec-sidebar-toggle"]');n.addEventListener("scroll",o),n.addEventListener("touchmove",o);function o(d){d.preventDefault()}for(var t=document.getElementsByTagName("section"),e=0;e<t.length;e++)t[e].getAttribute("secid")&&a.push(t[e]);var i=window.scrollY,c=!1;window.addEventListener("scroll",function(d){i=window.scrollY,c||(c=!0,window.requestAnimationFrame(function(){s(i),c=!1}))})}function s(n){for(var o=n+document.documentElement.clientHeight/4,t,e=a.length-1;e>=0;e--)if(a[e].offsetTop<o){t=a[e];break}var i=t&&t.getAttribute("secid");i!==r&&(r&&l(r,!1),i&&l(i,!0),r=i)}function l(n,o){document.getElementById("_sidebar_"+n).className=o?"viewing":"";for(var t=n.split(".");t.length;){var e=document.getElementById("_toggle_"+t.join("."));e&&(e.checked=o),t.pop()}}s(window.scrollY);})();</script>
8
+ <script>(function(){var n=document.getElementsByTagName("style")[0].sheet,e;function u(){e&&(n.deleteRule(e),e=void 0)}function d(t){u(),e=n.insertRule('*[data-name="'+t+'"] { background: rgba(230,215,0,0.12); }',n.cssRules.length)}document.documentElement.addEventListener("mouseover",function(t){var a=t.target.attributes["data-name"];a&&d(a.value)});document.documentElement.addEventListener("mouseout",u);})();</script>
9
+ <script>(function(){var R="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",o,p,r,g;document.addEventListener("selectionchange",E);window.addEventListener("resize",C);window.addEventListener("hashchange",x);window.addEventListener("load",x);function S(n){y(new URL(n.target.href))}function x(){y(window.location)}function y(n){var e=n.hash.match(/^#sel-([A-Za-z0-9-_]+)$/);if(!!e){g=e[1],r=k(g);var t=r.getBoundingClientRect(),d=Math.max(20,Math.floor((window.innerHeight-t.height)*.4));window.scrollTo(0,window.scrollY+t.y-d);var c=document.getSelection();c.empty(),c.addRange(r),C()}}function E(n){var e=document.getSelection();if(e.isCollapsed)o&&(o.parentNode.removeChild(o),o=null);else{var t=e.getRangeAt(0);(!r||t.compareBoundaryPoints(Range.START_TO_START,r)!==0||t.compareBoundaryPoints(Range.END_TO_END,r)!==0)&&(r=t,g=B(r),C())}}function C(){if(!!r){p||(p=document.getElementsByTagName("article")[0]),o||(o=document.createElement("a"),document.body.appendChild(o)),o.href="#sel-"+g,o.onclick=S,o.className=r.isOutdated?"outdated-selection-link":"selection-link",o.innerText=r.isOutdated?"!":"\u201F";var n=window.innerWidth<720,e=r.getBoundingClientRect();if(n)o.style.left=Math.floor(e.x+e.width/2+window.scrollX-13)+"px",o.style.top=Math.floor(e.bottom+window.scrollY+10)+"px";else{var t=p.getBoundingClientRect().x;o.style.left=Math.floor(t+window.scrollX-37)+"px",o.style.top=Math.floor(e.y+window.scrollY-3)+"px"}}}function B(n){var e="",t=N(n.startContainer),d=N(n.endContainer),c=M(t,d);return l(c),l(t.slice(c.length).concat(n.startOffset)),l(d.slice(c.length).concat(n.endOffset)),i(L(n.toString())),e;function i(a){do e+=R[a&31|(a>31?32:0)],a>>=5;while(a>0)}function l(a){i(a.length);for(var h=0;h<a.length;h++)i(a[h])}}function k(n){for(var e=new Array(64),t=0;t<64;t++)e[R.charCodeAt(t)]=t;var d=0,c=m(),i=m(),l=m(),a=w(),h=i.pop(),P=O(c.concat(i)),T=l.pop(),A=O(c.concat(l)),u=document.createRange();return u.setStart(P,h),u.setEnd(A,T),u.isOutdated=a!==void 0&&a!==L(u.toString()),u;function w(){for(var s=0,v=0;d<n.length;){var f=e[n.charCodeAt(d++)];if(s|=(f&31)<<v,v+=5,f<32)return s}}function m(){var s=w();if(s!=null){for(var v=new Array(s),f=0;f<s;f++)v[f]=w();return v}}}function N(n){for(var e=[];n!=document.body;){var t=n.parentNode;e.push(Array.prototype.indexOf.call(t.childNodes,n)),n=t}return e.reverse()}function O(n){for(var e=document.body,t=0;t<n.length&&e;t++)e=e.childNodes[n[t]];return e}function M(n,e){for(var t=0;t<n.length&&t<e.length&&n[t]===e[t];)t++;return n.slice(0,t)}function L(n){for(var e=2166136261,t=0;t<n.length;++t)e^=n.charCodeAt(t),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);return(e>>15^e)&32767}})();</script>
10
+ </head>
11
+ <body><article>
12
+ <header>
13
+ <h1>L0175 Vocabulary</h1>
14
+ <section id="intro">
15
+ <p><em>Revised: 2026-06-19</em></p>
16
+ <p><strong>L0175</strong> is a Graffiticode dialect for composing 5th-grade English Language Arts assessment items (Smarter Balanced · Grade 5 · Claim 1). One language serves <strong>multiple learning targets</strong>, selected by a required top-level <code>target</code>: <code>c1-t4</code> (Reasoning &amp; Evidence, literary, RL standards), <code>c1-t11</code> (Reasoning &amp; Evidence, informational, RI standards), <code>c1-t9</code> (Central Ideas, informational, RI-1/RI-2), <code>c1-t8</code> (Key Details, informational, RI-1/RI-7 &mdash; the inference is given and the student selects supporting evidence), or <code>c1-t10</code> (Word Meanings, informational, RI-4/L-4 &mdash; the meaning of a targeted word, options authored as <code>word</code>/<code>meaning</code>) &mdash; different reading skills, each with its own dimensions, distractor taxonomy, DOK, item types, and stem catalog. It is <strong>item-first</strong>: a program declares its <code>target</code>, then authors the <code>outcome</code>s (questions) first &mdash; each with a unique <code>id</code>, a <code>focus</code> naming its correct claim, and an explicit <code>stem</code> from that target&rsquo;s guideline catalog &mdash; then the supported and distractor <code>claim</code>s (each distractor <code>targets</code> the question(s) it foils) and the evidence <code>source</code>s for one passage. The compiler <strong>composes</strong> each outcome by taking its <code>focus</code> claim, drawing that question&rsquo;s foils from the distractors that <code>targets</code> it, and assembling a finished item (<code>ebsr</code>, <code>hot-text</code>, or <code>short-text</code>). It selects and validates authored content against the target profile; it does not generate content or stems.</p>
17
+ <p>The core language specification (syntax, semantics, base library) is here: <a href="./graffiticode-language-spec.html">Graffiticode Language Specification</a></p>
18
+ </section>
19
+ <nav class="spec-toc">
20
+ <div class="title">Contents</div>
21
+ <ol>
22
+ <li><a href="#sec-Authoring-shape"><span class="spec-secid">1</span>Authoring shape</a></li>
23
+ <li><a href="#sec-Function-reference"><span class="spec-secid">2</span>Function reference</a><ol>
24
+ <li><a href="#sec-Structural-forms"><span class="spec-secid">2.1</span>Structural forms</a></li>
25
+ <li><a href="#sec-Identity-references"><span class="spec-secid">2.2</span>Identity &amp; references</a></li>
26
+ <li><a href="#sec-Claim-content"><span class="spec-secid">2.3</span>Claim content</a></li>
27
+ <li><a href="#sec-Evidence-content"><span class="spec-secid">2.4</span>Evidence content</a></li>
28
+ <li><a href="#sec-Outcome-stem-control"><span class="spec-secid">2.5</span>Outcome &amp; stem control</a></li>
29
+ <li><a href="#sec-Rubric-band"><span class="spec-secid">2.6</span>Rubric band</a></li>
30
+ <li><a href="#sec-Enumerations"><span class="spec-secid">2.7</span>Enumerations</a></li>
31
+ <li><a href="#sec-How-composition-uses-the-vocabulary"><span class="spec-secid">2.8</span>How composition uses the vocabulary</a></li>
32
+ <li><a href="#sec-Example"><span class="spec-secid">2.9</span>Example</a></li>
33
+ </ol>
34
+ </li>
35
+ </ol>
36
+ </nav>
37
+ </header>
38
+ <section id="sec-Authoring-shape" secid="1">
39
+ <h1><span class="spec-secid" title="link to this section"><a href="#sec-Authoring-shape">1</a></span>Authoring shape</h1>
40
+ <p>A program is <strong>one flat builder chain</strong> ending in a single <code>{}..</code>:</p>
41
+ <pre><code>target c1-t4
42
+ title "Optional assessment title"
43
+ passage "Heading"
44
+ type literary
45
+ lines [ "First paragraph…" "Second paragraph…" ] /* one entry per paragraph */
46
+ claims [ claim ... {} claim ... {} ]
47
+ evidence [ source ... {} source ... {} ]
48
+ outcomes [ outcome ... {} outcome ... {} ]
49
+ {}..
50
+ </code></pre>
51
+ <p>Three function roles make up the idiom:</p>
52
+ <ul>
53
+ <li><strong>Attribute functions</strong> are arity-2 <code>(value, continuation)</code> and merge one key into the record: <code>text "…" cont</code> &rarr; <code>{ ...cont, text: "…" }</code>. They are generic &mdash; the same <code>id</code>, <code>status</code>, <code>text</code>, <code>type</code> appear on several forms &mdash; and the element wrapper validates them in context.</li>
54
+ <li><strong>Collection builders</strong> (<code>claims</code>, <code>evidence</code>, <code>outcomes</code>, <code>rubric</code>) and the passage forms (<code>passage</code>, <code>type</code>, <code>lines</code>, <code>title</code>) are arity-2 and thread <strong>one shared continuation</strong>, so the whole top level is a single chain closed by <strong>one</strong> trailing <code>{}</code>.</li>
55
+ <li><strong>Element wrappers</strong> (<code>claim</code>, <code>source</code>, <code>outcome</code>, <code>band</code>) are arity-1; each element&rsquo;s own attribute chain is terminated by its <strong>own</strong> <code>{}</code> inside the list.</li>
56
+ </ul>
57
+ <p>Free text (<code>text</code>, <code>rationale</code>, <code>subject</code>, <code>stem</code>, the passage heading) and id labels (<code>id</code>, <code>focus</code>, <code>cites</code>, <code>supports</code>, <code>targets</code>) are <strong>quoted strings</strong>; closed-enum values (<code>ebsr</code>, <code>character</code>, <code>misreads-detail</code>, <code>rl-1</code>, …) are <strong>bare kebab-case identifiers</strong>; <code>line</code>, <code>score</code>, <code>plausibility</code>, and <code>grade</code> are <strong>numbers</strong>.</p>
58
+ <p>---</p>
59
+ </section>
60
+ <section id="sec-Function-reference" secid="2">
61
+ <h1><span class="spec-secid" title="link to this section"><a href="#sec-Function-reference">2</a></span>Function reference</h1>
62
+ <section id="sec-Structural-forms" secid="2.1">
63
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-Structural-forms">2.1</a></span>Structural forms</h2>
64
+ <table>
65
+ <thead>
66
+ <tr>
67
+ <th align="left">Form</th>
68
+ <th align="center">Arity</th>
69
+ <th align="left">Takes</th>
70
+ <th align="left">Description</th>
71
+ </tr>
72
+ </thead>
73
+ <tbody>
74
+ <tr>
75
+ <td align="left"><code>target</code></td>
76
+ <td align="center">2</td>
77
+ <td align="left">tag</td>
78
+ <td align="left">Top level: the learning target &mdash; <code>c1-t4</code> (R&amp;E literary, RL), <code>c1-t11</code> (R&amp;E informational, RI), <code>c1-t9</code> (Central Ideas informational, RI-1/RI-2), <code>c1-t8</code> (Key Details informational, RI-1/RI-7), or <code>c1-t10</code> (Word Meanings informational, RI-4/L-4). Selects the valid dimensions/standards, distractor taxonomy, DOK, item types, and stem catalog. Always author one; defaults to <code>c1-t4</code> if omitted.</td>
79
+ </tr>
80
+ <tr>
81
+ <td align="left"><code>title</code></td>
82
+ <td align="center">2</td>
83
+ <td align="left">string</td>
84
+ <td align="left">Optional assessment title; echoed on the composed output.</td>
85
+ </tr>
86
+ <tr>
87
+ <td align="left"><code>grade</code></td>
88
+ <td align="center">2</td>
89
+ <td align="left">number</td>
90
+ <td align="left">Optional top-level reading-level target (e.g. <code>grade 5</code>). Defaults to the target/guideline&rsquo;s grade (5 for <code>c1-t4</code>/<code>c1-t11</code>); echoed on the output. The compiler estimates the passage&rsquo;s reading level and warns when it reads above this grade.</td>
91
+ </tr>
92
+ <tr>
93
+ <td align="left"><code>passage</code></td>
94
+ <td align="center">2</td>
95
+ <td align="left">string</td>
96
+ <td align="left">Opens the stimulus; the value is the passage <strong>heading</strong>. Chains with <code>type</code> and <code>lines</code>.</td>
97
+ </tr>
98
+ <tr>
99
+ <td align="left"><code>type</code></td>
100
+ <td align="center">2</td>
101
+ <td align="left">tag</td>
102
+ <td align="left">On the passage: <code>literary</code> \</td>
103
+ </tr>
104
+ <tr>
105
+ <td align="left"><code>lines</code></td>
106
+ <td align="center">2</td>
107
+ <td align="left">string list</td>
108
+ <td align="left">The passage <strong>paragraphs</strong> (one entry per paragraph by default), <strong>auto-numbered from 1</strong> (the numbers <code>source.line</code> refers to). Use finer units (sentences) only when a task needs them, e.g. click-the-sentence Hot Text.</td>
109
+ </tr>
110
+ <tr>
111
+ <td align="left"><code>claims</code></td>
112
+ <td align="center">2</td>
113
+ <td align="left">list</td>
114
+ <td align="left">The collection of candidate <code>claim</code>s (the inference graph&rsquo;s nodes).</td>
115
+ </tr>
116
+ <tr>
117
+ <td align="left"><code>claim</code></td>
118
+ <td align="center">1</td>
119
+ <td align="left">chain</td>
120
+ <td align="left">One candidate inference/conclusion statement &mdash; either the correct answer or a foil.</td>
121
+ </tr>
122
+ <tr>
123
+ <td align="left"><code>evidence</code></td>
124
+ <td align="center">2</td>
125
+ <td align="left">list</td>
126
+ <td align="left">The collection of evidence <code>source</code>s.</td>
127
+ </tr>
128
+ <tr>
129
+ <td align="left"><code>source</code></td>
130
+ <td align="center">1</td>
131
+ <td align="left">chain</td>
132
+ <td align="left">One passage line tagged by its support role.</td>
133
+ </tr>
134
+ <tr>
135
+ <td align="left"><code>outcomes</code></td>
136
+ <td align="center">2</td>
137
+ <td align="left">list</td>
138
+ <td align="left">The collection of intended items.</td>
139
+ </tr>
140
+ <tr>
141
+ <td align="left"><code>outcome</code></td>
142
+ <td align="center">1</td>
143
+ <td align="left">chain</td>
144
+ <td align="left">One item to compose; varying it projects the same pool into a different item.</td>
145
+ </tr>
146
+ <tr>
147
+ <td align="left"><code>rubric</code></td>
148
+ <td align="center">2</td>
149
+ <td align="left">band list</td>
150
+ <td align="left">On a <code>short-text</code> outcome: the scoring <code>band</code>s (defaults to 0/1/2 if omitted).</td>
151
+ </tr>
152
+ <tr>
153
+ <td align="left"><code>band</code></td>
154
+ <td align="center">1</td>
155
+ <td align="left">chain</td>
156
+ <td align="left">One rubric row (a <code>score</code> + a <code>descriptor</code>).</td>
157
+ </tr>
158
+ </tbody>
159
+ </table>
160
+ </section>
161
+ <section id="sec-Identity-references" secid="2.2">
162
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-Identity-references">2.2</a></span>Identity &amp; references</h2>
163
+ <table>
164
+ <thead>
165
+ <tr>
166
+ <th align="left">Attribute</th>
167
+ <th align="left">On</th>
168
+ <th align="left">Value</th>
169
+ <th align="left">Description</th>
170
+ </tr>
171
+ </thead>
172
+ <tbody>
173
+ <tr>
174
+ <td align="left"><code>id</code></td>
175
+ <td align="left">claim, source, outcome</td>
176
+ <td align="left">string</td>
177
+ <td align="left">Stable identifier. Claim/source ids are referenced by <code>cites</code> / <code>supports</code> / <code>focus</code>; an outcome&rsquo;s id is referenced by a distractor&rsquo;s <code>targets</code>. <strong>Must be unique</strong> within claims, within sources, and within outcomes (duplicates are a hard error).</td>
178
+ </tr>
179
+ <tr>
180
+ <td align="left"><code>cites</code></td>
181
+ <td align="left">claim</td>
182
+ <td align="left">id list</td>
183
+ <td align="left">The evidence <code>source</code> ids this claim draws on. For the correct claim, the <code>directly-supports</code> members become Part B&rsquo;s correct option(s).</td>
184
+ </tr>
185
+ <tr>
186
+ <td align="left"><code>supports</code></td>
187
+ <td align="left">source</td>
188
+ <td align="left">id list</td>
189
+ <td align="left">The claim ids this evidence backs &mdash; <em>truly</em> for the correct claim, or <em>temptingly</em> for a distractor claim. A source tied to both the correct claim and a foil is what makes a Part B option plausibly support more than one Part A option (the no-giveaway rule).</td>
190
+ </tr>
191
+ <tr>
192
+ <td align="left"><code>focus</code></td>
193
+ <td align="left">outcome</td>
194
+ <td align="left">id</td>
195
+ <td align="left"><strong>Required</strong> &mdash; the supported claim that is this question&rsquo;s correct answer.</td>
196
+ </tr>
197
+ <tr>
198
+ <td align="left"><code>targets</code></td>
199
+ <td align="left">distractor</td>
200
+ <td align="left">id list</td>
201
+ <td align="left"><strong>Required on distractors</strong> &mdash; the outcome id(s) of the question(s) this foil is authored against. Composition draws an item&rsquo;s foils only from the distractors that target it.</td>
202
+ </tr>
203
+ </tbody>
204
+ </table>
205
+ <p><code>cites</code> / <code>supports</code> references that don&rsquo;t resolve produce a <strong>warning</strong> (the item still composes). A <code>focus</code> that isn&rsquo;t a supported claim, or a <code>targets</code> to a missing outcome, is a <strong>hard error</strong> &mdash; the binding is the contract.</p>
206
+ </section>
207
+ <section id="sec-Claim-content" secid="2.3">
208
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-Claim-content">2.3</a></span>Claim content</h2>
209
+ <table>
210
+ <thead>
211
+ <tr>
212
+ <th align="left">Attribute</th>
213
+ <th align="left">Value</th>
214
+ <th align="center">Req.</th>
215
+ <th align="left">Description</th>
216
+ </tr>
217
+ </thead>
218
+ <tbody>
219
+ <tr>
220
+ <td align="left"><code>status</code></td>
221
+ <td align="left">tag</td>
222
+ <td align="center">✓</td>
223
+ <td align="left"><code>supported</code> (a valid inference &mdash; a candidate correct answer) or <code>distractor</code> (a foil).</td>
224
+ </tr>
225
+ <tr>
226
+ <td align="left"><code>dimension</code></td>
227
+ <td align="left">tag</td>
228
+ <td align="center">✓ on supported</td>
229
+ <td align="left">The inference target (<code>character</code>, <code>theme</code>, <code>point-of-view</code>, …). Required on supported claims (it must match the outcome); on distractors the binding is by <code>targets</code>, so it is not needed.</td>
230
+ </tr>
231
+ <tr>
232
+ <td align="left"><code>text</code></td>
233
+ <td align="left">string</td>
234
+ <td align="center">✓</td>
235
+ <td align="left">The statement a student reads as an option.</td>
236
+ </tr>
237
+ <tr>
238
+ <td align="left"><code>error-type</code></td>
239
+ <td align="left">tag</td>
240
+ <td align="center">✓ on distractor</td>
241
+ <td align="left">Which student misconception the foil targets: <code>misreads-detail</code>, <code>erroneous-inference</code>, or <code>faulty-reasoning</code>.</td>
242
+ </tr>
243
+ <tr>
244
+ <td align="left"><code>rationale</code></td>
245
+ <td align="left">string</td>
246
+ <td align="center">✓ on distractor</td>
247
+ <td align="left">Why a student would plausibly choose this foil (the error it targets). Surfaced in the item&rsquo;s <code>distractorAnalysis</code>.</td>
248
+ </tr>
249
+ <tr>
250
+ <td align="left"><code>targets</code></td>
251
+ <td align="left">id list</td>
252
+ <td align="center">✓ on distractor</td>
253
+ <td align="left">The outcome id(s) this foil is authored against (see <em>Identity &amp; references</em>).</td>
254
+ </tr>
255
+ <tr>
256
+ <td align="left"><code>plausibility</code></td>
257
+ <td align="left">number 0&ndash;1</td>
258
+ <td align="center">&mdash;</td>
259
+ <td align="left">Optional author override for how tempting the foil is. If omitted, the compiler computes a score from evidence overlap, structural parallelism, and error type, and uses it to pick the strongest foil per error type among those targeting the outcome.</td>
260
+ </tr>
261
+ <tr>
262
+ <td align="left"><code>subject</code></td>
263
+ <td align="left">string</td>
264
+ <td align="center">&mdash;</td>
265
+ <td align="left">Who/what the claim is about (e.g. <code>"Mara"</code>, or a specific reference like <code>"Cortez's age"</code>); echoed in review metadata.</td>
266
+ </tr>
267
+ <tr>
268
+ <td align="left"><code>standard</code></td>
269
+ <td align="left">tag</td>
270
+ <td align="center">&mdash;</td>
271
+ <td align="left">The companion RL standard the claim addresses; emitted on the item.</td>
272
+ </tr>
273
+ <tr>
274
+ <td align="left"><code>dok</code></td>
275
+ <td align="left">tag</td>
276
+ <td align="center">&mdash;</td>
277
+ <td align="left">The claim&rsquo;s cognitive demand (<code>r-dok3</code>).</td>
278
+ </tr>
279
+ </tbody>
280
+ </table>
281
+ </section>
282
+ <section id="sec-Evidence-content" secid="2.4">
283
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-Evidence-content">2.4</a></span>Evidence content</h2>
284
+ <table>
285
+ <thead>
286
+ <tr>
287
+ <th align="left">Attribute</th>
288
+ <th align="left">Value</th>
289
+ <th align="left">Description</th>
290
+ </tr>
291
+ </thead>
292
+ <tbody>
293
+ <tr>
294
+ <td align="left"><code>status</code></td>
295
+ <td align="left">tag</td>
296
+ <td align="left">The support role: <code>directly-supports</code> (real backing for its claim), <code>supports-wrong-claim</code> (real text that <em>seems</em> to back a foil), or <code>irrelevant</code> (off-point &mdash; a Part B distractor).</td>
297
+ </tr>
298
+ <tr>
299
+ <td align="left"><code>line</code></td>
300
+ <td align="left">number</td>
301
+ <td align="left">The numbered passage entry (a paragraph by default, 1-based) this source draws on. Must be within the passage (out-of-range &rarr; warning).</td>
302
+ </tr>
303
+ <tr>
304
+ <td align="left"><code>quote</code></td>
305
+ <td align="left">string</td>
306
+ <td align="left">A verbatim excerpt shown instead of the whole <code>line</code>. For EBSR Part B, set this to the exact supporting <strong>sentence</strong> (with <code>line</code> pointing at its paragraph) so options stay sentence-tight.</td>
307
+ </tr>
308
+ <tr>
309
+ <td align="left"><code>supports</code></td>
310
+ <td align="left">id list</td>
311
+ <td align="left">See <em>Identity &amp; references</em> &mdash; the claim(s) this evidence backs.</td>
312
+ </tr>
313
+ <tr>
314
+ <td align="left"><code>rationale</code></td>
315
+ <td align="left">string</td>
316
+ <td align="left">Optional: why this line is a tempting-but-wrong Part B foil. If omitted, composition synthesizes one from the source&rsquo;s status.</td>
317
+ </tr>
318
+ </tbody>
319
+ </table>
320
+ </section>
321
+ <section id="sec-Outcome-stem-control" secid="2.5">
322
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-Outcome-stem-control">2.5</a></span>Outcome &amp; stem control</h2>
323
+ <table>
324
+ <thead>
325
+ <tr>
326
+ <th align="left">Attribute</th>
327
+ <th align="left">Value</th>
328
+ <th align="center">Req.</th>
329
+ <th align="left">Description</th>
330
+ </tr>
331
+ </thead>
332
+ <tbody>
333
+ <tr>
334
+ <td align="left"><code>id</code></td>
335
+ <td align="left">string</td>
336
+ <td align="center">✓</td>
337
+ <td align="left">Unique question id; distractors <code>targets</code> it.</td>
338
+ </tr>
339
+ <tr>
340
+ <td align="left"><code>type</code></td>
341
+ <td align="left">tag</td>
342
+ <td align="center">✓</td>
343
+ <td align="left">The task model: <code>ebsr</code>, <code>hot-text</code>, <code>short-text</code>, <code>multiple-choice</code>, or <code>multi-select</code>.</td>
344
+ </tr>
345
+ <tr>
346
+ <td align="left"><code>dimension</code></td>
347
+ <td align="left">tag</td>
348
+ <td align="center">✓</td>
349
+ <td align="left">The skill facet the item assesses (must match the focus claim&rsquo;s dimension).</td>
350
+ </tr>
351
+ <tr>
352
+ <td align="left"><code>focus</code></td>
353
+ <td align="left">id \</td>
354
+ <td align="center">id list</td>
355
+ <td align="left">✓</td>
356
+ </tr>
357
+ <tr>
358
+ <td align="left"><code>stem</code></td>
359
+ <td align="left">string</td>
360
+ <td align="center">✓</td>
361
+ <td align="left">The Part A / single-question stem (or, for <code>short-text</code>, the prompt), authored from the guideline&rsquo;s Appropriate-Stem catalog (<code>stems.md</code>).</td>
362
+ </tr>
363
+ <tr>
364
+ <td align="left"><code>stem-b</code></td>
365
+ <td align="left">string</td>
366
+ <td align="center">✓ on ebsr</td>
367
+ <td align="left">The EBSR Part B stem, authored from the catalog. (Hot Text&rsquo;s Part B instruction is fixed; Short Text has no Part B.)</td>
368
+ </tr>
369
+ <tr>
370
+ <td align="left"><code>subject</code></td>
371
+ <td align="left">string</td>
372
+ <td align="center">&mdash;</td>
373
+ <td align="left">The noun phrase the stem is about, e.g. <code>"Mara"</code> or <code>"the letter Cortez burned"</code>; echoed in review metadata.</td>
374
+ </tr>
375
+ <tr>
376
+ <td align="left"><code>standard</code></td>
377
+ <td align="left">tag</td>
378
+ <td align="center">&mdash;</td>
379
+ <td align="left">The primary RL standard; <code>rl-1</code> (cite evidence) is added automatically, and the dimension&rsquo;s companion standard is inferred.</td>
380
+ </tr>
381
+ <tr>
382
+ <td align="left"><code>dok</code></td>
383
+ <td align="left">tag</td>
384
+ <td align="center">&mdash;</td>
385
+ <td align="left">Target cognitive demand (default: the target&rsquo;s &mdash; <code>r-dok3</code> for R&amp;E, <code>r-dok2</code> for T9; a <code>short-text</code> summary is <code>r-dok3</code>).</td>
386
+ </tr>
387
+ <tr>
388
+ <td align="left"><code>rubric</code></td>
389
+ <td align="left">band list</td>
390
+ <td align="center">&mdash;</td>
391
+ <td align="left"><code>short-text</code> only &mdash; replace the default 0/1/2 rubric with authored <code>band</code>s.</td>
392
+ </tr>
393
+ </tbody>
394
+ </table>
395
+ </section>
396
+ <section id="sec-Rubric-band" secid="2.6">
397
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-Rubric-band">2.6</a></span>Rubric band</h2>
398
+ <table>
399
+ <thead>
400
+ <tr>
401
+ <th align="left">Attribute</th>
402
+ <th align="left">Value</th>
403
+ <th align="left">Description</th>
404
+ </tr>
405
+ </thead>
406
+ <tbody>
407
+ <tr>
408
+ <td align="left"><code>score</code></td>
409
+ <td align="left">number</td>
410
+ <td align="left">The points this band awards (e.g. <code>2</code>, <code>1</code>, <code>0</code>).</td>
411
+ </tr>
412
+ <tr>
413
+ <td align="left"><code>descriptor</code></td>
414
+ <td align="left">string</td>
415
+ <td align="left">What a response at this score looks like.</td>
416
+ </tr>
417
+ </tbody>
418
+ </table>
419
+ <p>---</p>
420
+ </section>
421
+ <section id="sec-Enumerations" secid="2.7">
422
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-Enumerations">2.7</a></span>Enumerations</h2>
423
+ <ul>
424
+ <li><strong><code>target</code></strong>: <code>c1-t4</code> (R&amp;E literary), <code>c1-t11</code> (R&amp;E informational), <code>c1-t9</code> (Central Ideas informational), <code>c1-t8</code> (Key Details informational), <code>c1-t10</code> (Word Meanings informational) &mdash; required, top level</li>
425
+ <li><strong>item <code>type</code></strong>: <code>ebsr</code>, <code>hot-text</code>, <code>short-text</code>, <code>multiple-choice</code>, <code>multi-select</code> (allowed set is per-target) · <strong>passage <code>type</code></strong>: <code>literary</code>, <code>informational</code></li>
426
+ <li><strong><code>dimension</code> (c1-t4)</strong>: <code>character</code>, <code>setting</code>, <code>event</code>, <code>point-of-view</code>, <code>theme</code>, <code>topic</code>, <code>narrators-feelings</code>, <code>character-relationship</code></li>
427
+ <li><strong><code>dimension</code> (c1-t11)</strong>: <code>relationships-interactions</code>, <code>author-use-of-information</code>, <code>point-of-view</code>, <code>purpose</code>, <code>authors-opinion</code></li>
428
+ <li><strong><code>dimension</code> (c1-t9)</strong>: <code>central-idea</code>, <code>key-detail</code>, <code>summary</code> · <strong>(c1-t8)</strong>: <code>supporting-evidence</code> · <strong>(c1-t10)</strong>: <code>word-meaning</code></li>
429
+ <li><strong>claim <code>status</code></strong>: <code>supported</code>, <code>distractor</code> · <strong>source <code>status</code></strong>: <code>directly-supports</code>, <code>supports-wrong-claim</code>, <code>irrelevant</code> · <strong>meaning <code>status</code> (c1-t10)</strong>: <code>correct</code>, <code>distractor</code></li>
430
+ <li><strong><code>error-type</code> (c1-t4 / c1-t11)</strong>: <code>misreads-detail</code>, <code>erroneous-inference</code>, <code>faulty-reasoning</code> · <strong>(c1-t9)</strong>: <code>too-narrow</code>, <code>too-broad</code>, <code>misreads-detail</code>, <code>insignificant</code> · <strong>(c1-t8)</strong>: none &mdash; non-supporting sources · <strong>(c1-t10)</strong>: <code>other-meaning</code>, <code>misinterprets</code>, <code>wrong-context</code></li>
431
+ <li><strong><code>standard</code> (c1-t4)</strong>: <code>rl-1</code>, <code>rl-3</code>, <code>rl-6</code>, <code>rl-9</code> · <strong>(c1-t11)</strong>: <code>ri-1</code>, <code>ri-3</code>, <code>ri-6</code>, <code>ri-7</code>, <code>ri-8</code>, <code>ri-9</code> · <strong>(c1-t9)</strong>: <code>ri-1</code>, <code>ri-2</code> · <strong>(c1-t8)</strong>: <code>ri-1</code>, <code>ri-7</code> · <strong>(c1-t10)</strong>: <code>ri-4</code>, <code>l-4</code>, <code>l-4a</code>, <code>l-4b</code>, <code>l-4c</code>, <code>l-5c</code> · <strong><code>dok</code></strong>: <code>r-dok1</code>, <code>r-dok2</code>, <code>r-dok3</code></li>
432
+ </ul>
433
+ </section>
434
+ <section id="sec-How-composition-uses-the-vocabulary" secid="2.8">
435
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-How-composition-uses-the-vocabulary">2.8</a></span>How composition uses the vocabulary</h2>
436
+ <p>For each outcome, the compiler takes the <code>focus</code> supported claim as the correct answer and draws the foils from the distractors that <code>targets</code> that outcome (most plausible per error type), then:</p>
437
+ <ul>
438
+ <li><strong>ebsr</strong> &mdash; Part A: the correct claim + 3 targeted distractor claims; Part B: a <code>directly-supports</code> line + 3 foils drawn from <code>supports-wrong-claim</code> and <code>irrelevant</code> sources.</li>
439
+ <li><strong>hot-text</strong> &mdash; Part A as above; Part B exposes every passage line as selectable, with the correct claim&rsquo;s <code>directly-supports</code> lines marked correct.</li>
440
+ <li><strong>short-text</strong> &mdash; the authored prompt plus a 0/1/2 <code>rubric</code>; no distractors.</li>
441
+ </ul>
442
+ <p>It emits <code>distractorAnalysis</code> (every foil&rsquo;s error type/status + rationale + the claim it ties to + plausibility), an <code>answerKey</code>, the matched <code>standards</code> and <code>dok</code>, and <code>warnings</code>. <strong>Hard errors</strong> (invalid enum; missing <code>id</code>/<code>focus</code>/<code>stem</code>; distractor missing its <code>rationale</code> or <code>targets</code>; a <code>focus</code>/<code>targets</code> that doesn&rsquo;t resolve; fewer than 3 foils targeting an option item; duplicate <code>id</code>) fail the compile and carry source coordinates. <strong>Warnings</strong> (thin targeted distractor pool, thin Part B pool, dangling <code>cites</code>/<code>supports</code>, hot-text ambiguity) are non-fatal and ride on the item.</p>
443
+ </section>
444
+ <section id="sec-Example" secid="2.9">
445
+ <h2><span class="spec-secid" title="link to this section"><a href="#sec-Example">2.9</a></span>Example</h2>
446
+ <p>An EBSR item about a character&rsquo;s motivation, plus a short-text item with an authored rubric:</p>
447
+ <pre><code>target c1-t4
448
+ title "The Tide Pool"
449
+ passage "The Tide Pool"
450
+ type literary
451
+ lines [
452
+ "Mara crouched at the edge of the tide pool, ignoring the picnic behind her."
453
+ "Her brother called twice, but she did not turn around."
454
+ "A tiny crab scuttled under a rock, and Mara smiled for the first time all day."
455
+ ]
456
+ claims [
457
+ claim id "c1"
458
+ status supported
459
+ dimension character
460
+ subject "Mara"
461
+ standard rl-1
462
+ text "Mara is more interested in the tide pool than in her family's picnic."
463
+ cites [
464
+ "e1"
465
+ "e3"
466
+ ] {}
467
+ claim id "c2"
468
+ status distractor
469
+ error-type misreads-detail
470
+ plausibility 0.8
471
+ targets [ "q1" ]
472
+ text "Mara is angry at her brother."
473
+ rationale "Not turning around shows absorption, not anger."
474
+ cites [
475
+ "e2"
476
+ ] {}
477
+ claim id "c3"
478
+ status distractor
479
+ error-type erroneous-inference
480
+ targets [ "q1" ]
481
+ text "Mara dislikes the outdoors."
482
+ rationale "Contradicted by her smile in line 3."
483
+ cites [
484
+ "e2"
485
+ ] {}
486
+ claim id "c4"
487
+ status distractor
488
+ error-type faulty-reasoning
489
+ targets [ "q1" ]
490
+ text "Because Mara is quiet, she must be upset."
491
+ rationale "Treats quiet as upset without support."
492
+ cites [
493
+ "e2"
494
+ ] {}
495
+ ]
496
+ evidence [
497
+ source id "e1"
498
+ line 1
499
+ status directly-supports
500
+ supports [
501
+ "c1"
502
+ ] {}
503
+ source id "e2"
504
+ line 2
505
+ status supports-wrong-claim
506
+ supports [
507
+ "c1"
508
+ "c2"
509
+ ] {}
510
+ source id "e3"
511
+ line 3
512
+ status directly-supports
513
+ supports [
514
+ "c1"
515
+ ] {}
516
+ ]
517
+ outcomes [
518
+ outcome id "q1"
519
+ type ebsr
520
+ dimension character
521
+ subject "Mara"
522
+ standard rl-1
523
+ focus "c1"
524
+ stem "Which of these inferences about Mara is supported by the passage?"
525
+ stem-b "Which sentence(s) from the passage best support your answer in Part A?" {}
526
+ outcome id "q2"
527
+ type short-text
528
+ dimension character
529
+ subject "Mara"
530
+ standard rl-1
531
+ focus "c1"
532
+ stem "What inference can be made about Mara? Explain using key details from the passage to support your answer."
533
+ rubric [
534
+ band score 2
535
+ descriptor "Valid inference with specific evidence." {}
536
+ band score 1
537
+ descriptor "Partial inference or weak evidence." {}
538
+ band score 0
539
+ descriptor "No valid inference or no evidence." {}
540
+ ] {}
541
+ ]
542
+ {}..
543
+ </code></pre>
544
+ </section>
545
+ </section>
546
+ </article>
547
+ <footer>
548
+ Written in <a href="https://spec-md.com" target="_blank">Spec Markdown</a>.</footer>
549
+ <input hidden class="spec-sidebar-toggle" type="checkbox" id="spec-sidebar-toggle" aria-hidden /><label for="spec-sidebar-toggle" aria-hidden><div class="spec-sidebar-button">&#x2630;</div></label>
550
+ <div class="spec-sidebar" aria-hidden>
551
+ <div class="spec-toc">
552
+ <div class="title"><a href="#">L0175 Vocabulary</a></div>
553
+ <ol><li id="_sidebar_1"><a href="#sec-Authoring-shape"><span class="spec-secid">1</span>Authoring shape</a></li>
554
+ <li id="_sidebar_2"><a href="#sec-Function-reference"><span class="spec-secid">2</span>Function reference</a>
555
+ <input hidden class="toggle" type="checkbox" id="_toggle_2" /><label for="_toggle_2"></label>
556
+ <ol>
557
+ <li id="_sidebar_2.1"><a href="#sec-Structural-forms"><span class="spec-secid">2.1</span>Structural forms</a></li>
558
+ <li id="_sidebar_2.2"><a href="#sec-Identity-references"><span class="spec-secid">2.2</span>Identity &amp; references</a></li>
559
+ <li id="_sidebar_2.3"><a href="#sec-Claim-content"><span class="spec-secid">2.3</span>Claim content</a></li>
560
+ <li id="_sidebar_2.4"><a href="#sec-Evidence-content"><span class="spec-secid">2.4</span>Evidence content</a></li>
561
+ <li id="_sidebar_2.5"><a href="#sec-Outcome-stem-control"><span class="spec-secid">2.5</span>Outcome &amp; stem control</a></li>
562
+ <li id="_sidebar_2.6"><a href="#sec-Rubric-band"><span class="spec-secid">2.6</span>Rubric band</a></li>
563
+ <li id="_sidebar_2.7"><a href="#sec-Enumerations"><span class="spec-secid">2.7</span>Enumerations</a></li>
564
+ <li id="_sidebar_2.8"><a href="#sec-How-composition-uses-the-vocabulary"><span class="spec-secid">2.8</span>How composition uses the vocabulary</a></li>
565
+ <li id="_sidebar_2.9"><a href="#sec-Example"><span class="spec-secid">2.9</span>Example</a></li>
566
+ </ol>
567
+ </li>
568
+ </ol>
569
+ </div>
570
+ </div>
571
+ </body>
572
+ </html>