From e33bc6606b7df3fa453d757c60e2873a1ff3b04f Mon Sep 17 00:00:00 2001 From: Eric Willigers Date: Thu, 25 Jun 2026 09:09:48 +1000 Subject: [PATCH] ownership.json [no important files changed] --- bin/check-accretive | 91 +++++-------------- .../.meta/ownership.json | 8 ++ .../backyard-birdcount/.meta/ownership.json | 9 ++ .../backyard-birdwatcher/.meta/ownership.json | 10 ++ .../belgian-boxcars/.meta/ownership.json | 8 ++ .../bering-bearings/.meta/ownership.json | 5 + .../boardwalk-games/.meta/ownership.json | 9 ++ .../boatswains-bilge/.meta/ownership.json | 4 + .../bosuns-briefing/.meta/ownership.json | 9 ++ .../boutique-bookkeeping/.meta/ownership.json | 10 ++ .../bunting-bonanza/.meta/ownership.json | 9 ++ .../cargo-shuffle/.meta/ownership.json | 8 ++ .../cars-assemble/.meta/ownership.json | 8 ++ .../channel-chatter/.meta/ownership.json | 9 ++ .../character-study/.meta/ownership.json | 8 ++ .../.meta/ownership.json | 9 ++ .../currency-conversion/.meta/ownership.json | 12 +++ .../dragons-descendants/.meta/ownership.json | 10 ++ .../factory-failsafe/.meta/ownership.json | 9 ++ .../ferry-schedule/.meta/ownership.json | 9 ++ .../garden-gathering/.meta/ownership.json | 10 ++ .../.meta/ownership.json | 8 ++ .../joiners-journey/.meta/ownership.json | 9 ++ .../lap-leaderboard/.meta/ownership.json | 9 ++ .../lasagna-luminary/.meta/ownership.json | 9 ++ .../concept/lasagna/.meta/ownership.json | 8 ++ .../ledger-lookout/.meta/ownership.json | 8 ++ .../librarians-ledger/.meta/ownership.json | 8 ++ .../lighthouse-logbook/.meta/ownership.json | 10 ++ .../concept/log-levels/.meta/ownership.json | 7 ++ .../concept/mixed-juices/.meta/ownership.json | 9 ++ .../mixtape-maker/.meta/ownership.json | 9 ++ .../mosaic-making/.meta/ownership.json | 10 ++ .../mosaic-mischief/.meta/ownership.json | 11 +++ .../passphrase-patrol/.meta/ownership.json | 8 ++ .../concept/pirates-path/.meta/ownership.json | 9 ++ .../concept/poetry-club/.meta/ownership.json | 8 ++ .../pursers-pantry/.meta/ownership.json | 9 ++ .../quayside-crew/.meta/ownership.json | 10 ++ .../role-playing-game/.meta/ownership.json | 8 ++ .../rpn-calculator/.meta/ownership.json | 10 ++ .../concept/secrets/.meta/ownership.json | 8 ++ .../signal-stencils/.meta/ownership.json | 4 + .../signalers-satchel/.meta/ownership.json | 9 ++ .../telegraphers-tape/.meta/ownership.json | 9 ++ .../tellers-triage/.meta/ownership.json | 8 ++ .../valentines-day/.meta/ownership.json | 9 ++ .../vltava-weather-watch/.meta/ownership.json | 9 ++ 48 files changed, 431 insertions(+), 66 deletions(-) create mode 100644 exercises/concept/annalyns-infiltration/.meta/ownership.json create mode 100644 exercises/concept/backyard-birdcount/.meta/ownership.json create mode 100644 exercises/concept/backyard-birdwatcher/.meta/ownership.json create mode 100644 exercises/concept/belgian-boxcars/.meta/ownership.json create mode 100644 exercises/concept/bering-bearings/.meta/ownership.json create mode 100644 exercises/concept/boardwalk-games/.meta/ownership.json create mode 100644 exercises/concept/boatswains-bilge/.meta/ownership.json create mode 100644 exercises/concept/bosuns-briefing/.meta/ownership.json create mode 100644 exercises/concept/boutique-bookkeeping/.meta/ownership.json create mode 100644 exercises/concept/bunting-bonanza/.meta/ownership.json create mode 100644 exercises/concept/cargo-shuffle/.meta/ownership.json create mode 100644 exercises/concept/cars-assemble/.meta/ownership.json create mode 100644 exercises/concept/channel-chatter/.meta/ownership.json create mode 100644 exercises/concept/character-study/.meta/ownership.json create mode 100644 exercises/concept/coordinate-choreography/.meta/ownership.json create mode 100644 exercises/concept/currency-conversion/.meta/ownership.json create mode 100644 exercises/concept/dragons-descendants/.meta/ownership.json create mode 100644 exercises/concept/factory-failsafe/.meta/ownership.json create mode 100644 exercises/concept/ferry-schedule/.meta/ownership.json create mode 100644 exercises/concept/garden-gathering/.meta/ownership.json create mode 100644 exercises/concept/high-school-sweetheart/.meta/ownership.json create mode 100644 exercises/concept/joiners-journey/.meta/ownership.json create mode 100644 exercises/concept/lap-leaderboard/.meta/ownership.json create mode 100644 exercises/concept/lasagna-luminary/.meta/ownership.json create mode 100644 exercises/concept/lasagna/.meta/ownership.json create mode 100644 exercises/concept/ledger-lookout/.meta/ownership.json create mode 100644 exercises/concept/librarians-ledger/.meta/ownership.json create mode 100644 exercises/concept/lighthouse-logbook/.meta/ownership.json create mode 100644 exercises/concept/log-levels/.meta/ownership.json create mode 100644 exercises/concept/mixed-juices/.meta/ownership.json create mode 100644 exercises/concept/mixtape-maker/.meta/ownership.json create mode 100644 exercises/concept/mosaic-making/.meta/ownership.json create mode 100644 exercises/concept/mosaic-mischief/.meta/ownership.json create mode 100644 exercises/concept/passphrase-patrol/.meta/ownership.json create mode 100644 exercises/concept/pirates-path/.meta/ownership.json create mode 100644 exercises/concept/poetry-club/.meta/ownership.json create mode 100644 exercises/concept/pursers-pantry/.meta/ownership.json create mode 100644 exercises/concept/quayside-crew/.meta/ownership.json create mode 100644 exercises/concept/role-playing-game/.meta/ownership.json create mode 100644 exercises/concept/rpn-calculator/.meta/ownership.json create mode 100644 exercises/concept/secrets/.meta/ownership.json create mode 100644 exercises/concept/signal-stencils/.meta/ownership.json create mode 100644 exercises/concept/signalers-satchel/.meta/ownership.json create mode 100644 exercises/concept/telegraphers-tape/.meta/ownership.json create mode 100644 exercises/concept/tellers-triage/.meta/ownership.json create mode 100644 exercises/concept/valentines-day/.meta/ownership.json create mode 100644 exercises/concept/vltava-weather-watch/.meta/ownership.json diff --git a/bin/check-accretive b/bin/check-accretive index b6b27ae0..c1add990 100755 --- a/bin/check-accretive +++ b/bin/check-accretive @@ -31,68 +31,26 @@ FACTOR = os.environ.get("FACTOR", "factor") TOOLS = os.path.join(REPO, "lib/exercism-tools") CONCEPT = os.path.join(REPO, "exercises/concept") -# Intended task ownership: word -> task number it is implemented in, per the -# instructions. Only body-bearing words are listed (these are what we re-stub); -# tuples/constants/symbols are left intact so Mode-B runs always compile and we -# isolate runtime ordering. Keep this in sync with the exercises' instructions. -MAPS = { - "annalyns-infiltration": {"can-do-fast-attack":1,"can-spy":2,"can-signal-prisoner":3,"can-free-prisoner":4}, - "backyard-birdcount": {"today":1,"increment-day-count":2,"has-day-without-birds?":3,"total":4,"busy-days":5}, - "backyard-birdwatcher": {"today":1,"increment-todays-count":2,"has-day-without-birds?":3,"count-for-first-days":4,"busy-days":5,"pad-missing-days":6}, - "belgian-boxcars": {"couple":1,"peek-couplings":2,"split-at-junctions":3,"coalesce-cargo":4}, - "boardwalk-games": {"roll-die":1,"pick-prize":2,"shuffle-deck":3,"deal-hand":4,"play-seeded":5}, - "bosuns-briefing": {"greeting":1,"crew-line":2,"closing":3,"roster":4,"briefing":5}, - "boutique-bookkeeping": {"sort-by-price":1,"with-missing-price":2,"expensive-items":3,"cheapest-item":4,"total-price":5,"format-price-tag":6}, - "bunting-bonanza": {"alphabet-bunting":1,"counting-bunting":2,"stripe-bunting":3,"marker-bunting":4,"valley-bunting":5}, - "cargo-shuffle": {"swap-crates":1,"clear-spill":2,"peek-under":3,"tidy-deck":4}, - "cars-assemble": {"production-status":1,"success-rate":2,"production-rate-per-hour":3,"working-items-per-minute":4}, - "channel-chatter": {"hear-out":1,"count-messages":2,"echo-back":3,"broadcast":4,"capture":5}, - "character-study": {"compare-chars":1,"size-of-char":2,"change-size-of-char":3,"type-of-char":4}, - "coordinate-choreography": {"translate-2d":1,"scale-2d":2,"compose-transformations":3,"apply-transformation":4,"transform-points":5}, - "currency-conversion": {"exchange-money":1,"get-change":2,"value-of-bills":3,"number-of-bills":4,"leftover-of-bills":5,"exchangeable-value":6,"safe-change":7,"cap-spend":8}, - "dragons-descendants": {"":1,"":2,"":3,"":4,"age-dragon":5}, - "factory-failsafe": {"check-humidity":2,"check-temperature":3,"monitor":4,"monitor-batch":5}, - "ferry-schedule": {"make-date":1,"weekday-name":2,"leap?":3,"month-length":4,"add-days":5}, - "garden-gathering": {"open-garden":1,"list-registrations":1,"register":2,"release":3,"get-registration":4,"find-by-name":5}, - "high-school-sweetheart": {"cleanupname":1,"firstletter":2,"initial":3,"couple":4}, - "joiners-journey": {"with-kerf":1,"kerf-and-finish":2,"cut-card":3,"per-piece":4,"compare-bolts":5}, - "lap-leaderboard": {"assign-bibs":1,"lane-labels":2,"tag-racers":3,"record-finishes":4,"lap-bells":5}, - "lasagna": {"preparation-time":2,"remaining-time":3,"total-working-time":4}, - "lasagna-luminary": {"cooking-status":1,"preparation-time":2,"quantities":3,"add-secret-ingredient":4,"scale-recipe":5}, - "ledger-lookout": {"valid-amount?":1,"dollar-amounts":2,"percentages":3,"flagged?":4}, - "librarians-ledger": {"protected-balance":1,"running-balance":2,"least-balance-so-far":3,"halve-until":4}, - "lighthouse-logbook": {"empty-log":1,"sight":2,"seen?":3,"forget-sighting":4,"unique-count":5,"reachable":6}, - "log-levels": {"message":1,"log-level":2,"reformat":3}, - "mixed-juices": {"time-to-mix-juice":1,"wedges-from-lime":2,"limes-to-cut":2,"order-times":3,"remaining-orders":4}, - "mixtape-maker": {"count-combinations":1,"count-permutations":2,"list-combinations":3,"list-permutations":4,"combinations-summing-to":5}, - "mosaic-making": {"tile-strip":1,"row-of-three":2,"combine-rows":3,"mirror-row":4,"tile-position":5,"has-colour?":6}, - "mosaic-mischief": {"fresh-mosaic":1,"place-tile":2,"chip-tile":3,"recolour-tile":4,"snapshot-mosaic":5,"stash-tile":6,"return-tile":7}, - "passphrase-patrol": {"valid-badge?":1,"badge-codes":2,"digit-count":3,"redact":4}, - "pirates-path": {"tide-queue":1,"coves-reachable":2,"hop-count":3,"gold-count":4,"treasure-route":5}, - "poetry-club": {"new-club":1,"collaborate":2,"circle-of":3,"same-circle?":4}, - "pursers-pantry": {"create-inventory":1,"add-items":2,"decrement-items":3,"remove-item":4,"list-inventory":5}, - "quayside-crew": {"weigh-crate":1,"weigh-all":2,"":3,"hoist-crate":4,"crane-tonnage":5,"load-cargo":6}, - "role-playing-game": {"introduce":2,"revive":3,"take-damage":4}, - "rpn-calculator": {"add-op":1,"multiply-op":2,"apply-op":3,"evaluate":4,"evaluate-named":5,"divide-op":6}, - "secrets": {"shift-back":1,"set-bits":2,"flip-bits":3,"clear-bits":4}, - "signalers-satchel": {"quote-value":1,"flag-body":2,"split-flag":3,"triangulate":4,"triangle-stats":5}, - "telegraphers-tape": {"":1,"stream-read1":3,"stream-element-type":4,"dispose*":5}, - "tellers-triage": {"new-queue":1,"join-queue":2,"next-name":3,"serve-all":4}, - "valentines-day": {"rate-restaurant":1,"rate-movie":2,"rate-walk":3,"rate-activity":4,"approval-counts":5}, - "vltava-weather-watch": {"read-readings":1,"latest-reading":2,"log-text":3,"record-reading":4,"rewrite-log":5}, -} - -# Exercises whose Mode-B prefix run we cannot synthesize automatically (MACRO: -# bodies cannot be re-stubbed with a throw, and exercises without TASK: markers -# have no prefixes). Mode A is still checked for them. -MODEB_SKIP = {"signal-stencils", "bering-bearings", "boatswains-bilge"} - -# The shipped stub does not make the test file compile, but the missing -# definition is created in task 1, so the exercise is still accretive by the -# implement-first-K-tasks rule (a student who does task 1 sees task 1 pass). -ACCRETIVE_VIA_TASK1 = {"lasagna", "role-playing-game", "factory-failsafe", - "dragons-descendants", "bering-bearings", - "telegraphers-tape"} +# Per-exercise data lives in each exercise's .meta/ownership.json: +# +# "tasks": word -> task number it is implemented in, per the instructions. +# Only body-bearing words are listed (these are what we re-stub); +# tuples/constants/symbols are left intact so Mode-B runs always compile and +# we isolate runtime ordering. Keep this in sync with the instructions. +# "manual-ordering-check": true when the Mode-B prefix run cannot be +# synthesized automatically (MACRO: bodies cannot be re-stubbed with a +# throw, exercises without TASK: markers have no prefixes); checked by hand +# instead. Mode A is still checked. +# "requires-task1-to-compile": true when the shipped stub does not make the +# test file compile, but the missing definition is created in task 1, so the +# exercise is still accretive by the implement-first-K-tasks rule (a student +# who does task 1 sees task 1 pass). +def ownership(slug): + path = os.path.join(CONCEPT, slug, ".meta/ownership.json") + if not os.path.exists(path): + return {} + with open(path) as f: + return json.load(f) DEF_STARTERS = {":","::","M:","M::","TYPED:","TYPED::","MEMO:","MEMO::"} @@ -210,7 +168,7 @@ def modeb_violations(slug): """Return dict K -> list of early task numbers whose tests fail, or {} if clean.""" src = os.path.join(CONCEPT, slug) cfg = json.load(open(os.path.join(src, ".meta/config.json"))) - wmap = MAPS[slug] + wmap = ownership(slug)["tasks"] N = max(wmap.values()) sols, exes = cfg["files"]["solution"], cfg["files"].get("exemplar") or cfg["files"]["example"] test_base = os.path.basename(cfg["files"]["test"][0]) @@ -242,6 +200,7 @@ def main(): for slug in slugs: if not os.path.isdir(os.path.join(CONCEPT, slug)): continue + own = ownership(slug) compiles = stub_compiles(slug) notes = [] verdict = "ACCRETIVE" @@ -252,15 +211,15 @@ def main(): verdict = "STRUCTURAL" notes.append("tests are not grouped by TASK: marker, so no prefix of tasks can pass on its own") elif not compiles: - if slug in ACCRETIVE_VIA_TASK1: + if own.get("requires-task1-to-compile"): notes.append("stub omits a definition that task 1 creates; accretive by the implement-first-K rule") else: verdict = "MODE-A" notes.append("stub does not pre-declare everything the test file needs (a " "tuple/slot/constant/symbol/word is introduced by a task later than task 1)") - if slug in MODEB_SKIP: + if own.get("manual-ordering-check"): notes.append("Mode-B prefix run skipped (macros / no TASK: markers); checked by hand") - elif slug in MAPS: + elif own.get("tasks"): bad = modeb_violations(slug) if bad: verdict = "MODE-A+B" if verdict == "MODE-A" else "MODE-B" diff --git a/exercises/concept/annalyns-infiltration/.meta/ownership.json b/exercises/concept/annalyns-infiltration/.meta/ownership.json new file mode 100644 index 00000000..fa6d4d1b --- /dev/null +++ b/exercises/concept/annalyns-infiltration/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "can-do-fast-attack": 1, + "can-spy": 2, + "can-signal-prisoner": 3, + "can-free-prisoner": 4 + } +} diff --git a/exercises/concept/backyard-birdcount/.meta/ownership.json b/exercises/concept/backyard-birdcount/.meta/ownership.json new file mode 100644 index 00000000..e7db440d --- /dev/null +++ b/exercises/concept/backyard-birdcount/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "today": 1, + "increment-day-count": 2, + "has-day-without-birds?": 3, + "total": 4, + "busy-days": 5 + } +} diff --git a/exercises/concept/backyard-birdwatcher/.meta/ownership.json b/exercises/concept/backyard-birdwatcher/.meta/ownership.json new file mode 100644 index 00000000..7943e113 --- /dev/null +++ b/exercises/concept/backyard-birdwatcher/.meta/ownership.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "today": 1, + "increment-todays-count": 2, + "has-day-without-birds?": 3, + "count-for-first-days": 4, + "busy-days": 5, + "pad-missing-days": 6 + } +} diff --git a/exercises/concept/belgian-boxcars/.meta/ownership.json b/exercises/concept/belgian-boxcars/.meta/ownership.json new file mode 100644 index 00000000..9c8df799 --- /dev/null +++ b/exercises/concept/belgian-boxcars/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "couple": 1, + "peek-couplings": 2, + "split-at-junctions": 3, + "coalesce-cargo": 4 + } +} diff --git a/exercises/concept/bering-bearings/.meta/ownership.json b/exercises/concept/bering-bearings/.meta/ownership.json new file mode 100644 index 00000000..4571d440 --- /dev/null +++ b/exercises/concept/bering-bearings/.meta/ownership.json @@ -0,0 +1,5 @@ +{ + "tasks": {}, + "manual-ordering-check": true, + "requires-task1-to-compile": true +} diff --git a/exercises/concept/boardwalk-games/.meta/ownership.json b/exercises/concept/boardwalk-games/.meta/ownership.json new file mode 100644 index 00000000..517b420a --- /dev/null +++ b/exercises/concept/boardwalk-games/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "roll-die": 1, + "pick-prize": 2, + "shuffle-deck": 3, + "deal-hand": 4, + "play-seeded": 5 + } +} diff --git a/exercises/concept/boatswains-bilge/.meta/ownership.json b/exercises/concept/boatswains-bilge/.meta/ownership.json new file mode 100644 index 00000000..0f80a288 --- /dev/null +++ b/exercises/concept/boatswains-bilge/.meta/ownership.json @@ -0,0 +1,4 @@ +{ + "tasks": {}, + "manual-ordering-check": true +} diff --git a/exercises/concept/bosuns-briefing/.meta/ownership.json b/exercises/concept/bosuns-briefing/.meta/ownership.json new file mode 100644 index 00000000..e39b4680 --- /dev/null +++ b/exercises/concept/bosuns-briefing/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "greeting": 1, + "crew-line": 2, + "closing": 3, + "roster": 4, + "briefing": 5 + } +} diff --git a/exercises/concept/boutique-bookkeeping/.meta/ownership.json b/exercises/concept/boutique-bookkeeping/.meta/ownership.json new file mode 100644 index 00000000..17ce3246 --- /dev/null +++ b/exercises/concept/boutique-bookkeeping/.meta/ownership.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "sort-by-price": 1, + "with-missing-price": 2, + "expensive-items": 3, + "cheapest-item": 4, + "total-price": 5, + "format-price-tag": 6 + } +} diff --git a/exercises/concept/bunting-bonanza/.meta/ownership.json b/exercises/concept/bunting-bonanza/.meta/ownership.json new file mode 100644 index 00000000..da2e8124 --- /dev/null +++ b/exercises/concept/bunting-bonanza/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "alphabet-bunting": 1, + "counting-bunting": 2, + "stripe-bunting": 3, + "marker-bunting": 4, + "valley-bunting": 5 + } +} diff --git a/exercises/concept/cargo-shuffle/.meta/ownership.json b/exercises/concept/cargo-shuffle/.meta/ownership.json new file mode 100644 index 00000000..9a857b66 --- /dev/null +++ b/exercises/concept/cargo-shuffle/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "swap-crates": 1, + "clear-spill": 2, + "peek-under": 3, + "tidy-deck": 4 + } +} diff --git a/exercises/concept/cars-assemble/.meta/ownership.json b/exercises/concept/cars-assemble/.meta/ownership.json new file mode 100644 index 00000000..b130719a --- /dev/null +++ b/exercises/concept/cars-assemble/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "production-status": 1, + "success-rate": 2, + "production-rate-per-hour": 3, + "working-items-per-minute": 4 + } +} diff --git a/exercises/concept/channel-chatter/.meta/ownership.json b/exercises/concept/channel-chatter/.meta/ownership.json new file mode 100644 index 00000000..96b2b156 --- /dev/null +++ b/exercises/concept/channel-chatter/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "hear-out": 1, + "count-messages": 2, + "echo-back": 3, + "broadcast": 4, + "capture": 5 + } +} diff --git a/exercises/concept/character-study/.meta/ownership.json b/exercises/concept/character-study/.meta/ownership.json new file mode 100644 index 00000000..8e7c794a --- /dev/null +++ b/exercises/concept/character-study/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "compare-chars": 1, + "size-of-char": 2, + "change-size-of-char": 3, + "type-of-char": 4 + } +} diff --git a/exercises/concept/coordinate-choreography/.meta/ownership.json b/exercises/concept/coordinate-choreography/.meta/ownership.json new file mode 100644 index 00000000..1fa8ab6b --- /dev/null +++ b/exercises/concept/coordinate-choreography/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "translate-2d": 1, + "scale-2d": 2, + "compose-transformations": 3, + "apply-transformation": 4, + "transform-points": 5 + } +} diff --git a/exercises/concept/currency-conversion/.meta/ownership.json b/exercises/concept/currency-conversion/.meta/ownership.json new file mode 100644 index 00000000..bedcac93 --- /dev/null +++ b/exercises/concept/currency-conversion/.meta/ownership.json @@ -0,0 +1,12 @@ +{ + "tasks": { + "exchange-money": 1, + "get-change": 2, + "value-of-bills": 3, + "number-of-bills": 4, + "leftover-of-bills": 5, + "exchangeable-value": 6, + "safe-change": 7, + "cap-spend": 8 + } +} diff --git a/exercises/concept/dragons-descendants/.meta/ownership.json b/exercises/concept/dragons-descendants/.meta/ownership.json new file mode 100644 index 00000000..d2db46d4 --- /dev/null +++ b/exercises/concept/dragons-descendants/.meta/ownership.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "": 1, + "": 2, + "": 3, + "": 4, + "age-dragon": 5 + }, + "requires-task1-to-compile": true +} diff --git a/exercises/concept/factory-failsafe/.meta/ownership.json b/exercises/concept/factory-failsafe/.meta/ownership.json new file mode 100644 index 00000000..d9e70e72 --- /dev/null +++ b/exercises/concept/factory-failsafe/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "check-humidity": 2, + "check-temperature": 3, + "monitor": 4, + "monitor-batch": 5 + }, + "requires-task1-to-compile": true +} diff --git a/exercises/concept/ferry-schedule/.meta/ownership.json b/exercises/concept/ferry-schedule/.meta/ownership.json new file mode 100644 index 00000000..11ca324b --- /dev/null +++ b/exercises/concept/ferry-schedule/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "make-date": 1, + "weekday-name": 2, + "leap?": 3, + "month-length": 4, + "add-days": 5 + } +} diff --git a/exercises/concept/garden-gathering/.meta/ownership.json b/exercises/concept/garden-gathering/.meta/ownership.json new file mode 100644 index 00000000..a6a5a3d1 --- /dev/null +++ b/exercises/concept/garden-gathering/.meta/ownership.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "open-garden": 1, + "list-registrations": 1, + "register": 2, + "release": 3, + "get-registration": 4, + "find-by-name": 5 + } +} diff --git a/exercises/concept/high-school-sweetheart/.meta/ownership.json b/exercises/concept/high-school-sweetheart/.meta/ownership.json new file mode 100644 index 00000000..a2fbe2de --- /dev/null +++ b/exercises/concept/high-school-sweetheart/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "cleanupname": 1, + "firstletter": 2, + "initial": 3, + "couple": 4 + } +} diff --git a/exercises/concept/joiners-journey/.meta/ownership.json b/exercises/concept/joiners-journey/.meta/ownership.json new file mode 100644 index 00000000..606b84b8 --- /dev/null +++ b/exercises/concept/joiners-journey/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "with-kerf": 1, + "kerf-and-finish": 2, + "cut-card": 3, + "per-piece": 4, + "compare-bolts": 5 + } +} diff --git a/exercises/concept/lap-leaderboard/.meta/ownership.json b/exercises/concept/lap-leaderboard/.meta/ownership.json new file mode 100644 index 00000000..00cf89b0 --- /dev/null +++ b/exercises/concept/lap-leaderboard/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "assign-bibs": 1, + "lane-labels": 2, + "tag-racers": 3, + "record-finishes": 4, + "lap-bells": 5 + } +} diff --git a/exercises/concept/lasagna-luminary/.meta/ownership.json b/exercises/concept/lasagna-luminary/.meta/ownership.json new file mode 100644 index 00000000..b7615b1a --- /dev/null +++ b/exercises/concept/lasagna-luminary/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "cooking-status": 1, + "preparation-time": 2, + "quantities": 3, + "add-secret-ingredient": 4, + "scale-recipe": 5 + } +} diff --git a/exercises/concept/lasagna/.meta/ownership.json b/exercises/concept/lasagna/.meta/ownership.json new file mode 100644 index 00000000..82c3d696 --- /dev/null +++ b/exercises/concept/lasagna/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "preparation-time": 2, + "remaining-time": 3, + "total-working-time": 4 + }, + "requires-task1-to-compile": true +} diff --git a/exercises/concept/ledger-lookout/.meta/ownership.json b/exercises/concept/ledger-lookout/.meta/ownership.json new file mode 100644 index 00000000..2149323e --- /dev/null +++ b/exercises/concept/ledger-lookout/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "valid-amount?": 1, + "dollar-amounts": 2, + "percentages": 3, + "flagged?": 4 + } +} diff --git a/exercises/concept/librarians-ledger/.meta/ownership.json b/exercises/concept/librarians-ledger/.meta/ownership.json new file mode 100644 index 00000000..f3546ca1 --- /dev/null +++ b/exercises/concept/librarians-ledger/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "protected-balance": 1, + "running-balance": 2, + "least-balance-so-far": 3, + "halve-until": 4 + } +} diff --git a/exercises/concept/lighthouse-logbook/.meta/ownership.json b/exercises/concept/lighthouse-logbook/.meta/ownership.json new file mode 100644 index 00000000..f40b82f3 --- /dev/null +++ b/exercises/concept/lighthouse-logbook/.meta/ownership.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "empty-log": 1, + "sight": 2, + "seen?": 3, + "forget-sighting": 4, + "unique-count": 5, + "reachable": 6 + } +} diff --git a/exercises/concept/log-levels/.meta/ownership.json b/exercises/concept/log-levels/.meta/ownership.json new file mode 100644 index 00000000..38ae825f --- /dev/null +++ b/exercises/concept/log-levels/.meta/ownership.json @@ -0,0 +1,7 @@ +{ + "tasks": { + "message": 1, + "log-level": 2, + "reformat": 3 + } +} diff --git a/exercises/concept/mixed-juices/.meta/ownership.json b/exercises/concept/mixed-juices/.meta/ownership.json new file mode 100644 index 00000000..1806050e --- /dev/null +++ b/exercises/concept/mixed-juices/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "time-to-mix-juice": 1, + "wedges-from-lime": 2, + "limes-to-cut": 2, + "order-times": 3, + "remaining-orders": 4 + } +} diff --git a/exercises/concept/mixtape-maker/.meta/ownership.json b/exercises/concept/mixtape-maker/.meta/ownership.json new file mode 100644 index 00000000..880d1d9f --- /dev/null +++ b/exercises/concept/mixtape-maker/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "count-combinations": 1, + "count-permutations": 2, + "list-combinations": 3, + "list-permutations": 4, + "combinations-summing-to": 5 + } +} diff --git a/exercises/concept/mosaic-making/.meta/ownership.json b/exercises/concept/mosaic-making/.meta/ownership.json new file mode 100644 index 00000000..8c9a8bcf --- /dev/null +++ b/exercises/concept/mosaic-making/.meta/ownership.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "tile-strip": 1, + "row-of-three": 2, + "combine-rows": 3, + "mirror-row": 4, + "tile-position": 5, + "has-colour?": 6 + } +} diff --git a/exercises/concept/mosaic-mischief/.meta/ownership.json b/exercises/concept/mosaic-mischief/.meta/ownership.json new file mode 100644 index 00000000..de361b18 --- /dev/null +++ b/exercises/concept/mosaic-mischief/.meta/ownership.json @@ -0,0 +1,11 @@ +{ + "tasks": { + "fresh-mosaic": 1, + "place-tile": 2, + "chip-tile": 3, + "recolour-tile": 4, + "snapshot-mosaic": 5, + "stash-tile": 6, + "return-tile": 7 + } +} diff --git a/exercises/concept/passphrase-patrol/.meta/ownership.json b/exercises/concept/passphrase-patrol/.meta/ownership.json new file mode 100644 index 00000000..c05ba709 --- /dev/null +++ b/exercises/concept/passphrase-patrol/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "valid-badge?": 1, + "badge-codes": 2, + "digit-count": 3, + "redact": 4 + } +} diff --git a/exercises/concept/pirates-path/.meta/ownership.json b/exercises/concept/pirates-path/.meta/ownership.json new file mode 100644 index 00000000..5813cc2d --- /dev/null +++ b/exercises/concept/pirates-path/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "tide-queue": 1, + "coves-reachable": 2, + "hop-count": 3, + "gold-count": 4, + "treasure-route": 5 + } +} diff --git a/exercises/concept/poetry-club/.meta/ownership.json b/exercises/concept/poetry-club/.meta/ownership.json new file mode 100644 index 00000000..fbe07e46 --- /dev/null +++ b/exercises/concept/poetry-club/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "new-club": 1, + "collaborate": 2, + "circle-of": 3, + "same-circle?": 4 + } +} diff --git a/exercises/concept/pursers-pantry/.meta/ownership.json b/exercises/concept/pursers-pantry/.meta/ownership.json new file mode 100644 index 00000000..4895eb02 --- /dev/null +++ b/exercises/concept/pursers-pantry/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "create-inventory": 1, + "add-items": 2, + "decrement-items": 3, + "remove-item": 4, + "list-inventory": 5 + } +} diff --git a/exercises/concept/quayside-crew/.meta/ownership.json b/exercises/concept/quayside-crew/.meta/ownership.json new file mode 100644 index 00000000..4156890f --- /dev/null +++ b/exercises/concept/quayside-crew/.meta/ownership.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "weigh-crate": 1, + "weigh-all": 2, + "": 3, + "hoist-crate": 4, + "crane-tonnage": 5, + "load-cargo": 6 + } +} diff --git a/exercises/concept/role-playing-game/.meta/ownership.json b/exercises/concept/role-playing-game/.meta/ownership.json new file mode 100644 index 00000000..b53f1d8c --- /dev/null +++ b/exercises/concept/role-playing-game/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "introduce": 2, + "revive": 3, + "take-damage": 4 + }, + "requires-task1-to-compile": true +} diff --git a/exercises/concept/rpn-calculator/.meta/ownership.json b/exercises/concept/rpn-calculator/.meta/ownership.json new file mode 100644 index 00000000..bb5c7ecd --- /dev/null +++ b/exercises/concept/rpn-calculator/.meta/ownership.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "add-op": 1, + "multiply-op": 2, + "apply-op": 3, + "evaluate": 4, + "evaluate-named": 5, + "divide-op": 6 + } +} diff --git a/exercises/concept/secrets/.meta/ownership.json b/exercises/concept/secrets/.meta/ownership.json new file mode 100644 index 00000000..62684dfe --- /dev/null +++ b/exercises/concept/secrets/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "shift-back": 1, + "set-bits": 2, + "flip-bits": 3, + "clear-bits": 4 + } +} diff --git a/exercises/concept/signal-stencils/.meta/ownership.json b/exercises/concept/signal-stencils/.meta/ownership.json new file mode 100644 index 00000000..0f80a288 --- /dev/null +++ b/exercises/concept/signal-stencils/.meta/ownership.json @@ -0,0 +1,4 @@ +{ + "tasks": {}, + "manual-ordering-check": true +} diff --git a/exercises/concept/signalers-satchel/.meta/ownership.json b/exercises/concept/signalers-satchel/.meta/ownership.json new file mode 100644 index 00000000..73fce52b --- /dev/null +++ b/exercises/concept/signalers-satchel/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "quote-value": 1, + "flag-body": 2, + "split-flag": 3, + "triangulate": 4, + "triangle-stats": 5 + } +} diff --git a/exercises/concept/telegraphers-tape/.meta/ownership.json b/exercises/concept/telegraphers-tape/.meta/ownership.json new file mode 100644 index 00000000..c98c2af6 --- /dev/null +++ b/exercises/concept/telegraphers-tape/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "": 1, + "stream-read1": 3, + "stream-element-type": 4, + "dispose*": 5 + }, + "requires-task1-to-compile": true +} diff --git a/exercises/concept/tellers-triage/.meta/ownership.json b/exercises/concept/tellers-triage/.meta/ownership.json new file mode 100644 index 00000000..d77cc7df --- /dev/null +++ b/exercises/concept/tellers-triage/.meta/ownership.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "new-queue": 1, + "join-queue": 2, + "next-name": 3, + "serve-all": 4 + } +} diff --git a/exercises/concept/valentines-day/.meta/ownership.json b/exercises/concept/valentines-day/.meta/ownership.json new file mode 100644 index 00000000..51ef2c55 --- /dev/null +++ b/exercises/concept/valentines-day/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "rate-restaurant": 1, + "rate-movie": 2, + "rate-walk": 3, + "rate-activity": 4, + "approval-counts": 5 + } +} diff --git a/exercises/concept/vltava-weather-watch/.meta/ownership.json b/exercises/concept/vltava-weather-watch/.meta/ownership.json new file mode 100644 index 00000000..88b0a237 --- /dev/null +++ b/exercises/concept/vltava-weather-watch/.meta/ownership.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "read-readings": 1, + "latest-reading": 2, + "log-text": 3, + "record-reading": 4, + "rewrite-log": 5 + } +}