{"atom":"regression/mop-metamodel","family":"regression","slug":"mop-metamodel","header":{"atom":"regression/mop-metamodel","kind":"whole-program — a minimal repro, not yet reduced to an atom","source":"curated"},"axes":null,"cols":null,"engines":["rakudo-2026.07","rakupp-3.14.0"],"kinds":["ref","pp"],"defFrom":"rakupp:t/regression/mop-metamodel.raku","counts":{"a":0,"f":0,"d":0,"c":0,"r":1,"n":0},"files":["atoms/regression/mop-metamodel.grid"],"records":[["0001","","# Regression: Meta-Object Protocol (.^ introspection) coverage.\n#   - Attribute meta-objects: get_value / set_value (read/write a slot on an\n#     instance through the meta-object — what marshallers like JSON::Marshal drive)\n#   - .^ver / .^auth / .^api, .^attribute_table\n#   - .^compose (no-op returning the type), .^set_name\n#   - Attribute.new + .^add_attribute (dynamic class construction)\n#   - .^declares_method (local vs inherited), .^find_method_qualified\n# Contract: exit 0 + last line PASS.\nmy @fail;\n\nclass Animal { has $.legs is rw; method speak() { 'generic' } }\nclass Dog:ver<1.2.3>:auth<zef:me> is Animal { has $.name is rw; method speak() { 'woof' } }\nmy $d = Dog.new(name => 'Rex', legs => 4);\n\n# Attribute get_value / set_value\nmy $name-attr = Dog.^attributes.first(*.name eq '$!name');\n@fail.push('attr-get') unless $name-attr.get_value($d) eq 'Rex';\n$name-attr.set_value($d, 'Fido');\n@fail.push('attr-set') unless $d.name eq 'Fido';\n\n# ver / auth\n@fail.push(\"ver ({Dog.^ver})\") unless Dog.^ver eq v1.2.3;\n@fail.push('auth') unless Dog.^auth eq 'zef:me';\n\n# attribute_table\n@fail.push('attr-table') unless Dog.^attribute_table{'$!name'}.name eq '$!name';\n\n# compose is a no-op returning the type; declares_method local vs inherited\n@fail.push('compose') unless Dog.^compose === Dog;\n@fail.push('declares-local')   unless Dog.^declares_method('speak');\n@fail.push('declares-inherit') if     Dog.^declares_method('legs');   # accessor is inherited\n@fail.push('find-qualified')   unless Dog.^find_method_qualified(Animal, 'speak').defined;\n\n# Attribute.new + add_attribute\nclass Empty { }\nEmpty.^add_attribute(Attribute.new(name => '$!tag', type => Str));\n@fail.push('add-attribute') unless Empty.^attributes.first(*.name eq '$!tag').defined;\n\n# .^methods / .^mro / .^parents still hold\n@fail.push('methods') unless Dog.^methods.grep(*.name eq 'speak').elems >= 1;\n@fail.push('mro')     unless Dog.^mro.map(*.^name).join(',') eq 'Dog,Animal,Any,Mu';\n\nif @fail { note \"FAILED: @fail[]\"; say 'FAIL' } else { say 'PASS' }","output PASS","r",["exit 1","PASS"],{"v":"disputed","w":"the reference implementation does not satisfy the program's own contract here (exit 0 with a last line of PASS) — it needs modules that are not installed, or exercises something only one engine implements; there is no reference observation to rule against","d":"2026-08-14 against rakudo-2026.07"},[["budget","20s"]]]]}