{"analyzer":{"code_digest":"7106e3595fa7df9269cb43ee280f9c557659db7bda171b1f65ff5619ab54aa24","name":"archkeel-python-analyzer","version":"0.74.0"},"bindings":[],"calls":[["CALL-083cd161b4d9cc59","FACT","$40","$59","Call sorted",["builtins.sorted","$102"],["EVD-a54579840df29e64"],[],[],[],[1,false,null,"sorted","Python builtin",[],"SYM-5e29728aec775442","$99","$102","resolved",[],["builtins.sorted"]]],["CALL-0c84d7ab5f90b9e7","FACT","$40","$59","Call encode",["$107","$111"],["EVD-ae32a6716562f39e"],[],[],[],[1,false,null,"encode","$52",[],"SYM-98565702bb3be343","$108","$111","resolved",["EVD-ac6210f7ea66f63c"],["$107"]]],["CALL-0ca4df4127aa69ca","FACT","$40","$59","Call safe",["$67","shop.render.facade.safe"],["EVD-0cccbc597680df5c"],[],[],[],[1,false,null,"safe","$52",[],"SYM-785f9f9b17ce8f3c","$66","$67","resolved",["EVD-c4ae8139ca820399"],["shop.render.facade.safe"]]],["CALL-182446c0a2215637","FACT","$40","$59","Call Order.from_dict",["$80","$106"],["EVD-cb26e324deea5970"],[],[],[],[1,false,null,"Order.from_dict","attribute of imported symbol binding",[],"SYM-094cb8a1abb8f245","$103","$106","resolved",["EVD-daa05f47b32b9483"],["$80"]]],["CALL-1c953772015daea2","FACT","$40","unresolved_call","Call cls",["$80"],["EVD-5f753a04f576585b"],[],[],[],[0,false,null,"cls","lexical binding has no proven callable value",[],"SYM-f3293ef7f8441e4a","$69","$80","unresolved",[],[]]],["CALL-250f740c9757299f","FACT","$40","$59","Call _indent",["shop.render.text._indent","$90"],["EVD-d1a4e82612885bf8"],[],[],[],[1,false,null,"_indent","module-local symbol",[],"SYM-3084c7286ff5a998","$89","$90","resolved",["EVD-1c55304fac7d5d2d"],["shop.render.text._indent"]]],["CALL-270aeaf50681f9b5","FACT","$40","$56","Call path.with_suffix",["pathlib.Path.with_suffix","$98"],["EVD-bcd9058ba24a118a"],[],[],[],[1,false,null,"path.with_suffix","$39",[{"annotation":null,"definition_contexts":[],"evidence_ids":["EVD-023179c53590335c"],"id":"VALUEBIND-2c50ee89b657ab88","initializer":"path.with_suffix(f'{path.suffix}.part')","name":"partial","target_kind":"name"}],"SYM-3ddc33e5a1bedfc4","$94","$98","$55",[],["pathlib.Path.with_suffix"]]],["CALL-28be3d0e643e48cb","FACT","$40","$59","Call Order",["$64","$79"],["EVD-c10610b7a1b98b6b"],[],[],[],[1,false,{"candidates_truncated":false,"reason":"$6","status":"$55","targets":["$79"]},"Order","$52",[{"annotation":null,"definition_contexts":[],"evidence_ids":["EVD-1fb303a26434ee46"],"id":"VALUEBIND-ebc61143d6901cff","initializer":"Order(order_id=order_id, lines=(line,))","name":"order","target_kind":"name"}],"SYM-1413fc34058d59ad","$63","$64","resolved",["EVD-13b53f5e83189b76"],["$79"]]],["CALL-2a15a4f5a8d405a7","FACT","$40","$59","Call Money",["$71","$77"],["EVD-7b88e6b7b17c8a8c"],[],[],[],[1,false,{"candidates_truncated":false,"reason":"$6","status":"$55","targets":["$77"]},"Money","module-local symbol",[],"SYM-b183fc3dea9441aa","$69","$71","resolved",["EVD-809590eb3ddf92d6"],["$77"]]],["CALL-2a3395ee738e9ddc","FACT","$40","$59","Call '\\n'.join",["builtins.str.join","$90"],["EVD-baa5ebd6927240c7"],[],[],[],[1,false,null,"'\\n'.join","literal receiver of known type",[],"SYM-3084c7286ff5a998","$89","$90","resolved",[],["builtins.str.join"]]],["CALL-2b8f5b54e2d2e5a9","FACT","$40","$59","Call place_order",["$64","$67"],["EVD-57b4ddb217507dd5"],[],[],[],[1,false,null,"place_order","$52",[{"annotation":null,"definition_contexts":[{"branch":"body","evidence_ids":["EVD-735b836cead7e419"],"kind":"try"}],"evidence_ids":["EVD-14f38b04bd2f7b8d"],"id":"VALUEBIND-d101fffb5526cde6","initializer":"place_order(Path(store_dir), order_id, description, int(quantity), int(unit_price_cents))","name":"order","target_kind":"name"}],"SYM-785f9f9b17ce8f3c","$66","$67","resolved",["EVD-0d980b58b58a2c27"],["$64"]]],["CALL-2c6c25b9c187bda9","FACT","$40","$59","Call ValueError",["builtins.ValueError","$106"],["EVD-781c3d777da02b93"],[],[],[],[1,false,null,"ValueError","Python builtin",[],"SYM-094cb8a1abb8f245","$103","$106","resolved",[],["builtins.ValueError"]]],["CALL-31ac102849a30f24","FACT","$40","$59","Call OrderRepository",["$64","shop.store.OrderRepository"],["EVD-f8a2d5ed5f18af60"],[],[],[],[1,false,null,"OrderRepository","$52",[],"SYM-1413fc34058d59ad","$63","$64","resolved",[],["shop.store.OrderRepository"]]],["CALL-3b59994b4a20e51a","FACT","$40","$59","Call json.loads",["json.loads","$106"],["EVD-b6ab36b8cbc8abd2"],[],[],[],[1,false,null,"json.loads","attribute of imported module binding",[{"annotation":"OrderDocument","definition_contexts":[],"evidence_ids":["EVD-f909718e9306b98c"],"id":"VALUEBIND-a588fa9f1c0bdc7f","initializer":"json.loads(document)","name":"parsed","target_kind":"name"}],"SYM-094cb8a1abb8f245","$103","$106","resolved",[],["json.loads"]]],["CALL-3e8e0ec25f9e9a3c","FACT","$40","$59","Call write_document",["shop.store.backend.write_document","$111"],["EVD-d3ebe0da699ef368"],[],[],[],[1,false,null,"write_document","$52",[],"SYM-98565702bb3be343","$108","$111","resolved",[],["shop.store.backend.write_document"]]],["CALL-4482728a13a76d91","FACT","$40","$56","Call path.read_text",["pathlib.Path.read_text","$97"],["EVD-af91ee021bacf2aa"],[],[],[],[1,false,null,"path.read_text","$39",[],"SYM-0f98fb6f9a3c1a88","$94","$97","$55",[],["pathlib.Path.read_text"]]],["CALL-44d00f3387c412c0","FACT","$40","$59","Call int",["builtins.int","$67"],["EVD-77dabdd9ac9a201e"],[],[],[],[1,false,null,"int","Python builtin",[],"SYM-785f9f9b17ce8f3c","$66","$67","resolved",[],["builtins.int"]]],["CALL-46bd5eb5b49d27e1","FACT","$40","$59","Call Money",["$73","$77"],["EVD-b5809056b0d2d4ce"],[],[],[],[1,false,{"candidates_truncated":false,"reason":"$6","status":"$55","targets":["$77"]},"Money","module-local symbol",[],"SYM-421012b9fa5f6934","$69","$73","resolved",["EVD-809590eb3ddf92d6"],["$77"]]],["CALL-4ba2fb087ae069a0","FACT","$40","$59","Call Money",["$77","shop.model.entities.Money.__mul__"],["EVD-fae74776900ba6db"],[],[],[],[1,false,{"candidates_truncated":false,"reason":"$6","status":"$55","targets":["$77"]},"Money","module-local symbol",[],"SYM-c24e1dc0171bbef6","$69","shop.model.entities.Money.__mul__","resolved",["EVD-809590eb3ddf92d6"],["$77"]]],["CALL-4d5de6fb6fc67f39","FACT","$40","$59","Call vacuum",["$62","$114"],["EVD-7b94d9808f72b720"],[],[],[],[1,false,null,"vacuum","$52",[],"SYM-617dbdf906017b98","$61","$62","resolved",["EVD-0fe909c92608a522"],["$114"]]],["CALL-4e8baa19b97e90b1","FACT","$40","$56","Call partial.write_text",["pathlib.Path.write_text","$98"],["EVD-474ae2400c81030c"],[],[],[],[1,false,null,"partial.write_text","receiver bound to a call result of documented type, unproven at runtime",[],"SYM-3ddc33e5a1bedfc4","$94","$98","$55",[],["pathlib.Path.write_text"]]],["CALL-5233b989d47a627c","FACT","$40","$56","Call root.glob",["pathlib.Path.glob","$102"],["EVD-b80791c644a0f00a"],[],[],[],[1,false,null,"root.glob","$39",[],"SYM-5e29728aec775442","$99","$102","$55",[],["pathlib.Path.glob"]]],["CALL-59f4ad4fd7e392a1","FACT","$40","$59","Call Line",["$64","$72"],["EVD-9daa80cbabed8ba0"],[],[],[],[1,false,{"candidates_truncated":false,"reason":"$6","status":"$55","targets":["$72"]},"Line","$52",[{"annotation":null,"definition_contexts":[],"evidence_ids":["EVD-f19f85119e4f9693"],"id":"VALUEBIND-8d2a50798a7e40cf","initializer":"Line(description=description, quantity=quantity, unit_price=Money(unit_price_cents))","name":"line","target_kind":"name"}],"SYM-1413fc34058d59ad","$63","$64","resolved",["EVD-1bc0e01868608acb"],["$72"]]],["CALL-5cc9f12ce53da1f0","FACT","$40","$59","Call read_document",["shop.store.backend.read_document","$110"],["EVD-28c2ecc02cf4daff"],[],[],[],[1,false,null,"read_document","$52",[],"SYM-7be0fbfe04d8ef32","$108","$110","resolved",[],["shop.store.backend.read_document"]]],["CALL-5d289aab81c5452a","FACT","$40","$59","Call tuple",["builtins.tuple","$80"],["EVD-002214d1259b8690"],[],[],[],[1,false,null,"tuple","Python builtin",[{"annotation":null,"definition_contexts":[],"evidence_ids":["EVD-027c161b509e8583"],"id":"VALUEBIND-191478ca0b4c8d21","initializer":"tuple((Line.from_dict(item) for item in payload['lines']))","name":"lines","target_kind":"name"}],"SYM-f3293ef7f8441e4a","$69","$80","resolved",[],["builtins.tuple"]]],["CALL-67ca91b834a98839","FACT","$40","$59","Call discard_document",["shop.store.backend.discard_document","$114"],["EVD-bcef9351d265aa13"],[],[],[],[1,false,null,"discard_document","$52",[],"SYM-03a741a00a38e247","$112","$114","resolved",[],["shop.store.backend.discard_document"]]],["CALL-68e1674deaeb3f9a","FACT","$40","$59","Call json.dumps",["json.dumps","$107"],["EVD-cd4cbf212d2a3a4c"],[],[],[],[1,false,null,"json.dumps","attribute of imported module binding",[],"SYM-c6dc50ed43219b97","$103","$107","resolved",[],["json.dumps"]]],["CALL-6d94b3b30296660a","FACT","$40","$59","Call Path",["pathlib.Path","$67"],["EVD-ae3e0efd16661009"],[],[],[],[1,false,null,"Path","$52",[],"SYM-785f9f9b17ce8f3c","$66","$67","resolved",[],["pathlib.Path"]]],["CALL-75b6ee4ead83d132","FACT","$40","$59","Call lines.append",["builtins.list.append","$90"],["EVD-3fd4861a53d6e4da"],[],[],[],[1,false,null,"lines.append","literal-bound receiver of known type",[],"SYM-3084c7286ff5a998","$89","$90","resolved",[],["builtins.list.append"]]],["CALL-7dbb7c9aff9125e7","FACT","$40","$56","Call line.to_dict",["$74","$81","shop.model.entities.Order.to_dict.<listcomp:92:52>"],["EVD-48e1586facec492f"],[],[],[],[2,false,null,"line.to_dict","$49",[],null,"$69","shop.model.entities.Order.to_dict.<listcomp:92:52>","$55",["EVD-380072b2520ec91b","EVD-ea5b17eeeff85142"],["$74","$81"]]],["CALL-828a6d7f83af09d1","FACT","$40","$56","Call order.total",["$75","$82","$90"],["EVD-2d6ab9f7d4c4c7e2"],[],[],[],[2,false,null,"order.total","$49",[],"SYM-3084c7286ff5a998","$89","$90","$55",["EVD-41e509000836a272","EVD-db42ea9082a4945d"],["$75","$82"]]],["CALL-84f1a173601b686d","FACT","$40","unresolved_call","Call OrderRepository(store_dir).save",["$64"],["EVD-f8a2d5ed5f18af60"],[],[],[],[0,false,null,"OrderRepository(store_dir).save","expression is dynamic",[],"SYM-1413fc34058d59ad","$63","$64","unresolved",[],[]]],["CALL-8668702d554123fe","FACT","$40","$59","Call order_paths",["shop.store.backend.order_paths","$114"],["EVD-3ed2dcf2fe27ec48"],[],[],[],[1,false,null,"order_paths","$52",[],"SYM-03a741a00a38e247","$112","$114","resolved",[],["shop.store.backend.order_paths"]]],["CALL-8ad11b4451bae8d5","FACT","$40","$59","Call dataclass",["$44","$69"],["EVD-db14419f2eca8a41"],[],[],[],[1,false,null,"dataclass","$52",[],"$33","$69","$69","resolved",[],["$44"]]],["CALL-92bc655a87ca47d4","FACT","$40","$56","Call path.unlink",["pathlib.Path.unlink","$96"],["EVD-1641769a3e1d7b02"],[],[],[],[1,false,null,"path.unlink","$39",[],"SYM-f7d39b41d9b7b9a7","$94","$96","$55",[],["pathlib.Path.unlink"]]],["CALL-9a91649a6d292045","FACT","$40","$59","Call decode",["$106","$110"],["EVD-fd78f48dca4340ce"],[],[],[],[1,false,null,"decode","$52",[],"SYM-7be0fbfe04d8ef32","$108","$110","resolved",["EVD-538428ebc2c45adf"],["$106"]]],["CALL-9e1f51182d186d06","FACT","$40","$59","Call order_path",["shop.store.backend.order_path","$110"],["EVD-6783cc17029c5852"],[],[],[],[1,false,null,"order_path","$52",[],"SYM-7be0fbfe04d8ef32","$108","$110","resolved",[],["shop.store.backend.order_path"]]],["CALL-9ff4d9a1d24d8931","FACT","$40","$59","Call Money",["$77","$78"],["EVD-364f7fe891f0a9b4"],[],[],[],[1,false,{"candidates_truncated":false,"reason":"$6","status":"$55","targets":["$77"]},"Money","module-local symbol",[],"SYM-521e10b69216a628","$69","$78","resolved",["EVD-809590eb3ddf92d6"],["$77"]]],["CALL-a06e0f01bde1adb7","FACT","$40","$59","Call Money",["$77","$82"],["EVD-1b582c9947790135"],[],[],[],[1,false,{"candidates_truncated":false,"reason":"$6","status":"$55","targets":["$77"]},"Money","module-local symbol",[{"annotation":null,"definition_contexts":[],"evidence_ids":["EVD-b8472c7ac9dc6c74"],"id":"VALUEBIND-e1e04363a789093a","initializer":"Money(0)","name":"result","target_kind":"name"}],"SYM-306fffdb8811c478","$69","$82","resolved",["EVD-809590eb3ddf92d6"],["$77"]]],["CALL-a49a3c573401ecdc","FACT","$40","$59","Call print",["builtins.print","$67"],["EVD-c950c2e696960710"],[],[],[],[1,false,null,"print","Python builtin",[],"SYM-785f9f9b17ce8f3c","$66","$67","resolved",[],["builtins.print"]]],["CALL-aae1a8ccb0495442","FACT","$40","unresolved_call","Call OrderRepository(store_dir).load",["$65"],["EVD-a58c017b74a0ce6d"],[],[],[],[0,false,null,"OrderRepository(store_dir).load","expression is dynamic",[],"SYM-651121df4d1e8ad5","$63","$65","unresolved",[],[]]],["CALL-b835c7a5b441e0f9","FACT","$40","$56","Call order.to_dict",["$74","$81","$107"],["EVD-89d99e7a0b3b9fd3"],[],[],[],[2,false,null,"order.to_dict","$49",[],"SYM-c6dc50ed43219b97","$103","$107","$55",["EVD-380072b2520ec91b","EVD-ea5b17eeeff85142"],["$74","$81"]]],["CALL-b8f69fdd111b69c6","FACT","$40","$56","Call partial.replace",["pathlib.Path.replace","$98"],["EVD-e2d93466c2b1ee5c"],[],[],[],[1,false,null,"partial.replace","receiver bound to a call result of documented type, unproven at runtime",[],"SYM-3ddc33e5a1bedfc4","$94","$98","$55",[],["pathlib.Path.replace"]]],["CALL-c2a99e49722d37c3","FACT","$40","unresolved_call","Call candidate.stat",["$114"],["EVD-40cf110254bb2a19"],[],[],[],[0,false,null,"candidate.stat","dynamic attribute receiver",[],"SYM-03a741a00a38e247","$112","$114","unresolved",[],[]]],["CALL-cade0dd922464ad1","FACT","$40","$59","Call order_path",["shop.store.backend.order_path","$111"],["EVD-d304c9bd851acba2"],[],[],[],[1,false,null,"order_path","$52",[],"SYM-98565702bb3be343","$108","$111","resolved",[],["shop.store.backend.order_path"]]],["CALL-cb31d6cdcfae43b0","FACT","$40","$59","Call lines.extend",["builtins.list.extend","$90"],["EVD-ed64ac8c02c504a8"],[],[],[],[1,false,null,"lines.extend","literal-bound receiver of known type",[],"SYM-3084c7286ff5a998","$89","$90","resolved",[],["builtins.list.extend"]]],["CALL-cc72be80a115c456","FACT","$40","$59","Call dataclass",["$44","$69"],["EVD-f85359de8c6bd244"],[],[],[],[1,false,null,"dataclass","$52",[],"$33","$69","$69","resolved",[],["$44"]]],["CALL-cdc0f88188468209","FACT","$40","unresolved_call","Call path.parent.mkdir",["$98"],["EVD-0c12626667c2b2df"],[],[],[],[0,false,null,"path.parent.mkdir","dynamic attribute receiver",[],"SYM-3ddc33e5a1bedfc4","$94","$98","unresolved",[],[]]],["CALL-cfda7b21bdd2cca0","FACT","$40","unresolved_call","Call cls",["$73"],["EVD-0e33736516e068da"],[],[],[],[0,false,null,"cls","lexical binding has no proven callable value",[],"SYM-421012b9fa5f6934","$69","$73","unresolved",[],[]]],["CALL-d5aec7b934e3d882","FACT","$40","$56","Call line.total",["$75","$82","$82"],["EVD-a5540a12732ce8a0"],[],[],[],[2,false,null,"line.total","$49",[],"SYM-306fffdb8811c478","$69","$82","$55",["EVD-41e509000836a272","EVD-db42ea9082a4945d"],["$75","$82"]]],["CALL-d7a1fe0547f73197","FACT","$40","$59","Call OrderRepository",["$65","shop.store.OrderRepository"],["EVD-a58c017b74a0ce6d"],[],[],[],[1,false,null,"OrderRepository","$52",[],"SYM-651121df4d1e8ad5","$63","$65","resolved",[],["shop.store.OrderRepository"]]],["CALL-d821b880d4863ce7","FACT","$40","$59","Call int",["builtins.int","$67"],["EVD-74ddeaef7cdc525a"],[],[],[],[1,false,null,"int","Python builtin",[],"SYM-785f9f9b17ce8f3c","$66","$67","resolved",[],["builtins.int"]]],["CALL-d83a368dc39c3d15","FACT","$40","$59","Call render_order",["$67","$86"],["EVD-46385226e735e5df"],[],[],[],[1,false,null,"render_order","$52",[],"SYM-785f9f9b17ce8f3c","$66","$67","resolved",[],["$86"]]],["CALL-ed4fec0e09f45c36","FACT","$40","$59","Call _indent",["shop.render.text._indent","shop.render.text.render_order.<genexpr:13:16>"],["EVD-de0535b632bbf9a5"],[],[],[],[1,false,null,"_indent","module-local symbol",[],null,"$89","shop.render.text.render_order.<genexpr:13:16>","resolved",["EVD-1c55304fac7d5d2d"],["shop.render.text._indent"]]],["CALL-f1d0ad2553c86959","FACT","$40","$59","Call dataclass",["$44","$112"],["EVD-d86333b864b965b3"],[],[],[],[1,false,null,"dataclass","$52",[],"$26","$112","$112","resolved",[],["$44"]]],["CALL-f2897f43663b6317","FACT","$40","$59","Call dataclass",["$44","$69"],["EVD-d1b70d9273097937"],[],[],[],[1,false,null,"dataclass","$52",[],"$33","$69","$69","resolved",[],["$44"]]],["CALL-f2c895a3c3372054","FACT","$40","$59","Call Money",["$64","$77"],["EVD-b8153f097d4f6f8b"],[],[],[],[1,false,{"candidates_truncated":false,"reason":"$6","status":"$55","targets":["$77"]},"Money","$52",[],"SYM-1413fc34058d59ad","$63","$64","resolved",["EVD-809590eb3ddf92d6"],["$77"]]],["CALL-f7a3dec1d1b6c4a4","FACT","$40","$59","Call Line.from_dict",["$73","shop.model.entities.Order.from_dict.<genexpr:96:21>"],["EVD-b0f402cc74eb9e1a"],[],[],[],[1,false,null,"Line.from_dict","class-qualified local method",[],null,"$69","shop.model.entities.Order.from_dict.<genexpr:96:21>","resolved",["EVD-f306204066b62b9f"],["$73"]]],["CALL-f9335c1966589bca","FACT","$40","unresolved_call","Call OrderRepository(store_dir).load(order_id).total",["$65"],["EVD-a58c017b74a0ce6d"],[],[],[],[0,false,null,"OrderRepository(store_dir).load(order_id).total","expression is dynamic",[],"SYM-651121df4d1e8ad5","$63","$65","unresolved",[],[]]],["CALL-ff31d6af7d88ebe7","FACT","$40","$59","Call dataclass",["$44","$69"],["EVD-d73f3509fba000e5"],[],[],[],[1,false,null,"dataclass","$52",[],"$33","$69","$69","resolved",[],["$44"]]]],"constructs":[["CONSTRUCT-014bd85141423fac","FACT","constructs","broad_except","shop.cli.main.main uses broad_except",["$67"],["EVD-28c0566df62f3acb"],[],[],[],["broad_except",["Exception"],"$67"]]],"context_evidence":[],"contexts":[["CONTEXT-8d9001d32c6a703d","UNKNOWN","contexts_state","declared_context_not_observed","shop",["shop"],[],[],[],[],[[],"declared_root","DECLARED ROOT",true,[],[],[],[],"shop",[],[]]]],"contract":{"digest":"79eb7ce3ce71a6f9a97b7ad5995d5c13510fd9de203aeea533ee08545f8f9ac2","path":"architecture-contract.json","schema_version":"2.3.0"},"coverage":{"ast_coverage_percent":100.0,"call_resolution_percent":71.67,"calls_analyzed":60,"calls_partially_resolved":10,"calls_resolved":43,"calls_unresolved":7,"failures":[],"files_discovered":14,"files_parsed":14,"files_read":14,"rules":"PASS","status":"PASS"},"cycles":[],"declarations":[["API-6027d4f632f2d976","$7","api_surface","declared_public_api","shop.model.entities:Money",["shop.model.entities:Money"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","shop.model.entities:Money","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m",[]]],["API-69ccf7d39fe03a65","$7","api_surface","declared_public_api","shop.model.entities:Line",["shop.model.entities:Line"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","shop.model.entities:Line","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m",[]]],["API-718ff38bcea8ca70","$7","api_surface","declared_public_api","shop.model.entities:Order",["shop.model.entities:Order"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","shop.model.entities:Order","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m",[]]],["API-7b370787f25d53ff","$7","api_surface","declared_public_api","shop.app.orders:place_order",["shop.app.orders:place_order"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","shop.app.orders:place_order","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m",[]]],["APP-TYPES-NOT-DICT","$7","type_architecture","boundary_types","Declared facade functions below shop.app take and return no bare dict or object, and no undeclared type",["shop.app"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","shop.app's functions take and return typed models, never a bare dict standing in for one.","$m","$m","$m","$m","$m","$m","shop.app","$m","$m","$m","$m"]],["ASSIGNMENT-COMPLETE","$7","components","complete_assignment","Every module in shop belongs to one component",["shop"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","A module without one owning component escapes every boundary rule.","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m"]],["CAP-SHOP","$7","components","capability","Shop sample ordering",["SHOP"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","SHOP","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m",1,"$m","$m","$m","$m","$m","$m","$m"]],["CMD-SHOP-PLACE-ORDER","$7","api_surface","declared_public_command","shop.cli.main:main",["shop.cli.main:main"],[],[],[],["$48"],["$m","$m","$m","$m","shop.cli.main:main","$m","$m","$m","$m","Parse order arguments, place the order and print it as text.","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["COMP-APP","$7","components","component_responsibility","app",["shop.app"],[],[],[],["$48"],["$m","$m","CAP-SHOP","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Persistence details and presentation."],"$m","$m","$m","Adapters","$m","$m","$m","$m","shop.app","$m","$m","$m",["shop.app.orders:place_order"],"$m","$m","$m",[],["Use cases: place and summarise orders."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["COMP-CLI","$7","components","component_responsibility","cli",["shop.cli"],[],[],[],["$48"],["$m","$m","CAP-SHOP","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Domain logic, persistence and presentation formatting."],"$m","$m","$m","Edge","$m","$m","$m","$m","shop.cli","$m","$m","$m","$m","$m","$m","$m",[],["Argument parsing, composition and the single broad error boundary."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["COMP-MODEL","$7","components","component_responsibility","model",["$68"],[],[],[],["$48"],["$m","$m","CAP-SHOP","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Persistence, use cases, presentation or command-line orchestration."],"$m","$m","$m","Core","$m","$m","$m","$m","$68","$m","$m","$m",["$69"],"$m","$m","$m",[],["Order and Line value types, and Money arithmetic."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["COMP-RENDER","$7","components","component_responsibility","render",["$84"],[],[],[],["$48"],["$m","$m","CAP-SHOP","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Order use cases and persistence."],"$m","$m","$m","Edge","$m","$m","$m","$m","$84","$m","$m","$m",["shop.render.facade:render_order","shop.render.facade:safe"],"$m","$m","$m",[],["Text projection of an order."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["COMP-STORE","$7","components","component_responsibility","store",["$91"],[],[],[],["$48"],["$m","$m","CAP-SHOP","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Order use cases and presentation."],"$m","shop/store/architecture-contract.json","$m","Adapters","$m","$m","$m","$m","$91","$m","$m","$m",["shop.store.repository:OrderRepository","shop.store.sqlite:Connection","shop.store.sqlite:vacuum"],"$m","$m","$m",[],["Persist orders as JSON files."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["COMPONENT-NO-CYCLES","$7","cycles","no_component_cycles","Component dependencies form no cycle",[],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Components stay layered so each one can be reviewed and replaced in dependency order.","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["CONSTRUCT-NO-ANY","$7","type_architecture","forbidden_construct","shop forbids any_annotation",["shop"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m",["any_annotation"],"architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","A value that crosses a module boundary carries a type the reader can follow; Any hides exactly what the boundary exists to state.","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m"]],["CONSTRUCT-NO-ASSERT","$7","type_architecture","forbidden_construct","shop forbids assert",["shop"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m",["assert"],"architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Invariants are checked where values are built, because assert statements vanish under python -O.","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m"]],["CONSTRUCT-NO-BROAD-EXCEPT","$7","type_architecture","forbidden_construct","shop forbids broad_except",["shop"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m",["broad_except"],"architect","$m","$m",["$67"],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Failures stay typed and visible; only the CLI error boundary, main's own body, turns any failure into an exit code.","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m"]],["CONSTRUCT-NO-DYNAMIC","$7","type_architecture","forbidden_construct","shop forbids getattr, hasattr, cast, eval, exec, dynamic_import, type_ignore, setattr, delattr, vars, dunder_dict",["shop"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m",["getattr","hasattr","cast","eval","exec","dynamic_import","type_ignore","setattr","delattr","vars","dunder_dict"],"architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Static architecture evidence remains explicit and mechanically traceable.","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m"]],["CONSTRUCT-NO-PLACEHOLDER","$7","type_architecture","forbidden_construct","shop forbids placeholder_body",["shop"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m",["placeholder_body"],"architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","A function whose body is pass, ellipsis or a lone NotImplementedError reports capability it does not have, and its callers are written against that promise.","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m"]],["CONSTRUCT-NO-STRING-LITERAL-COMPARE","$7","type_architecture","forbidden_construct","shop forbids string_literal_compare",["shop"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m",["string_literal_compare"],"architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","A closed vocabulary is an enum or Literal the type checker follows; a value compared with a string literal is a vocabulary nobody declared.","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m"]],["CTX-8d9001d32c6a703d","$7","contexts_state","declared_context_root","shop",["shop"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["DEP-APP-ALLOWS-MODEL","$7","$47","allowed_dependency","shop.app may depend on shop.model",["shop.app","$68"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Use cases construct orders from domain values.","$m","$m","$m","$m","$m","$m","shop.app","$m","$68","$m","$m"]],["DEP-APP-ALLOWS-STORE","$7","$47","allowed_dependency","shop.app may depend on shop.store",["shop.app","$91"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Use cases persist and load orders through the repository.","$m","$m","$m","$m","$m","$m","shop.app","$m","$91","$m","$m"]],["DEP-APP-NO-CLI","$7","$47","$50","shop.app must not depend on shop.cli",["shop.app","shop.cli"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Use cases remain callable without command-line orchestration.","$m","$m","$m","$m","$m","$m","shop.app","$m","shop.cli","$m","$m"]],["DEP-APP-NO-RENDER","$7","$47","$50","shop.app must not depend on shop.render",["shop.app","$84"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Use cases return typed values; only the composition root decides how to project them.","$m","$m","$m","$m","$m","$m","shop.app","$m","$84","$m","$m"]],["DEP-APP-NO-STORE-BACKEND","$7","$47","$50","shop.app must not depend on shop.store.backend",["shop.app","$93"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","The file layout behind the repository is the store's own business; use cases reach persistence through OrderRepository, never through its backend.","$m","$m","$m","$m","$m","$m","shop.app","$m","$93","$m","$m"]],["DEP-APP-NO-STORE-SQLITE","$7","$47","$50","shop.app must not depend on shop.store.sqlite",["shop.app","$112"],[],[],[],["$48"],["$m",["$61"],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",false,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Only the maintenance use case may run store housekeeping; ordinary order use cases stay on the repository.","$m","$m","$m","$m","$m","$m","shop.app","$m","$112","$m","$m"]],["DEP-CLI-ALLOWS-APP","$7","$47","allowed_dependency","shop.cli may depend on shop.app",["shop.app","shop.cli"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","The composition root invokes the order use cases.","$m","$m","$m","$m","$m","$m","shop.cli","$m","shop.app","$m","$m"]],["DEP-CLI-ALLOWS-RENDER","$7","$47","allowed_dependency","shop.cli may depend on shop.render",["shop.cli","$84"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","The composition root prints the rendered order.","$m","$m","$m","$m","$m","$m","shop.cli","$m","$84","$m","$m"]],["DEP-CLI-NO-MODEL","$7","$47","$50","shop.cli must not depend on shop.model",["shop.cli","$68"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","The composition root reaches domain values only through the use cases it calls.","$m","$m","$m","$m","$m","$m","shop.cli","$m","$68","$m","$m"]],["DEP-CLI-NO-STORE","$7","$47","$50","shop.cli must not depend on shop.store",["shop.cli","$91"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","The composition root reaches persistence only through the use cases it calls.","$m","$m","$m","$m","$m","$m","shop.cli","$m","$91","$m","$m"]],["DEP-MODEL-NO-APP","$7","$47","$50","shop.model must not depend on shop.app",["shop.app","$68"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Value types remain reusable without depending on the use cases that construct them.","$m","$m","$m","$m","$m","$m","$68","$m","shop.app","$m","$m"]],["DEP-MODEL-NO-CLI","$7","$47","$50","shop.model must not depend on shop.cli",["shop.cli","$68"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Value types remain independent of command-line composition.","$m","$m","$m","$m","$m","$m","$68","$m","shop.cli","$m","$m"]],["DEP-MODEL-NO-RENDER","$7","$47","$50","shop.model must not depend on shop.render",["$68","$84"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Value types remain independent of how orders are projected as text.","$m","$m","$m","$m","$m","$m","$68","$m","$84","$m","$m"]],["DEP-MODEL-NO-STORE","$7","$47","$50","shop.model must not depend on shop.store",["$68","$91"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Order and Line value types stay independent of any persistence mechanism.","$m","$m","$m","$m","$m","$m","$68","$m","$91","$m","$m"]],["DEP-RENDER-ALLOWS-MODEL","$7","$47","allowed_dependency","shop.render may depend on shop.model",["$68","$84"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Text projection reads the values it renders.","$m","$m","$m","$m","$m","$m","$84","$m","$68","$m","$m"]],["DEP-RENDER-NO-APP","$7","$47","$50","shop.render must not depend on shop.app",["shop.app","$84"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Text projection stays a pure view over values, not a caller of use cases.","$m","$m","$m","$m","$m","$m","$84","$m","shop.app","$m","$m"]],["DEP-RENDER-NO-CLI","$7","$47","$50","shop.render must not depend on shop.cli",["shop.cli","$84"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Text projection remains reusable without command-line composition.","$m","$m","$m","$m","$m","$m","$84","$m","shop.cli","$m","$m"]],["DEP-RENDER-NO-STORE","$7","$47","$50","shop.render must not depend on shop.store",["$84","$91"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Text projection consumes typed values without touching persistence.","$m","$m","$m","$m","$m","$m","$84","$m","$91","$m","$m"]],["DEP-STORE-ALLOWS-MODEL","$7","$47","allowed_dependency","shop.store may depend on shop.model",["$68","$91"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Persistence serialises the domain values it is given.","$m","$m","$m","$m","$m","$m","$91","$m","$68","$m","$m"]],["DEP-STORE-NO-APP","$7","$47","$50","shop.store must not depend on shop.app",["shop.app","$91"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Persistence stays a leaf dependency and never calls back into use cases.","$m","$m","$m","$m","$m","$m","$91","$m","shop.app","$m","$m"]],["DEP-STORE-NO-CLI","$7","$47","$50","shop.store must not depend on shop.cli",["shop.cli","$91"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Persistence stays callable without command-line orchestration.","$m","$m","$m","$m","$m","$m","$91","$m","shop.cli","$m","$m"]],["DEP-STORE-NO-MONEY","$7","$47","$50","shop.store must not depend on shop.model.entities.Money",["$77","$91"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Persistence serialises whole orders and must not compute or interpret money amounts itself.","$m","$m","$m","$m","$m","$m","$91","$m","$69","Money","$m"]],["DEP-STORE-NO-RENDER","$7","$47","$50","shop.store must not depend on shop.render",["$84","$91"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Persistence remains independent of how orders are displayed.","$m","$m","$m","$m","$m","$m","$91","$m","$84","$m","$m"]],["EXTERNAL-COMPLETE","$7","$46","complete_external_scope","Every dependency shop imports is declared",["shop"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","A dependency no rule names is a dependency nobody chose, and a package that does not exist looks exactly the same from inside the code.","$m","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m"]],["EXTERNAL-JSON-STORE","$7","$47","external_dependency_scope","json is allowed only in shop.store",["json","$91"],[],[],[],["$48"],["$m",["$91"],"$m","$m","$m","$m","$m","architect","json","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Only the store component chooses the JSON file format; other components stay format-agnostic.","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["INTERFACE-BOUNDARY","$7","api_surface","interface_boundary","Cross-component imports must reach the target's declared public interface",[],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Components communicate only through declared interfaces, so reaching into another component's internals requires a visible contract change.","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["LAYERS-MODEL","$7","components","layer_order","Declared requires follow the inner-to-outer layer order",[],[],[],[],["$48"],["$m","$m","$m","$m","$m",["model"],"$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m",["Core","Adapters","Edge"],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","The model declares no permission to require an outer layer; imports remain under the existing dependency rules.","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["MODEL-TYPES-IN-ENTITIES","$7","type_architecture","symbol_placement","dataclass classes below shop.model are defined only in an allowed module",["$68"],[],[],[],["$48"],["$m",[],"$m",["dataclass"],"$m","$m","$m","architect","$m","$m",["$69"],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Every order, line and money type shop.model owns lives in one module, not scattered across the package.","$m","$m","$m","$m","$m","$m","$68","$m","$m","$m","$m"]],["OWNER-SHOP-MODEL","$7","spot_ownership","spot_owner","Order value types",["$68"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$68","$m","$m","$m","$m","$m","$m","$m","$m","Order, Line and Money stay the single source of truth for order arithmetic.","$m","$m","$m","$m","$m","$m","$m","$m"]],["PATH-SHOP-PLACE-ORDER","$7","read_write_paths","declared_write_path","Place an order",["$63","$66","$69","$91"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m",["$66","$63","$91","$69"],"$m","$m","$m"]],["RENDER-TYPES-NOT-DICT","$7","type_architecture","boundary_types","Declared facade functions below shop.render take and return no bare dict or object, and no undeclared type",["$84"],[],[],[],["$48"],["$m",[],"$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Keep the declared render boundary typed.","$m","$m","$m","$m","$m","$m","$84","$m","$m","$m","$m"]],["ROOT-LAYOUT","$7","$54","root_layout","Immediate children below shop are explicitly allowed",["shop","shop.app","shop.cli","$68","$84","$91"],[],[],[],["$48"],[["shop.app","shop.cli","$68","$84","$91"],"$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","The shop root exposes only its declared top-level components.","$m","$m","$m","$m","$m","shop","$m","$m","$m","$m","$m"]],["SCOPE-SHOP-ORDERS","$7","components","review_scope","Order placement review",["$63"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","CAP-SHOP","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["STORE-PEERS-ISOLATED","$7","$47","sibling_isolation","2 peers must not import each other",["$108","$112"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","Persistence and maintenance are peers behind the store's entry point, so neither reaches into the other.","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["store:STORE-REQUIRES-COMPLETE","$7","components","complete_requires","Every cross-component import is covered by the source's requires list",[],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m","$m",true,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","store","$m","$m","$m","Inside the store the same principle holds as above it: an import nobody asked for is an accident, so each part names what it needs and absence refuses the rest.","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m"]],["store:COMP-STORE-API","$7","components","inside_component_responsibility","api",["$112"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Saving or loading a single order, and knowing the document format."],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","store",["shop.store.sqlite:Connection","shop.store.sqlite:vacuum"],"$m","$m","$m",[{"component":"backend","decided_by":"architect","rationale":"Compaction walks the stored files and deletes them, which is the only knowledge of the directory layout it is allowed to hold.","through":[]}],["Housekeeping on a whole store directory, for the maintenance use case."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["store:COMP-STORE-BACKEND","$7","components","inside_component_responsibility","backend",["$93"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Interpreting what a document contains, and knowing about orders at all."],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","store",[],"$m","$m","$m",[],["Where a document lives, how it is named, and how it is read and replaced."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["store:COMP-STORE-CODEC","$7","components","inside_component_responsibility","codec",["$103"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Touching the filesystem, and deciding where a document is written."],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","store",[],"$m","$m","$m",[],["The stored document format and the version stamped into it."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["store:COMP-STORE-REPOSITORY","$7","components","inside_component_responsibility","repository",["$108"],[],[],[],["$48"],["$m","$m","$m","$m","$m","$m","$m","architect","$m","$m","$m","$m",["Formatting a document itself, and reaching the filesystem without the backend."],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","store",["shop.store.repository:OrderRepository"],"$m","$m","$m",[{"component":"backend","decided_by":"architect","rationale":"An order is stored somewhere, and the place it is stored is settled in one module rather than at every call site.","through":[]},{"component":"codec","decided_by":"architect","rationale":"Turning an order into bytes and back is a format decision the persistence API delegates, so the format can change without the API changing.","through":[]}],["The order-facing persistence API the rest of the shop is written against."],"$m","$m","component","$m","$m","$m","$m","$m","$m"]],["ARCHITECTURE-TARGET-a2e40c5592b1b06a","$7","uml","architecture_target","Declared architecture target",[],[],[],[],["architecture-contract.json"],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m",["EXTERNAL-JSON-STORE"],"$m","$m","$m",[{"component_id":"COMP-STORE","external_scope_ids":[],"layout_rule_ids":[],"module_target_ids":[],"owner_ids":["store:COMP-STORE-API","store:COMP-STORE-BACKEND","store:COMP-STORE-CODEC","store:COMP-STORE-REPOSITORY"]}],"$m","$m",["ROOT-LAYOUT"],[],"$m","$m","$m",["COMP-MODEL","COMP-STORE","COMP-APP","COMP-RENDER","COMP-CLI","store:COMP-STORE-API","store:COMP-STORE-BACKEND","store:COMP-STORE-CODEC","store:COMP-STORE-REPOSITORY"],"$m","$m",["API-7b370787f25d53ff","API-69ccf7d39fe03a65","API-6027d4f632f2d976","API-718ff38bcea8ca70"],"$m","Existing declarations define graph intent; their rules retain evaluation ownership.","$m","$m","$m","$m","$m","$m","$m","$m",{"entities":[],"relationships":[],"schema_version":"1.2.0","scopes":[]},"$m","$m"]]],"dependency_edges":[["EDGE-0487f23fb5e5ad9b","FACT","package_topology","package_dependency","shop.store → shop.model",["$68","$91"],[],[],["IMP-433582f82cd7fab1","IMP-5f69fd090c6fbedd","IMP-854cd25ac952c923"],[],[false,3,"package",3,"$91",2,"$68",3,0]],["EDGE-14e0785acd31207d","FACT","$54","$53","shop.render.text → shop.model.entities",["$69","$89"],[],[],["IMP-5f3a2916e5c4b873"],[],[false,1,"module",1,"$89",3,"$69",5,0]],["EDGE-15998beff06a9fcf","FACT","package_topology","package_dependency","shop.cli → shop.render",["shop.cli","$84"],[],[],["IMP-06704ec26dafa3cb","IMP-e09a9f724cff3288"],[],[false,2,"package",2,"shop.cli",0,"$84",1,0]],["EDGE-1ad88587dca0df62","FACT","$54","$53","shop.cli.main → shop.app.orders",["$63","$66"],[],[],["IMP-c14d352eb623ce98"],[],[false,1,"module",1,"$66",0,"$63",1,0]],["EDGE-2c180bf81696690f","FACT","$54","$53","shop.store.sqlite → shop.store.backend",["$93","$112"],[],[],["IMP-9c9a26650d07d53f","IMP-f54cf5a2e86cdf79"],[],[false,2,"module",2,"$112",2,"$93",4,0]],["EDGE-33b8bbe5026be864","FACT","$54","$53","shop.store.repository → shop.store.backend",["$93","$108"],[],[],["IMP-6985ff97250b4a9e","IMP-6fc8896a544cf33e","IMP-73286559e2179cec"],[],[false,3,"module",3,"$108",3,"$93",4,0]],["EDGE-3710f672fd2f0c2a","FACT","$54","$53","shop.app.maintenance → shop.store.sqlite",["$61","$112"],[],[],["IMP-2dc76c96a33ea0db","IMP-35c1c35b56f8cf07"],[],[false,2,"module",2,"$61",0,"$112",2,0]],["EDGE-40faba752ec25c2f","FACT","package_topology","package_dependency","shop.app → shop.store",["shop.app","$91"],[],[],["IMP-03885a05810e2a9f","IMP-2dc76c96a33ea0db","IMP-35c1c35b56f8cf07","IMP-c19389d425ac8d7e"],[],[false,4,"package",3,"shop.app",1,"$91",2,1]],["EDGE-54d546847f078bd8","FACT","package_topology","package_dependency","shop.render → shop.model",["$68","$84"],[],[],["IMP-5f3a2916e5c4b873"],[],[false,1,"package",1,"$84",1,"$68",3,0]],["EDGE-58b9293354ac6170","FACT","$54","$53","shop.app.orders → shop.model.entities",["$63","$69"],[],[],["IMP-16ccedd1f609248a","IMP-9f25bb7363e01cf3","IMP-bb173b5fb587bdc1"],[],[false,3,"module",3,"$63",1,"$69",5,0]],["EDGE-5a26d5826c56e224","FACT","$54","$53","shop.render.intermediate → shop.render.text",["$87","$89"],[],[],["IMP-c4bf0045fdd26be5"],[],[false,1,"module",1,"$87",2,"$89",3,0]],["EDGE-6a7246e8699e8d40","FACT","$54","$53","shop.render.facade → shop.render.intermediate",["$85","$87"],[],[],["IMP-d74d063c1c3b04f9"],[],[false,1,"module",1,"$85",1,"$87",2,0]],["EDGE-75837215763c54f2","FACT","$54","$53","shop.app.orders → shop.store",["$63","$91"],[],[],["IMP-c19389d425ac8d7e"],[],[false,1,"module",1,"$63",1,"$91",2,0]],["EDGE-92c89d881e05d6ac","FACT","$54","$53","shop.store.repository → shop.store.codec",["$103","$108"],[],[],["IMP-05cafa2b6a9ca69f","IMP-373ca14ad39cb31e"],[],[false,2,"module",2,"$108",3,"$103",4,0]],["EDGE-98d3237939201824","FACT","$54","$53","shop.app.orders → shop.store.sqlite",["$63","$112"],[],[],["IMP-03885a05810e2a9f"],[],[false,1,"module",0,"$63",1,"$112",2,1]],["EDGE-9f96d87e78c4abc3","FACT","$54","$53","shop.store.backend → shop.store.backend.files",["$93","$94"],[],[],["IMP-41f62d4d879417db","IMP-7557dc2b068fbad5","IMP-b6b0e3c086bad72f"],[],[false,3,"module",3,"$93",4,"$94",5,0]],["EDGE-ad55f037555582ca","FACT","package_topology","package_dependency","shop.app → shop.model",["shop.app","$68"],[],[],["IMP-16ccedd1f609248a","IMP-9f25bb7363e01cf3","IMP-bb173b5fb587bdc1"],[],[false,3,"package",3,"shop.app",1,"$68",3,0]],["EDGE-afcd576017d020e3","FACT","$54","$53","shop.store.codec → shop.model.entities",["$69","$103"],[],[],["IMP-433582f82cd7fab1","IMP-5f69fd090c6fbedd"],[],[false,2,"module",2,"$103",4,"$69",5,0]],["EDGE-bd584a42d403a133","FACT","$54","$53","shop.store.backend → shop.store.backend.paths",["$93","$99"],[],[],["IMP-4b0aa8afde47d300","IMP-a84fd48911442825"],[],[false,2,"module",2,"$93",4,"$99",5,0]],["EDGE-d129074b8c0a4140","FACT","$54","$53","shop.store → shop.store.repository",["$91","$108"],[],[],["IMP-c0bf18fb78cbe14c"],[],[false,1,"module",1,"$91",2,"$108",3,0]],["EDGE-db0372f1a8a568e1","FACT","package_topology","package_dependency","shop.cli → shop.app",["shop.app","shop.cli"],[],[],["IMP-c14d352eb623ce98"],[],[false,1,"package",1,"shop.cli",0,"shop.app",1,0]],["EDGE-eeac70451eba4ee8","FACT","$54","$53","shop.cli.main → shop.render.facade",["$66","$85"],[],[],["IMP-06704ec26dafa3cb","IMP-e09a9f724cff3288"],[],[false,2,"module",2,"$66",0,"$85",1,0]],["EDGE-f647d4d8e69e0f81","FACT","$54","$53","shop.store.repository → shop.model.entities",["$69","$108"],[],[],["IMP-854cd25ac952c923"],[],[false,1,"module",1,"$108",3,"$69",5,0]]],"encoding":{"escaped_literal":"additional leading $","evidence_fields":["id","file","line","end_line","column","excerpt"],"kind":"architecture-ir-columnar-v1","record_fields":["id","evidence_class","area","kind","title","subjects","evidence_ids","rule_ids","fact_ids","provenance","data"],"section_data_fields":{"bindings":[],"calls":["candidate_count","candidates_truncated","construction","expression","reason","result_bindings","source_definition_id","source_module","source_scope","status","target_evidence_ids","targets"],"constructs":["construct","handled","owner"],"context_evidence":[],"contexts":["constructed_by","context_class","context_class_label","declared_root","dependencies","fields","methods","passes","qualified_name","reads","writes"],"cycles":[],"declarations":["allowed_children","allowed_sources","capability_id","class_kinds","command","components","constructs","decided_by","dependency","description","exact_sources","external_scope_ids","forbidden_responsibilities","include_type_checking","inside","inside_levels","layer","layers","layout_rule_ids","module_target_ids","name","namespace","owner","owner_ids","parent_id","public","public_api_ids","qualified_name","rationale","requires","responsibilities","responsibility","review_order","role","root","source","steps","target","target_symbol","types"],"dependency_edges":["bidirectional","count","level","runtime_count","source","source_rank","target","target_rank","type_checking_count"],"imports":["binding","declared_in_all","origin_definition","reexport","reexport_chain","relative_level","source_binding_unique","source_member_binding_static","source_module","source_package","symbol","symbol_visibility","symbols_known","target_module","target_package","under_type_checking"],"metrics":["tab","value"],"modules":["all_exports","all_literal","compatibility_logic_free","fan_in","fan_out","file","package","qualified_name","rank","symbol_count"],"packages":["dependencies","fan_in","fan_out","module_count","qualified_name","rank"],"path_observations":["path_id","reason","source","status","target"],"references":["declaration_definition_id","declaration_scope","expression","source_definition_id","source_module","source_scope","status","targets","use"],"scope_observations":["assessment_complete","claim","component_id","contract_digest","contract_path","coverage_complete","cycle_graph_components","cycle_scope_complete","cycle_scope_components","fan_out","file","files","layers","module","module_count","modules","observed_module_count","outgoing_modules","outgoing_scopes","owner_count","owners","parent_id","reason","scope","scope_module_counts","scopes"],"symbols":["async","attribute_declarations","base_declarations","base_roots","bases","class_body_control_flow","class_header_static","class_kind","class_members","constant","declared_in_all","decorators","default_instance_result","definition_contexts","facade_type_candidates_by_publisher","facade_types","fields","frozen_object","lexical_parent_id","member_inventories","method_kind","module","name","namespace_bound","overload_signature","package","parameters","parent","qualified_name","receiver_parameter","record_kind","returns","shape","shape_nodes","signature_decorators_proven","source_binding_unique","source_final_method_binding","source_member_binding_static","symbol_category","typed_dict_header_static","visibility","visibility_detail"],"transitive_paths":["level","path","source","target"],"typing_signals":[],"unknowns":["ambiguous_binding","ambiguous_facade","annotation","decided","dotted_name","external_type","forward_reference","generic","inherited_surface","missing_annotation","module","nested_type","occurrence","other","position","positions","qualified_name","reason","route","undecidable_positions","undecided","union","unresolved_calls","unresolved_name"],"violations":[]},"string_reference":"$<index>"},"evidence":[["EVD-002214d1259b8690","$117",96,96,16,"$1"],["EVD-023179c53590335c","$120",20,20,4,"    partial = path.with_suffix(f\"{path.suffix}.part\")"],["EVD-027c161b509e8583","$117",96,96,8,"$1"],["EVD-03b7b333aac461f3","$120",17,22,0,"def write_document(path: Path, document: str) -> None:"],["EVD-0438ee79361aecbd","$123",19,19,26,"    def save(self, order: Order) -> None:"],["EVD-05fd09bb70b1612d","$122",32,32,18,"    if version != DOCUMENT_VERSION:"],["EVD-09134357b4a872f1","$122",23,23,18,"def encode(order: Order) -> str:"],["EVD-0977f81fc2ac2b19","$121",13,14,0,"def order_path(root: Path, order_id: str) -> Path:"],["$8","$123",1,1,0,"# Archkeel"],["EVD-0bf559167b8b8e33","$124",9,9,0,"from pathlib import Path"],["EVD-0c12626667c2b2df","$120",19,19,4,"    path.parent.mkdir(parents=True, exist_ok=True)"],["EVD-0cccbc597680df5c","$116",20,20,14,"        print(safe(render_order(order)))"],["EVD-0d980b58b58a2c27","$115",18,28,0,"def place_order("],["EVD-0e33736516e068da","$117",73,77,15,"        return cls("],["$9","$119",1,1,0,"# Archkeel"],["EVD-0f1718615c647d6d","$115",31,31,49,"def summarize(store_dir: Path, order_id: str) -> Money:"],["EVD-0f6ca1ef6fa8044a","$122",11,11,0,"from shop.model.entities import Order, OrderPayload"],["EVD-0fe909c92608a522","$124",19,23,0,"def vacuum(connection: Connection) -> None:"],["EVD-13b53f5e83189b76","$117",81,97,0,"class Order:"],["EVD-13e6b96ba80aa9fa","$115",11,11,0,"from shop.model.entities import Line, Money, Order"],["EVD-14f38b04bd2f7b8d","$116",17,17,8,"        order = place_order("],["EVD-1641769a3e1d7b02","$120",26,26,4,"    path.unlink()"],["EVD-19ff467f293c6747","$122",13,13,0,"DOCUMENT_VERSION = 1"],["EVD-1a1f857322507e84","$117",35,36,4,"    def __add__(self, other: Money) -> Money:"],["EVD-1adb244d07352ea3","$122",16,20,0,"class OrderDocument(TypedDict):"],["EVD-1b582c9947790135","$117",86,86,17,"        result = Money(0)"],["EVD-1bc0e01868608acb","$117",56,77,0,"class Line:"],["EVD-1c55304fac7d5d2d","$118",18,19,0,"def _indent(text: str) -> str:"],["EVD-1fb303a26434ee46","$115",26,26,4,"    order = Order(order_id=order_id, lines=(line,))"],["EVD-23018504a17945f5","$124",16,16,4,"    path: Path"],["EVD-236abf80e8185e88","$122",29,29,29,"def decode(document: str) -> Order:"],["EVD-28c0566df62f3acb","$116",22,23,4,"    except Exception:"],["EVD-28c2ecc02cf4daff","$123",23,23,22,"$2"],["EVD-2d6ab9f7d4c4c7e2","$118",14,14,35,"    lines.append(_indent(f\"Total: {order.total()}\"))"],["$10","shop/store/__init__.py",1,1,0,"# Archkeel"],["$11","$122",1,1,0,"# Archkeel"],["EVD-34ef3407cb9a05ed","$119",8,8,0,"from shop.store.backend.files import discard_document, read_document, write_document"],["EVD-364f7fe891f0a9b4","$117",36,36,15,"        return Money(self.cents + other.cents)"],["EVD-36d7c34b4c900849","$115",9,9,0,"from typing import TYPE_CHECKING"],["EVD-37c486563c79e998","$124",6,6,0,"$51"],["EVD-380072b2520ec91b","$117",91,92,4,"    def to_dict(self) -> OrderPayload:"],["EVD-38710e4b9bb44644","$115",6,6,0,"$51"],["EVD-38891c635c506c91","shop/app/maintenance.py",11,11,32,"def run_maintenance(connection: Connection) -> None:"],["EVD-39161d918b372be5","$117",95,95,49,"    def from_dict(cls, payload: OrderPayload) -> Order:"],["EVD-3a45cf803befe154","$117",51,52,4,"    def apply(self, amount: Money) -> Money:"],["EVD-3adffac283771a7d","$117",46,52,0,"class Discount:"],["EVD-3b29e5a0919fffbd","$117",64,64,25,"    def to_dict(self) -> LinePayload:"],["EVD-3b7170d21682aff8","$123",16,17,4,"    def __init__(self, root: Path) -> None:"],["EVD-3c3d843fb403333d","$117",38,38,40,"    def __mul__(self, quantity: int) -> Money:"],["EVD-3ed2dcf2fe27ec48","$124",21,21,21,"    for candidate in order_paths(connection.path):"],["EVD-3fd4861a53d6e4da","$118",14,14,4,"    lines.append(_indent(f\"Total: {order.total()}\"))"],["EVD-40830476b83d35c2","shop/store/__init__.py",6,6,0,"$51"],["$12","shop/render/intermediate.py",1,1,0,"# Archkeel"],["EVD-40cf110254bb2a19","$124",22,22,11,"        if candidate.stat().st_size == 0:"],["EVD-41e509000836a272","$117",85,89,4,"    def total(self) -> Money:"],["EVD-44e79b72ed075656","$119",9,9,0,"from shop.store.backend.paths import order_path, order_paths"],["EVD-45244797ec95e427","$115",24,24,5,") -> Order:"],["EVD-46385226e735e5df","$116",20,20,19,"        print(safe(render_order(order)))"],["EVD-4663909830aa85df","$117",59,59,4,"    unit_price: Money"],["EVD-474ae2400c81030c","$120",21,21,4,"    partial.write_text(document, encoding=ENCODING)"],["EVD-48e1586facec492f","$117",92,92,53,"        return {\"order_id\": self.order_id, \"lines\": [line.to_dict() for line in self.lines]}"],["EVD-4ae1cbcd504ea7e5","$117",95,95,32,"    def from_dict(cls, payload: OrderPayload) -> Order:"],["$13","$120",1,1,0,"# Archkeel"],["EVD-4e97525dc3f2aafe","$124",8,8,0,"from dataclasses import dataclass"],["EVD-538428ebc2c45adf","$122",29,34,0,"def decode(document: str) -> Order:"],["EVD-54388728e808af06","$117",26,26,16,"    lines: list[LinePayload]"],["EVD-54b158ca4efa9858","shop/app/maintenance.py",8,8,0,"from shop.store.sqlite import Connection, vacuum"],["EVD-55874fa4e1457292","$124",15,16,0,"class Connection:"],["EVD-57b4ddb217507dd5","$116",17,19,16,"        order = place_order("],["EVD-580df503e76dbb5c","$117",14,14,18,"class LinePayload(TypedDict):"],["EVD-598749736e720d9d","$117",22,26,0,"class OrderPayload(TypedDict):"],["EVD-5a3cb5f2c9bc58fb","shop/render/facade.py",8,8,0,"from shop.render.intermediate import render_order"],["EVD-5c8241ce36e16819","$117",85,85,23,"    def total(self) -> Money:"],["EVD-5e3d87c185579640","$121",17,19,0,"def order_paths(root: Path) -> list[Path]:"],["EVD-5f15269c25e11967","shop/render/intermediate.py",6,6,0,"$51"],["EVD-5f753a04f576585b","$117",97,97,15,"        return cls(order_id=payload[\"order_id\"], lines=lines)"],["EVD-5ff808486c74736f","$117",41,42,4,"    def __str__(self) -> str:"],["EVD-6405258d305a1282","$123",12,12,0,"from shop.store.codec import decode, encode"],["EVD-653af1cabbbe417a","$117",35,35,39,"    def __add__(self, other: Money) -> Money:"],["EVD-6783cc17029c5852","$123",23,23,36,"$2"],["$14","shop/app/maintenance.py",1,1,0,"# Archkeel"],["EVD-6cfe32290010def4","architecture-contract.json",1,1,0,"{"],["EVD-6df5566c06174695","$117",35,35,29,"    def __add__(self, other: Money) -> Money:"],["EVD-6f5a6a9e4fa47055","$117",91,91,25,"    def to_dict(self) -> OrderPayload:"],["EVD-6fbd36d2c47c81f8","$117",8,8,0,"from dataclasses import dataclass"],["EVD-6fe2461604a4723c","$120",8,8,0,"from pathlib import Path"],["EVD-708c06c60b82f2a7","$122",30,30,12,"    parsed: OrderDocument = json.loads(document)"],["EVD-71716ad6c2134d34","$121",14,14,31,"    return root / f\"{order_id}{DOCUMENT_SUFFIX}\""],["$15","shop/render/facade.py",1,1,0,"# Archkeel"],["EVD-72372a3ea85bb31c","$115",35,35,36,"def describe_connection(connection: Connection) -> str:"],["EVD-735b836cead7e419","$116",15,23,4,"    try:"],["EVD-73c79d763526af76","$123",19,20,4,"    def save(self, order: Order) -> None:"],["EVD-74ddeaef7cdc525a","$116",18,18,67,"$0"],["EVD-77dabdd9ac9a201e","$116",18,18,52,"$0"],["EVD-781c3d777da02b93","$122",33,33,14,"        raise ValueError(f\"order document version {version} was written by another store\")"],["EVD-7b88e6b7b17c8a8c","$117",52,52,15,"        return Money(amount.cents * (100 - self.percent) // 100)"],["EVD-7b94d9808f72b720","shop/app/maintenance.py",12,12,4,"    vacuum(connection)"],["EVD-7c110b28a0df0f5f","$123",11,11,0,"from shop.store.backend import order_path, read_document, write_document"],["EVD-7f51fedbd4d4c267","$116",11,11,0,"from shop.render.facade import render_order, safe"],["EVD-809590eb3ddf92d6","$117",30,42,0,"class Money:"],["EVD-81ea2509d3cf2d51","$120",10,10,0,"ENCODING = \"utf-8\""],["EVD-827eb64915d3f3d1","$117",26,26,4,"    lines: list[LinePayload]"],["EVD-832db48c570c8ce0","$120",13,14,0,"def read_document(path: Path) -> str:"],["EVD-833e49daa46041b3","$117",22,22,19,"class OrderPayload(TypedDict):"],["EVD-8774c54c206b3af2","$122",20,20,11,"    order: OrderPayload"],["EVD-89d99e7a0b3b9fd3","$122",25,25,69,"$4"],["EVD-8b4173ee45cd16b0","$116",10,10,0,"from shop.app.orders import place_order"],["EVD-8d78f90faf8f2db6","$117",82,82,4,"    order_id: str"],["EVD-8ee8ada66bf8fc10","$120",14,14,35,"    return path.read_text(encoding=ENCODING)"],["EVD-933bbeffbe7cc2f8","$115",8,8,0,"from pathlib import Path"],["EVD-96ecc1244386d2d9","$117",59,59,16,"    unit_price: Money"],["EVD-976a02b50cb046c6","$121",10,10,0,"DOCUMENT_SUFFIX = \".json\""],["EVD-98e8a9e4b48ff15d","$117",18,18,4,"    quantity: int"],["EVD-9daa80cbabed8ba0","$115",25,25,11,"$5"],["EVD-9e74ddf8aa380382","$117",72,72,48,"    def from_dict(cls, payload: LinePayload) -> Line:"],["EVD-9f647874c3ddd340","$117",61,61,23,"    def total(self) -> Money:"],["EVD-9f8966569f535072","shop/store/__init__.py",8,8,0,"from shop.store.repository import OrderRepository"],["EVD-a2a4d5e6bd3ab2a3","$120",25,26,0,"def discard_document(path: Path) -> None:"],["$16","$124",1,1,0,"# Archkeel"],["EVD-a54579840df29e64","$121",19,19,11,"    return sorted(root.glob(f\"*{DOCUMENT_SUFFIX}\"))"],["EVD-a5540a12732ce8a0","$117",88,88,30,"            result = result + line.total()"],["EVD-a58c017b74a0ce6d","$115",32,32,11,"    return OrderRepository(store_dir).load(order_id).total()"],["EVD-a81ad4dfc4432e68","$123",6,6,0,"$51"],["EVD-a825188e58318989","$116",14,23,0,"def main(argv: list[str]) -> int:"],["EVD-a83b2490ca0443b4","$121",6,6,0,"$51"],["$17","$116",1,1,0,"# Archkeel"],["EVD-a96161054ab910f0","shop/app/maintenance.py",6,6,0,"$51"],["EVD-aa01569e504bae6c","$122",25,25,14,"$4"],["EVD-aa596964e86742bd","$122",20,20,4,"    order: OrderPayload"],["EVD-ac6210f7ea66f63c","$122",23,26,0,"def encode(order: Order) -> str:"],["EVD-ae32a6716562f39e","$123",20,20,63,"$3"],["EVD-ae3e0efd16661009","$116",18,18,12,"$0"],["EVD-af91ee021bacf2aa","$120",14,14,11,"    return path.read_text(encoding=ENCODING)"],["EVD-afb590cbb7cf5954","$123",8,8,0,"from pathlib import Path"],["EVD-afd0cf198ebc2e4f","$117",25,25,4,"    order_id: str"],["EVD-b05a1762998abb57","$117",19,19,4,"    unit_price: int"],["EVD-b09a505fab326d5a","$117",33,33,4,"    cents: int"],["EVD-b0f402cc74eb9e1a","$117",96,96,22,"$1"],["EVD-b294cd3ee3c7c698","$121",19,19,32,"    return sorted(root.glob(f\"*{DOCUMENT_SUFFIX}\"))"],["EVD-b2e814d241b4556d","$117",51,51,38,"    def apply(self, amount: Money) -> Money:"],["EVD-b40369c1d9f82ec1","$117",83,83,17,"    lines: tuple[Line, ...]"],["EVD-b5809056b0d2d4ce","$117",76,76,23,"            unit_price=Money(payload[\"unit_price\"]),"],["EVD-b6ab36b8cbc8abd2","$122",30,30,28,"    parsed: OrderDocument = json.loads(document)"],["EVD-b80791c644a0f00a","$121",19,19,18,"    return sorted(root.glob(f\"*{DOCUMENT_SUFFIX}\"))"],["EVD-b8153f097d4f6f8b","$115",25,25,71,"$5"],["EVD-b8472c7ac9dc6c74","$117",86,86,8,"        result = Money(0)"],["EVD-baa5ebd6927240c7","$118",15,15,11,"    return \"\\n\".join(lines)"],["EVD-bb058fe2332a7f1b","shop/app/maintenance.py",11,12,0,"def run_maintenance(connection: Connection) -> None:"],["$18","$117",1,1,0,"# Archkeel"],["EVD-bcd9058ba24a118a","$120",20,20,14,"    partial = path.with_suffix(f\"{path.suffix}.part\")"],["EVD-bcef9351d265aa13","$124",23,23,12,"            discard_document(candidate)"],["$19","$121",1,1,0,"# Archkeel"],["EVD-c10610b7a1b98b6b","$115",26,26,12,"    order = Order(order_id=order_id, lines=(line,))"],["EVD-c207800bbfaecd3a","shop/render/facade.py",6,6,0,"$51"],["EVD-c44d78e7201ad264","$118",6,6,0,"$51"],["EVD-c4ae8139ca820399","shop/render/facade.py",11,12,0,"def safe(value: str) -> str:"],["EVD-c54644bde9e9101b","$122",19,19,4,"    version: int"],["EVD-c88f0d6581c4ad5a","$117",57,57,4,"    description: str"],["EVD-c950c2e696960710","$116",20,20,8,"        print(safe(render_order(order)))"],["EVD-c991daacc9de08d7","$118",8,8,0,"from shop.model.entities import Order"],["EVD-ca13d9862b9b81f7","$116",8,8,0,"from pathlib import Path"],["EVD-cae8c0e1ec1b7c23","$115",15,15,4,"    from shop.store.sqlite import Connection"],["EVD-cb26e324deea5970","$122",34,34,11,"    return Order.from_dict(parsed[\"order\"])"],["EVD-cb9ee39184d05841","$122",8,8,0,"import json"],["EVD-cc11dbb3bd9e05fb","shop/render/intermediate.py",8,8,0,"from shop.render.text import render_order"],["EVD-cc70494be6f8b1f8","$119",6,6,0,"$51"],["EVD-cd4cbf212d2a3a4c","$122",26,26,11,"    return json.dumps(document, sort_keys=True)"],["EVD-cdb32424562c421b","$120",6,6,0,"$51"],["EVD-cde312752aeb6591","$117",49,49,4,"    percent: int"],["EVD-cf8e27a1f06f4855","$123",15,23,0,"class OrderRepository:"],["EVD-d1a4e82612885bf8","$118",14,14,17,"    lines.append(_indent(f\"Total: {order.total()}\"))"],["EVD-d1b70d9273097937","$117",80,80,1,"@dataclass(frozen=True, slots=True)"],["EVD-d304c9bd851acba2","$123",20,20,23,"$3"],["EVD-d3ebe0da699ef368","$123",20,20,8,"$3"],["EVD-d489e429536aba44","$115",12,12,0,"from shop.store import OrderRepository"],["EVD-d73f3509fba000e5","$117",55,55,1,"@dataclass(frozen=True, slots=True)"],["EVD-d80a75bcbfde3ec0","$117",51,51,28,"    def apply(self, amount: Money) -> Money:"],["EVD-d86333b864b965b3","$124",14,14,1,"@dataclass(frozen=True, slots=True)"],["EVD-d8fca82a3f584f5a","$122",6,6,0,"$51"],["EVD-da884023325e20c8","$117",72,72,32,"    def from_dict(cls, payload: LinePayload) -> Line:"],["EVD-daa05f47b32b9483","$117",95,97,4,"    def from_dict(cls, payload: OrderPayload) -> Order:"],["EVD-db14419f2eca8a41","$117",45,45,1,"@dataclass(frozen=True, slots=True)"],["EVD-db42ea9082a4945d","$117",61,62,4,"    def total(self) -> Money:"],["EVD-dc0a3a7501ee19b1","$117",6,6,0,"$51"],["EVD-de0535b632bbf9a5","$118",13,13,17,"    lines.extend(_indent(f\"{line.quantity} x {line.description}\") for line in order.lines)"],["$20","$115",1,1,0,"# Archkeel"],["EVD-e077aa75caee794f","$117",83,83,4,"    lines: tuple[Line, ...]"],["EVD-e0f88b132b28fe82","$123",22,22,37,"    def load(self, order_id: str) -> Order:"],["EVD-e2d93466c2b1ee5c","$120",22,22,4,"    partial.replace(path)"],["EVD-e32da9f19fec9395","$118",11,15,0,"def render_order(order: dict) -> str:"],["EVD-e70f569a2eb95368","$124",19,19,23,"def vacuum(connection: Connection) -> None:"],["EVD-ea5b17eeeff85142","$117",64,69,4,"    def to_dict(self) -> LinePayload:"],["EVD-eab6da8b941792d8","$122",16,16,20,"class OrderDocument(TypedDict):"],["$21","$118",1,1,0,"# Archkeel"],["EVD-ec0fe67b9d443379","$122",25,25,42,"$4"],["EVD-ecb3fa6409a4f536","$117",9,9,0,"from typing import TypedDict"],["EVD-ed3cfc06e043e57d","$123",22,23,4,"    def load(self, order_id: str) -> Order:"],["EVD-ed64ac8c02c504a8","$118",13,13,4,"    lines.extend(_indent(f\"{line.quantity} x {line.description}\") for line in order.lines)"],["EVD-ed97a6a2fb111212","$117",38,39,4,"    def __mul__(self, quantity: int) -> Money:"],["EVD-eff28e3e21752fa0","$123",10,10,0,"from shop.model.entities import Order"],["EVD-f19f85119e4f9693","$115",25,25,4,"$5"],["EVD-f1c0bc85b0d48c3d","$120",21,21,42,"    partial.write_text(document, encoding=ENCODING)"],["EVD-f306204066b62b9f","$117",72,77,4,"    def from_dict(cls, payload: LinePayload) -> Line:"],["EVD-f3e29659f2dc7586","$124",11,11,0,"from shop.store.backend import discard_document, order_paths"],["EVD-f444c1f0eee27cf5","$121",8,8,0,"from pathlib import Path"],["EVD-f4d31d51ea3e1e42","$117",17,17,4,"    description: str"],["EVD-f4f642647debf00c","$117",58,58,4,"    quantity: int"],["EVD-f672877e67023ac8","$116",6,6,0,"$51"],["EVD-f85359de8c6bd244","$117",29,29,1,"@dataclass(frozen=True, slots=True)"],["EVD-f8a2d5ed5f18af60","$115",27,27,4,"    OrderRepository(store_dir).save(order)"],["EVD-f909718e9306b98c","$122",30,30,4,"    parsed: OrderDocument = json.loads(document)"],["EVD-fae74776900ba6db","$117",39,39,15,"        return Money(self.cents * quantity)"],["EVD-fc14974701907ab7","$115",35,37,0,"def describe_connection(connection: Connection) -> str:"],["EVD-fd291905059136db","$117",14,19,0,"class LinePayload(TypedDict):"],["EVD-fd68302f088e77a9","$115",31,32,0,"def summarize(store_dir: Path, order_id: str) -> Money:"],["EVD-fd78f48dca4340ce","$123",23,23,15,"$2"],["EVD-ff9b0bda3a211da3","$122",9,9,0,"from typing import TypedDict"]],"imports":[["IMP-03885a05810e2a9f","FACT","$46","import","Import shop.store.sqlite.Connection",["$63","$112"],["EVD-cae8c0e1ec1b7c23"],[],[],[],["Connection",false,"$113",false,["$113"],0,false,false,"$63","shop.app","Connection","$57",true,"$112","$91",true]],["IMP-05cafa2b6a9ca69f","FACT","$46","import","Import shop.store.codec.decode",["$103","$108"],["EVD-6405258d305a1282"],[],[],[],["decode",false,"$106",false,["$106"],0,true,false,"$108","$91","decode","$57",true,"$103","$91",false]],["IMP-06704ec26dafa3cb","FACT","$46","import","Import shop.render.facade.safe",["$66","$85"],["EVD-7f51fedbd4d4c267"],[],[],[],["safe",false,"shop.render.facade.safe",false,["shop.render.facade.safe"],0,true,false,"$66","shop.cli","safe","$57",true,"$85","$84",false]],["IMP-118653f1d73aa79a","FACT","$46","import","Import pathlib.Path",["pathlib","$99"],["EVD-f444c1f0eee27cf5"],[],[],[],["Path",false,"pathlib.Path",false,["pathlib.Path"],0,true,false,"$99","$91","Path","$57",true,"pathlib","pathlib",false]],["IMP-16ccedd1f609248a","FACT","$46","import","Import shop.model.entities.Money",["$63","$69"],["EVD-13e6b96ba80aa9fa"],[],[],[],["Money",false,"$77",false,["$77"],0,true,false,"$63","shop.app","Money","$57",true,"$69","$68",false]],["IMP-1c796543547f675f","FACT","$46","import","$22",["__future__","$103"],["EVD-d8fca82a3f584f5a"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$103","$91","annotations","$57",true,"__future__","__future__",false]],["IMP-22d6acf9d6050c67","FACT","$46","import","$22",["__future__","$87"],["EVD-5f15269c25e11967"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$87","$84","annotations","$57",true,"__future__","__future__",false]],["IMP-272d211158330912","FACT","$46","import","$22",["__future__","$99"],["EVD-a83b2490ca0443b4"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$99","$91","annotations","$57",true,"__future__","__future__",false]],["IMP-298d7fb8679c49d3","FACT","$46","import","$22",["__future__","$85"],["EVD-c207800bbfaecd3a"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$85","$84","annotations","$57",true,"__future__","__future__",false]],["IMP-2dc76c96a33ea0db","FACT","$46","import","Import shop.store.sqlite.Connection",["$61","$112"],["EVD-54b158ca4efa9858"],[],[],[],["Connection",false,"$113",false,["$113"],0,true,false,"$61","shop.app","Connection","$57",true,"$112","$91",false]],["IMP-35c1c35b56f8cf07","FACT","$46","import","Import shop.store.sqlite.vacuum",["$61","$112"],["EVD-54b158ca4efa9858"],[],[],[],["vacuum",false,"$114",false,["$114"],0,true,false,"$61","shop.app","vacuum","$57",true,"$112","$91",false]],["IMP-373ca14ad39cb31e","FACT","$46","import","Import shop.store.codec.encode",["$103","$108"],["EVD-6405258d305a1282"],[],[],[],["encode",false,"$107",false,["$107"],0,true,false,"$108","$91","encode","$57",true,"$103","$91",false]],["IMP-391e8de5f075e214","FACT","$46","import","Import json",["json","$103"],["EVD-cb9ee39184d05841"],[],[],[],["json",false,null,false,[],0,true,false,"$103","$91",null,null,true,"json","json",false]],["IMP-40dc47b4a52f3f04","FACT","$46","import","$22",["__future__","$93"],["EVD-cc70494be6f8b1f8"],[],[],[],["annotations",false,"$38",true,["$38"],0,true,false,"$93","$91","annotations","$57",true,"__future__","__future__",false]],["IMP-41f62d4d879417db","FACT","$46","import","Import shop.store.backend.files.discard_document",["$93","$94"],["EVD-34ef3407cb9a05ed"],[],[],[],["discard_document",true,"$96",true,["$96"],0,true,false,"$93","$91","discard_document","$57",true,"$94","$91",false]],["IMP-433582f82cd7fab1","FACT","$46","import","Import shop.model.entities.OrderPayload",["$69","$103"],["EVD-0f6ca1ef6fa8044a"],[],[],[],["OrderPayload",false,"$83",false,["$83"],0,true,false,"$103","$91","OrderPayload","$57",true,"$69","$68",false]],["IMP-43acd31d3147af83","FACT","$46","import","Import pathlib.Path",["pathlib","$108"],["EVD-afb590cbb7cf5954"],[],[],[],["Path",false,"pathlib.Path",false,["pathlib.Path"],0,true,false,"$108","$91","Path","$57",true,"pathlib","pathlib",false]],["IMP-43bbb90887945961","FACT","$46","import","Import typing.TYPE_CHECKING",["$63","typing"],["EVD-36d7c34b4c900849"],[],[],[],["TYPE_CHECKING",false,"typing.TYPE_CHECKING",false,["typing.TYPE_CHECKING"],0,true,false,"$63","shop.app","TYPE_CHECKING","$57",true,"typing","typing",false]],["IMP-4b0aa8afde47d300","FACT","$46","import","Import shop.store.backend.paths.order_path",["$93","$99"],["EVD-44e79b72ed075656"],[],[],[],["order_path",true,"$101",true,["$101"],0,true,false,"$93","$91","order_path","$57",true,"$99","$91",false]],["IMP-5f3a2916e5c4b873","FACT","$46","import","Import shop.model.entities.Order",["$69","$89"],["EVD-c991daacc9de08d7"],[],[],[],["Order",false,"$79",false,["$79"],0,true,false,"$89","$84","Order","$57",true,"$69","$68",false]],["IMP-5f69fd090c6fbedd","FACT","$46","import","Import shop.model.entities.Order",["$69","$103"],["EVD-0f6ca1ef6fa8044a"],[],[],[],["Order",false,"$79",false,["$79"],0,true,false,"$103","$91","Order","$57",true,"$69","$68",false]],["IMP-6985ff97250b4a9e","FACT","$46","import","Import shop.store.backend.write_document",["$93","$108"],["EVD-7c110b28a0df0f5f"],[],[],[],["write_document",false,"$98",false,["shop.store.backend.write_document","$98"],0,true,false,"$108","$91","write_document","$57",true,"$93","$91",false]],["IMP-6fc8896a544cf33e","FACT","$46","import","Import shop.store.backend.read_document",["$93","$108"],["EVD-7c110b28a0df0f5f"],[],[],[],["read_document",false,"$97",false,["shop.store.backend.read_document","$97"],0,true,false,"$108","$91","read_document","$57",true,"$93","$91",false]],["IMP-73286559e2179cec","FACT","$46","import","Import shop.store.backend.order_path",["$93","$108"],["EVD-7c110b28a0df0f5f"],[],[],[],["order_path",false,"$101",false,["shop.store.backend.order_path","$101"],0,true,false,"$108","$91","order_path","$57",true,"$93","$91",false]],["IMP-74924e8f5c7757f4","FACT","$46","import","$22",["__future__","$69"],["EVD-dc0a3a7501ee19b1"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$69","$68","annotations","$57",true,"__future__","__future__",false]],["IMP-7557dc2b068fbad5","FACT","$46","import","Import shop.store.backend.files.write_document",["$93","$94"],["EVD-34ef3407cb9a05ed"],[],[],[],["write_document",true,"$98",true,["$98"],0,true,false,"$93","$91","write_document","$57",true,"$94","$91",false]],["IMP-7baa098cf9f32582","FACT","$46","import","Import pathlib.Path",["pathlib","$63"],["EVD-933bbeffbe7cc2f8"],[],[],[],["Path",false,"pathlib.Path",false,["pathlib.Path"],0,true,false,"$63","shop.app","Path","$57",true,"pathlib","pathlib",false]],["IMP-854cd25ac952c923","FACT","$46","import","Import shop.model.entities.Order",["$69","$108"],["EVD-eff28e3e21752fa0"],[],[],[],["Order",false,"$79",false,["$79"],0,true,false,"$108","$91","Order","$57",true,"$69","$68",false]],["IMP-87894cd70d035bc3","FACT","$46","import","Import typing.TypedDict",["$103","typing"],["EVD-ff9b0bda3a211da3"],[],[],[],["TypedDict",false,"typing.TypedDict",false,["typing.TypedDict"],0,true,false,"$103","$91","TypedDict","$57",true,"typing","typing",false]],["IMP-8bbf941e901f7f4a","FACT","$46","import","Import dataclasses.dataclass",["dataclasses","$112"],["EVD-4e97525dc3f2aafe"],[],[],[],["dataclass",false,"$44",false,["$44"],0,true,false,"$112","$91","dataclass","$57",true,"dataclasses","dataclasses",false]],["IMP-8cb1beabb96ccce3","FACT","$46","import","$22",["__future__","$61"],["EVD-a96161054ab910f0"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$61","shop.app","annotations","$57",true,"__future__","__future__",false]],["IMP-962198a948c076ad","FACT","$46","import","Import typing.TypedDict",["$69","typing"],["EVD-ecb3fa6409a4f536"],[],[],[],["TypedDict",false,"typing.TypedDict",false,["typing.TypedDict"],0,true,false,"$69","$68","TypedDict","$57",true,"typing","typing",false]],["IMP-9c9a26650d07d53f","FACT","$46","import","Import shop.store.backend.discard_document",["$93","$112"],["EVD-f3e29659f2dc7586"],[],[],[],["discard_document",false,"$96",false,["shop.store.backend.discard_document","$96"],0,true,false,"$112","$91","discard_document","$57",true,"$93","$91",false]],["IMP-9f25bb7363e01cf3","FACT","$46","import","Import shop.model.entities.Line",["$63","$69"],["EVD-13e6b96ba80aa9fa"],[],[],[],["Line",false,"$72",false,["$72"],0,true,false,"$63","shop.app","Line","$57",true,"$69","$68",false]],["IMP-a43851fde0771792","FACT","$46","import","Import pathlib.Path",["pathlib","$66"],["EVD-ca13d9862b9b81f7"],[],[],[],["Path",false,"pathlib.Path",false,["pathlib.Path"],0,true,false,"$66","shop.cli","Path","$57",true,"pathlib","pathlib",false]],["IMP-a6f48b1a01a28dc6","FACT","$46","import","$22",["__future__","$91"],["EVD-40830476b83d35c2"],[],[],[],["annotations",false,"$38",true,["$38"],0,true,false,"$91","$91","annotations","$57",true,"__future__","__future__",false]],["IMP-a84fd48911442825","FACT","$46","import","Import shop.store.backend.paths.order_paths",["$93","$99"],["EVD-44e79b72ed075656"],[],[],[],["order_paths",true,"$102",true,["$102"],0,true,false,"$93","$91","order_paths","$57",true,"$99","$91",false]],["IMP-ac184bc3f4c77a42","FACT","$46","import","$22",["__future__","$112"],["EVD-37c486563c79e998"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$112","$91","annotations","$57",true,"__future__","__future__",false]],["IMP-b3d2ef7c426c42f0","FACT","$46","import","Import dataclasses.dataclass",["dataclasses","$69"],["EVD-6fbd36d2c47c81f8"],[],[],[],["dataclass",false,"$44",false,["$44"],0,true,false,"$69","$68","dataclass","$57",true,"dataclasses","dataclasses",false]],["IMP-b6b0e3c086bad72f","FACT","$46","import","Import shop.store.backend.files.read_document",["$93","$94"],["EVD-34ef3407cb9a05ed"],[],[],[],["read_document",true,"$97",true,["$97"],0,true,false,"$93","$91","read_document","$57",true,"$94","$91",false]],["IMP-bb173b5fb587bdc1","FACT","$46","import","Import shop.model.entities.Order",["$63","$69"],["EVD-13e6b96ba80aa9fa"],[],[],[],["Order",false,"$79",false,["$79"],0,true,false,"$63","shop.app","Order","$57",true,"$69","$68",false]],["IMP-bd06e8b32b124cc0","FACT","$46","import","$22",["__future__","$108"],["EVD-a81ad4dfc4432e68"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$108","$91","annotations","$57",true,"__future__","__future__",false]],["IMP-bdc3c1214b95ab15","FACT","$46","import","$22",["__future__","$89"],["EVD-c44d78e7201ad264"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$89","$84","annotations","$57",true,"__future__","__future__",false]],["IMP-c0bf18fb78cbe14c","FACT","$46","import","Import shop.store.repository.OrderRepository",["$91","$108"],["EVD-9f8966569f535072"],[],[],[],["OrderRepository",true,"$109",true,["$109"],0,true,false,"$91","$91","OrderRepository","$57",true,"$108","$91",false]],["IMP-c14d352eb623ce98","FACT","$46","import","Import shop.app.orders.place_order",["$63","$66"],["EVD-8b4173ee45cd16b0"],[],[],[],["place_order",false,"$64",false,["$64"],0,true,false,"$66","shop.cli","place_order","$57",true,"$63","shop.app",false]],["IMP-c19389d425ac8d7e","FACT","$46","import","Import shop.store.OrderRepository",["$63","$91"],["EVD-d489e429536aba44"],[],[],[],["OrderRepository",false,"$109",false,["shop.store.OrderRepository","$109"],0,true,false,"$63","shop.app","OrderRepository","$57",true,"$91","$91",false]],["IMP-c4bf0045fdd26be5","FACT","$46","import","Import shop.render.text.render_order",["$87","$89"],["EVD-cc11dbb3bd9e05fb"],[],[],[],["render_order",false,"$90",false,["$90"],0,true,false,"$87","$84","render_order","$57",true,"$89","$84",false]],["IMP-cad3239b0443530a","FACT","$46","import","$22",["__future__","$63"],["EVD-38710e4b9bb44644"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$63","shop.app","annotations","$57",true,"__future__","__future__",false]],["IMP-d74d063c1c3b04f9","FACT","$46","import","Import shop.render.intermediate.render_order",["$85","$87"],["EVD-5a3cb5f2c9bc58fb"],[],[],[],["render_order",true,"$88",true,["$88"],0,true,false,"$85","$84","render_order","$57",true,"$87","$84",false]],["IMP-e02d0115bcc4fb2a","FACT","$46","import","$22",["__future__","$66"],["EVD-f672877e67023ac8"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$66","shop.cli","annotations","$57",true,"__future__","__future__",false]],["IMP-e09a9f724cff3288","FACT","$46","import","Import shop.render.facade.render_order",["$66","$85"],["EVD-7f51fedbd4d4c267"],[],[],[],["render_order",false,"$88",false,["$86","$88"],0,true,false,"$66","shop.cli","render_order","$57",true,"$85","$84",false]],["IMP-e792ec1e804cd973","FACT","$46","import","Import pathlib.Path",["pathlib","$94"],["EVD-6fe2461604a4723c"],[],[],[],["Path",false,"pathlib.Path",false,["pathlib.Path"],0,true,false,"$94","$91","Path","$57",true,"pathlib","pathlib",false]],["IMP-f2339e702a50c2ea","FACT","$46","import","Import pathlib.Path",["pathlib","$112"],["EVD-0bf559167b8b8e33"],[],[],[],["Path",false,"pathlib.Path",false,["pathlib.Path"],0,true,false,"$112","$91","Path","$57",true,"pathlib","pathlib",false]],["IMP-f4e5d009557d854f","FACT","$46","import","$22",["__future__","$94"],["EVD-cdb32424562c421b"],[],[],[],["annotations",false,"$38",false,["$38"],0,true,false,"$94","$91","annotations","$57",true,"__future__","__future__",false]],["IMP-f54cf5a2e86cdf79","FACT","$46","import","Import shop.store.backend.order_paths",["$93","$112"],["EVD-f3e29659f2dc7586"],[],[],[],["order_paths",false,"$102",false,["shop.store.backend.order_paths","$102"],0,true,false,"$112","$91","order_paths","$57",true,"$93","$91",false]]],"metrics":[["METRIC-0477b10f3aa518a5","FACT","overview","interface_surface","Interface surface",[],[],[],["IMP-03885a05810e2a9f","IMP-06704ec26dafa3cb","IMP-16ccedd1f609248a","IMP-2dc76c96a33ea0db","IMP-35c1c35b56f8cf07","IMP-433582f82cd7fab1","IMP-5f3a2916e5c4b873","IMP-5f69fd090c6fbedd","IMP-854cd25ac952c923","IMP-9f25bb7363e01cf3","IMP-bb173b5fb587bdc1","IMP-c14d352eb623ce98","IMP-c19389d425ac8d7e","IMP-e09a9f724cff3288"],[],["api",10]],["METRIC-115ac1d218349491","FACT","overview","forbidden_package_edges","Forbidden package edges",[],[],[],[],[],["violations",0]],["METRIC-130e9ec98394803f","FACT","overview","private_crossings","Confirmed private symbol crossings",[],[],[],[],[],["api",0]],["METRIC-1ea50a8caf608504","FACT","overview","symbols","Symbols",[],[],[],["SYM-01d2c4dfc342d97f","SYM-03a741a00a38e247","SYM-094cb8a1abb8f245","SYM-0f98fb6f9a3c1a88","SYM-1268d346aa3386e0","SYM-1413fc34058d59ad","SYM-1d32533c0809c896","SYM-213a7c362a680705","SYM-25e035a8f02b4217","SYM-306fffdb8811c478","SYM-3084c7286ff5a998","SYM-31c700c61943c8dd","SYM-3ddc33e5a1bedfc4","SYM-421012b9fa5f6934","SYM-44ce6b303fb819a9","SYM-4698877829fcbfae","SYM-521e10b69216a628","SYM-5e29728aec775442","SYM-5e8c22c32a17a88c","SYM-617dbdf906017b98","SYM-651121df4d1e8ad5","SYM-6a6e23a6aabf9211","SYM-785f9f9b17ce8f3c","SYM-7be0fbfe04d8ef32","SYM-891b0ba59ee7a735","SYM-912783379834f463","SYM-98565702bb3be343","SYM-9961cb1a552ff2e5","SYM-a3e7c6567ab50c7e","SYM-a50e2ec88a399b26","SYM-b183fc3dea9441aa","SYM-bdbad6c793f01a7e","SYM-c24e1dc0171bbef6","SYM-c6dc50ed43219b97","SYM-d63ca702f952e689","SYM-ebdd1de485e05bb4","SYM-f3293ef7f8441e4a","SYM-f4f91ac449914582","SYM-f66eff607f8f1109","SYM-f7d39b41d9b7b9a7","SYM-f9d489ab3f329c71"],[],["components",41]],["METRIC-45b586bf31456c32","FACT","overview","violating_import_sites","Violating import sites",[],[],[],[],[],["violations",0]],["METRIC-5610c365b3e34d3d","FACT","overview","typing_signals","Typing & dynamic signals",[],[],[],[],[],["types",0]],["METRIC-58f9e6977954a47e","FACT","overview","module_cycles","Module cycles",[],[],[],[],[],["cycles",0]],["METRIC-5e1b38214272f111","FACT","overview","untyped_private_accesses","Private attribute accesses through untyped or Any parameters",[],[],[],[],[],["api",0]],["METRIC-9a8bf9ba32aac4c3","FACT","overview","ast_coverage","AST coverage",[],[],[],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["coverage","100.0%"]],["METRIC-a4770d56d0e45bc8","FACT","overview","affected_violation_modules","Affected source modules",[],[],[],[],[],["violations",0]],["METRIC-af8a12e31cd6b969","FACT","overview","package_cycles","Package cycles",[],[],[],[],[],["cycles",0]],["METRIC-b28b1ed9821f38c6","FACT","overview","packages","Packages",[],[],[],["PKG-40ff2c6a28c6b584","PKG-8b1cb6422b713e24","PKG-9b03abc666a221d0","PKG-9fabb79a6f08c53a","PKG-e385c617d48de32a"],[],["package",5]],["METRIC-b2983be8c3741e5b","FACT","overview","source_files","Source files",[],[],[],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["coverage",14]],["METRIC-b5246b04f97b5e43","FACT","overview","call_resolution","Uniquely resolved calls",[],[],[],["CALL-083cd161b4d9cc59","CALL-0c84d7ab5f90b9e7","CALL-0ca4df4127aa69ca","CALL-182446c0a2215637","CALL-250f740c9757299f","CALL-28be3d0e643e48cb","CALL-2a15a4f5a8d405a7","CALL-2a3395ee738e9ddc","CALL-2b8f5b54e2d2e5a9","CALL-2c6c25b9c187bda9","CALL-31ac102849a30f24","CALL-3b59994b4a20e51a","CALL-3e8e0ec25f9e9a3c","CALL-44d00f3387c412c0","CALL-46bd5eb5b49d27e1","CALL-4ba2fb087ae069a0","CALL-4d5de6fb6fc67f39","CALL-59f4ad4fd7e392a1","CALL-5cc9f12ce53da1f0","CALL-5d289aab81c5452a","CALL-67ca91b834a98839","CALL-68e1674deaeb3f9a","CALL-6d94b3b30296660a","CALL-75b6ee4ead83d132","CALL-8668702d554123fe","CALL-8ad11b4451bae8d5","CALL-9a91649a6d292045","CALL-9e1f51182d186d06","CALL-9ff4d9a1d24d8931","CALL-a06e0f01bde1adb7","CALL-a49a3c573401ecdc","CALL-cade0dd922464ad1","CALL-cb31d6cdcfae43b0","CALL-cc72be80a115c456","CALL-d7a1fe0547f73197","CALL-d821b880d4863ce7","CALL-d83a368dc39c3d15","CALL-ed4fec0e09f45c36","CALL-f1d0ad2553c86959","CALL-f2897f43663b6317","CALL-f2c895a3c3372054","CALL-f7a3dec1d1b6c4a4","CALL-ff31d6af7d88ebe7"],[],["calls","71.67%"]],["METRIC-c6ba710e0c094515","FACT","overview","violations","Contract violations",[],[],[],[],[],["violations",0]],["METRIC-cd26a4b22ffceb0b","FACT","overview","unresolved_calls","Unresolved calls",[],[],[],["CALL-1c953772015daea2","CALL-84f1a173601b686d","CALL-aae1a8ccb0495442","CALL-c2a99e49722d37c3","CALL-cdc0f88188468209","CALL-cfda7b21bdd2cca0","CALL-f9335c1966589bca"],[],["calls",7]],["METRIC-f96ad8a9b8498c26","FACT","overview","rollup_only_package_cycles","Package cycles no module cycle crosses",[],[],[],[],[],["cycles",0]],["METRIC-fbc6c1d4c3b6db8f","FACT","overview","modules","Modules",[],[],[],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["module",14]]],"modules":[["$23","FACT","$54","module","$85",["$84","$85"],["$15"],[],[],[],[["render_order","safe"],true,false,1,1,"shop/render/facade.py","$84","$85",1,1]],["$24","FACT","$54","module","$99",["$91","$99"],["$19"],[],[],[],[[],false,false,1,0,"$121","$91","$99",5,3]],["$25","FACT","$54","module","$94",["$91","$94"],["$13"],[],[],[],[[],false,false,1,0,"$120","$91","$94",5,4]],["$26","FACT","$54","module","$112",["$91","$112"],["$16"],[],[],[],[[],false,false,2,1,"$124","$91","$112",2,2]],["$27","FACT","$54","module","$66",["shop.cli","$66"],["$17"],[],[],[],[[],false,false,0,2,"$116","shop.cli","$66",0,1]],["$28","FACT","$54","module","$87",["$84","$87"],["$12"],[],[],[],[[],false,false,1,1,"shop/render/intermediate.py","$84","$87",2,0]],["$29","FACT","$54","module","$63",["shop.app","$63"],["$20"],[],[],[],[[],false,false,1,3,"$115","shop.app","$63",1,3]],["$30","FACT","$54","module","$91",["$91","$91"],["$10"],[],[],[],[["OrderRepository"],true,true,1,1,"shop/store/__init__.py","$91","$91",2,0]],["$31","FACT","$54","module","$103",["$91","$103"],["$11"],[],[],[],[[],false,false,1,1,"$122","$91","$103",4,4]],["$32","FACT","$54","module","$61",["shop.app","$61"],["$14"],[],[],[],[[],false,false,0,1,"shop/app/maintenance.py","shop.app","$61",0,1]],["$33","FACT","$54","module","$69",["$68","$69"],["$18"],[],[],[],[["Line","LinePayload","Money","Order","OrderPayload"],true,false,4,0,"$117","$68","$69",5,16]],["$34","FACT","$54","module","$108",["$91","$108"],["$8"],[],[],[],[[],false,false,1,3,"$123","$91","$108",3,4]],["$35","FACT","$54","module","$89",["$84","$89"],["$21"],[],[],[],[[],false,false,1,1,"$118","$84","$89",3,2]],["$36","FACT","$54","module","$93",["$91","$93"],["$9"],[],[],[],[["discard_document","order_path","order_paths","read_document","write_document"],true,true,2,2,"$119","$91","$93",4,0]]],"packages":[["PKG-40ff2c6a28c6b584","FACT","package_topology","package","$84",["$84"],[],[],["$23","$28","$35"],[],[["$68"],1,1,3,"$84",1]],["PKG-8b1cb6422b713e24","FACT","package_topology","package","shop.app",["shop.app"],[],[],["$29","$32"],[],[["$68","$91"],1,2,2,"shop.app",1]],["PKG-9b03abc666a221d0","FACT","package_topology","package","$91",["$91"],[],[],["$24","$25","$26","$30","$31","$34","$36"],[],[["$68"],1,1,7,"$91",2]],["PKG-9fabb79a6f08c53a","FACT","package_topology","package","shop.cli",["shop.cli"],[],[],["$27"],[],[["shop.app","$84"],0,2,1,"shop.cli",0]],["PKG-e385c617d48de32a","FACT","package_topology","package","$68",["$68"],[],[],["$33"],[],[[],3,0,1,"$68",3]]],"path_observations":[["UNKNOWN-PATH-1fc4669d2fe17fa6","UNKNOWN","read_write_paths","path_segment_not_statically_observed","shop.store → shop.model.entities lacks direct static import evidence",["$69","$91"],[],["PATH-SHOP-PLACE-ORDER"],[],[],["PATH-SHOP-PLACE-ORDER","$37","$91","UNKNOWN","$69"]],["UNKNOWN-PATH-691aca3e6620bb4f","UNKNOWN","read_write_paths","path_segment_not_statically_observed","shop.app.orders → shop.store lacks direct static import evidence",["$63","$91"],[],["PATH-SHOP-PLACE-ORDER"],[],[],["PATH-SHOP-PLACE-ORDER","$37","$63","UNKNOWN","$91"]],["UNKNOWN-PATH-8135df7987d7fc62","UNKNOWN","read_write_paths","path_segment_not_statically_observed","shop.cli.main → shop.app.orders lacks direct static import evidence",["$63","$66"],[],["PATH-SHOP-PLACE-ORDER"],[],[],["PATH-SHOP-PLACE-ORDER","$37","$66","UNKNOWN","$63"]]],"python_version":"3.11.12","references":[["REF-1bfda9f551c3a61b","FACT","$40","$125","Reference OrderPayload",["$83","$105"],["EVD-8774c54c206b3af2"],[],[],[],["$m","$m","OrderPayload","SYM-ebdd1de485e05bb4","$103","$105","resolved",["$83"],"value"]],["REF-1ca870ea02ec3df7","FACT","$40","$125","Reference LinePayload",["$72","$76"],["EVD-3b29e5a0919fffbd"],[],[],[],["SYM-4698877829fcbfae","$74","LinePayload","SYM-f4f91ac449914582","$69","$72","resolved",["$76"],"value"]],["REF-2845a79b997f3eb3","FACT","$40","$125","Reference ENCODING",["$95","$98"],["EVD-f1c0bc85b0d48c3d"],[],[],[],["$m","$m","ENCODING","SYM-3ddc33e5a1bedfc4","$94","$98","resolved",["$95"],"value"]],["REF-28f92e5024233324","FACT","$40","$125","Reference DOCUMENT_SUFFIX",["$100","$102"],["EVD-b294cd3ee3c7c698"],[],[],[],["$m","$m","DOCUMENT_SUFFIX","SYM-5e29728aec775442","$99","$102","resolved",["$100"],"value"]],["REF-2b55a2aa682d4dcc","FACT","$40","$125","Reference Connection",["$61","$113"],["EVD-38891c635c506c91"],[],[],[],["SYM-617dbdf906017b98","$62","Connection","$32","$61","$61","resolved",["$113"],"value"]],["REF-305bb7d1824c48c7","FACT","$40","$125","Reference Line",["$72","$72"],["EVD-9e74ddf8aa380382"],[],[],[],["SYM-421012b9fa5f6934","$73","Line","SYM-f4f91ac449914582","$69","$72","resolved",["$72"],"value"]],["REF-35dd66df641a5df3","FACT","$40","$125","Reference Connection",["$112","$113"],["EVD-e70f569a2eb95368"],[],[],[],["SYM-03a741a00a38e247","$114","Connection","$26","$112","$112","resolved",["$113"],"value"]],["REF-3867f271aad4cd82","FACT","$40","$125","Reference Money",["$72","$77"],["EVD-96ecc1244386d2d9"],[],[],[],["$m","$m","Money","SYM-f4f91ac449914582","$69","$72","resolved",["$77"],"value"]],["REF-3badae467c662cc5","FACT","$40","$125","Reference Money",["$63","$77"],["EVD-0f1718615c647d6d"],[],[],[],["SYM-651121df4d1e8ad5","$65","Money","$29","$63","$63","resolved",["$77"],"value"]],["REF-43f7d894300ffef6","FACT","$40","$125","Reference DOCUMENT_SUFFIX",["$100","$101"],["EVD-71716ad6c2134d34"],[],[],[],["$m","$m","DOCUMENT_SUFFIX","SYM-912783379834f463","$99","$101","resolved",["$100"],"value"]],["REF-4b5b66a49e898e2e","FACT","$40","$125","Reference Money",["$77","$79"],["EVD-5c8241ce36e16819"],[],[],[],["SYM-306fffdb8811c478","$82","Money","SYM-31c700c61943c8dd","$69","$79","resolved",["$77"],"value"]],["REF-5baaffd310306267","FACT","$40","$125","Reference Order",["$63","$79"],["EVD-45244797ec95e427"],[],[],[],["SYM-1413fc34058d59ad","$64","Order","$29","$63","$63","resolved",["$79"],"value"]],["REF-5bbb67dda517182c","FACT","$40","$125","Reference LinePayload",["$76","$83"],["EVD-54388728e808af06"],[],[],[],["$m","$m","LinePayload","SYM-a3e7c6567ab50c7e","$69","$83","resolved",["$76"],"value"]],["REF-62c5766dcd9edd1e","FACT","$40","$125","Reference Money",["$77","$77"],["EVD-653af1cabbbe417a"],[],[],[],["SYM-521e10b69216a628","$78","Money","SYM-6a6e23a6aabf9211","$69","$77","resolved",["$77"],"value"]],["REF-7233f986b60ad68a","FACT","$40","$125","Reference Money",["$77","$77"],["EVD-3c3d843fb403333d"],[],[],[],["SYM-c24e1dc0171bbef6","shop.model.entities.Money.__mul__","Money","SYM-6a6e23a6aabf9211","$69","$77","resolved",["$77"],"value"]],["REF-75c729a6c7515cf2","FACT","$40","$125","Reference DOCUMENT_VERSION",["$104","$107"],["EVD-ec0fe67b9d443379"],[],[],[],["$m","$m","DOCUMENT_VERSION","SYM-c6dc50ed43219b97","$103","$107","resolved",["$104"],"value"]],["REF-7a8eeb0c25e9c774","FACT","$40","$125","Reference OrderPayload",["$79","$83"],["EVD-6f5a6a9e4fa47055"],[],[],[],["SYM-1268d346aa3386e0","$81","OrderPayload","SYM-31c700c61943c8dd","$69","$79","resolved",["$83"],"value"]],["REF-8c52efeaec2f8091","FACT","$40","$125","Reference Order",["$79","$109"],["EVD-0438ee79361aecbd"],[],[],[],["SYM-98565702bb3be343","$111","Order","SYM-f9d489ab3f329c71","$108","$109","resolved",["$79"],"value"]],["REF-8f8c9e0a521ac5f1","FACT","$40","$125","Reference Money",["$77","$77"],["EVD-6df5566c06174695"],[],[],[],["SYM-521e10b69216a628","$78","Money","SYM-6a6e23a6aabf9211","$69","$77","resolved",["$77"],"value"]],["REF-92ff1366448818f0","FACT","$40","$125","Reference LinePayload",["$72","$76"],["EVD-da884023325e20c8"],[],[],[],["SYM-421012b9fa5f6934","$73","LinePayload","SYM-f4f91ac449914582","$69","$72","resolved",["$76"],"value"]],["REF-a7382d364b9d7733","FACT","$40","$125","Reference OrderDocument",["$105","$107"],["EVD-aa01569e504bae6c"],[],[],[],["$m","$m","OrderDocument","SYM-c6dc50ed43219b97","$103","$107","resolved",["$105"],"value"]],["REF-b2dfecfd4123a062","FACT","$40","$125","Reference OrderDocument",["$105","$106"],["EVD-708c06c60b82f2a7"],[],[],[],["$m","$m","OrderDocument","SYM-094cb8a1abb8f245","$103","$106","resolved",["$105"],"value"]],["REF-b2ef9c4b6f2d63f4","FACT","$40","$125","Reference Money",["$70","$77"],["EVD-d80a75bcbfde3ec0"],[],[],[],["SYM-b183fc3dea9441aa","$71","Money","SYM-1d32533c0809c896","$69","$70","resolved",["$77"],"value"]],["REF-b4fa9a4d65c47f5a","FACT","$40","$125","Reference Order",["$79","$103"],["EVD-236abf80e8185e88"],[],[],[],["SYM-094cb8a1abb8f245","$106","Order","$31","$103","$103","resolved",["$79"],"value"]],["REF-ba23f70777e35599","FACT","$40","$125","Reference Line",["$72","$79"],["EVD-b40369c1d9f82ec1"],[],[],[],["$m","$m","Line","SYM-31c700c61943c8dd","$69","$79","resolved",["$72"],"value"]],["REF-d1a538704e91b6fa","FACT","$40","$125","Reference Order",["$79","$103"],["EVD-09134357b4a872f1"],[],[],[],["SYM-c6dc50ed43219b97","$107","Order","$31","$103","$103","resolved",["$79"],"value"]],["REF-e6a966895dd8c31d","FACT","$40","$125","Reference Order",["$79","$109"],["EVD-e0f88b132b28fe82"],[],[],[],["SYM-7be0fbfe04d8ef32","$110","Order","SYM-f9d489ab3f329c71","$108","$109","resolved",["$79"],"value"]],["REF-e8c1acd4b8cb7a01","FACT","$40","$125","Reference Connection",["$63","$113"],["EVD-72372a3ea85bb31c"],[],[],[],["SYM-44ce6b303fb819a9","shop.app.orders.describe_connection","Connection","$29","$63","$63","$55",["$113"],"value"]],["REF-eaef3313391645d6","FACT","$40","$125","Reference ENCODING",["$95","$97"],["EVD-8ee8ada66bf8fc10"],[],[],[],["$m","$m","ENCODING","SYM-0f98fb6f9a3c1a88","$94","$97","resolved",["$95"],"value"]],["REF-eb0c0e912d4392a2","FACT","$40","$125","Reference Money",["$70","$77"],["EVD-b2e814d241b4556d"],[],[],[],["SYM-b183fc3dea9441aa","$71","Money","SYM-1d32533c0809c896","$69","$70","resolved",["$77"],"value"]],["REF-eb421da07cdf2ed2","FACT","$40","$125","Reference DOCUMENT_VERSION",["$104","$106"],["EVD-05fd09bb70b1612d"],[],[],[],["$m","$m","DOCUMENT_VERSION","SYM-094cb8a1abb8f245","$103","$106","resolved",["$104"],"value"]],["REF-f0acc3c1106a6867","FACT","$40","$125","Reference OrderPayload",["$79","$83"],["EVD-4ae1cbcd504ea7e5"],[],[],[],["SYM-f3293ef7f8441e4a","$80","OrderPayload","SYM-31c700c61943c8dd","$69","$79","resolved",["$83"],"value"]],["REF-f7a398c7bdecd0f2","FACT","$40","$125","Reference Order",["$79","$79"],["EVD-39161d918b372be5"],[],[],[],["SYM-f3293ef7f8441e4a","$80","Order","SYM-31c700c61943c8dd","$69","$79","resolved",["$79"],"value"]],["REF-fc614f63b89e9ca0","FACT","$40","$125","Reference Money",["$72","$77"],["EVD-9f647874c3ddd340"],[],[],[],["SYM-213a7c362a680705","$75","Money","SYM-f4f91ac449914582","$69","$72","resolved",["$77"],"value"]]],"runtime":{"name":"python","required":">=3.11","version":"3.11.12"},"schema_version":"2.0.0","scope_observations":[["INSIDE-REQUIRES-EVALUATION-77bb2dbd9d0df98d","FACT","components","inside_rule_evaluation","store:STORE-REQUIRES-COMPLETE evaluated its scoped imports",["$93","$93","$93","$93","$93","$103","$103","$108","$108","$108","$108","$108","$112","$112"],["EVD-6405258d305a1282","EVD-6405258d305a1282","EVD-7c110b28a0df0f5f","EVD-7c110b28a0df0f5f","EVD-7c110b28a0df0f5f","EVD-f3e29659f2dc7586","EVD-f3e29659f2dc7586"],["store:STORE-REQUIRES-COMPLETE"],["IMP-05cafa2b6a9ca69f","IMP-373ca14ad39cb31e","IMP-6985ff97250b4a9e","IMP-6fc8896a544cf33e","IMP-73286559e2179cec","IMP-9c9a26650d07d53f","IMP-f54cf5a2e86cdf79"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","store","$m","$m","$m","$m"]],["RULE-EVALUATION-02e2a16085f8541c","FACT","rules","$60","COMPONENT-NO-CYCLES evaluator completed",["app","cli","model","render","store"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["COMPONENT-NO-CYCLES"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m",["app","cli","model","render","store"],true,["app","cli","model","render","store"],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-030e8a16319bfc7d","FACT","rules","$60","DEP-MODEL-NO-STORE evaluator completed",["$69"],["$18"],["DEP-MODEL-NO-STORE"],["$33"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-10e44d5c07cfd6de","FACT","rules","$60","MODEL-TYPES-IN-ENTITIES evaluator completed",["$69"],["$18"],["MODEL-TYPES-IN-ENTITIES"],["$33"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-191e7229f705ca78","FACT","rules","$60","DEP-APP-NO-STORE-SQLITE evaluator completed",["$61","$63"],["$14","$20"],["DEP-APP-NO-STORE-SQLITE"],["$29","$32"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-20d98c1bb9193bb7","FACT","rules","$60","DEP-MODEL-NO-CLI evaluator completed",["$69"],["$18"],["DEP-MODEL-NO-CLI"],["$33"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-2e25f0f8b85ae114","FACT","rules","$60","DEP-APP-NO-STORE-BACKEND evaluator completed",["$61","$63"],["$14","$20"],["DEP-APP-NO-STORE-BACKEND"],["$29","$32"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-3362ebc9245a26ae","FACT","rules","$60","DEP-STORE-NO-MONEY evaluator completed",["$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$13","$16","$19"],["DEP-STORE-NO-MONEY"],["$24","$25","$26","$30","$31","$34","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-3b4644f18ce3e187","FACT","rules","$60","CONSTRUCT-NO-STRING-LITERAL-COMPARE evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["CONSTRUCT-NO-STRING-LITERAL-COMPARE"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-3dfad042414ee8be","FACT","rules","$60","DEP-RENDER-NO-STORE evaluator completed",["$85","$87","$89"],["$12","$15","$21"],["DEP-RENDER-NO-STORE"],["$23","$28","$35"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-451901b74e17e608","FACT","rules","$60","ROOT-LAYOUT evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["ROOT-LAYOUT"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-452c8cba5c90a239","FACT","rules","$60","DEP-CLI-NO-STORE evaluator completed",["$66"],["$17"],["DEP-CLI-NO-STORE"],["$27"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-51420f2ea2e96d22","FACT","rules","$60","CONSTRUCT-NO-BROAD-EXCEPT evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["CONSTRUCT-NO-BROAD-EXCEPT"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-6cf4b24b43586968","FACT","rules","$60","STORE-PEERS-ISOLATED evaluator completed",["$108","$112"],["$8","$16"],["STORE-PEERS-ISOLATED"],["$26","$34"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-759e577f2e2fbbc9","FACT","rules","$60","EXTERNAL-COMPLETE evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["EXTERNAL-COMPLETE"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-7944a48027340ef1","FACT","rules","$60","LAYERS-MODEL evaluator completed",["model"],["EVD-6cfe32290010def4"],["LAYERS-MODEL"],[],[],[true,"declared_requires","$m","bfb877a590710b801b5ed8119a0774e3a48ed6f4bc6a8f04a36f38a5e245bc9d","architecture-contract.json","$m","$m","$m","$m","$m","$m","$m",["Core","Adapters","Edge"],"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-7a8c1556dc93730b","FACT","rules","$60","INTERFACE-BOUNDARY evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["INTERFACE-BOUNDARY"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-811868a63b7b52cc","FACT","rules","$60","DEP-APP-NO-CLI evaluator completed",["$61","$63"],["$14","$20"],["DEP-APP-NO-CLI"],["$29","$32"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-83d219176c4f04dc","FACT","rules","$60","APP-TYPES-NOT-DICT evaluator completed",["$63","$64"],["EVD-0d980b58b58a2c27"],["APP-TYPES-NOT-DICT"],["SYM-1413fc34058d59ad"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-83e74db18f43b1f5","FACT","rules","$60","CONSTRUCT-NO-ANY evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["CONSTRUCT-NO-ANY"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-86b01ec12fe9adb0","FACT","rules","$60","CONSTRUCT-NO-DYNAMIC evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["CONSTRUCT-NO-DYNAMIC"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-8733a92e0a9642e1","FACT","rules","$60","DEP-STORE-NO-CLI evaluator completed",["$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$13","$16","$19"],["DEP-STORE-NO-CLI"],["$24","$25","$26","$30","$31","$34","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-8ccb5a7b1f07d9ef","FACT","rules","$60","DEP-CLI-NO-MODEL evaluator completed",["$66"],["$17"],["DEP-CLI-NO-MODEL"],["$27"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-8d65305b0ed80807","FACT","rules","$60","ASSIGNMENT-COMPLETE evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["ASSIGNMENT-COMPLETE"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-8f3b8b868f3f340d","FACT","rules","$60","DEP-MODEL-NO-APP evaluator completed",["$69"],["$18"],["DEP-MODEL-NO-APP"],["$33"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-97ca2131d6ca67d2","FACT","rules","$60","DEP-RENDER-NO-APP evaluator completed",["$85","$87","$89"],["$12","$15","$21"],["DEP-RENDER-NO-APP"],["$23","$28","$35"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-a06f509d5f711440","FACT","rules","$60","EXTERNAL-JSON-STORE evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["EXTERNAL-JSON-STORE"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-a82a67ae50619ffb","FACT","rules","$60","DEP-APP-NO-RENDER evaluator completed",["$61","$63"],["$14","$20"],["DEP-APP-NO-RENDER"],["$29","$32"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-c9213f9e9dce5cf4","FACT","rules","$60","RENDER-TYPES-NOT-DICT evaluator completed",["$85","shop.render.facade.safe"],["EVD-c4ae8139ca820399"],["RENDER-TYPES-NOT-DICT"],["SYM-a50e2ec88a399b26"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-cd8ae7ee2ca2a903","FACT","rules","$60","DEP-STORE-NO-RENDER evaluator completed",["$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$13","$16","$19"],["DEP-STORE-NO-RENDER"],["$24","$25","$26","$30","$31","$34","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-d97a8f8032db359e","FACT","rules","$60","CONSTRUCT-NO-PLACEHOLDER evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["CONSTRUCT-NO-PLACEHOLDER"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-e17823143425894f","FACT","rules","$60","CONSTRUCT-NO-ASSERT evaluator completed",["$61","$63","$66","$69","$85","$87","$89","$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$20","$21"],["CONSTRUCT-NO-ASSERT"],["$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-ee8f8309fc5c5610","FACT","rules","$60","DEP-MODEL-NO-RENDER evaluator completed",["$69"],["$18"],["DEP-MODEL-NO-RENDER"],["$33"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-f281ba5718129592","FACT","rules","$60","DEP-STORE-NO-APP evaluator completed",["$91","$93","$94","$99","$103","$108","$112"],["$8","$9","$10","$11","$13","$16","$19"],["DEP-STORE-NO-APP"],["$24","$25","$26","$30","$31","$34","$36"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-EVALUATION-f5b90c596df8aa47","FACT","rules","$60","DEP-RENDER-NO-CLI evaluator completed",["$85","$87","$89"],["$12","$15","$21"],["DEP-RENDER-NO-CLI"],["$23","$28","$35"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","root","$m","$m"]],["RULE-OWNERSHIP-BLOCKER-c29032cb6bb9aced","FACT","rules","rule_ownership_blocker","$92",["$91"],["$10"],["store:STORE-REQUIRES-COMPLETE"],["$30"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","shop/store/__init__.py","$m","$m","$91","$m","$m","$m","$m","$m",0,[],"$m","$92","store","$m","$m"]],["SCOPE-3e3f23ce706d1486","FACT","components","$45","Observed source scope for model",["$68"],["$18"],["COMP-MODEL"],["$33"],[],["$m","$m","COMP-MODEL","$m","$m",true,"$m","$m","$m",0,"$m",["$117"],"$m","$m",1,["$69"],1,[],[],"$m","$m","$m","$m","$m",[{"kind":"package","observed_module_count":1,"scope":"$68"}],["$68"]]],["SCOPE-4824390c78bd833c","FACT","components","$45","Observed source scope for app",["shop.app"],["$14","$20"],["COMP-APP"],["EDGE-3710f672fd2f0c2a","EDGE-58b9293354ac6170","EDGE-75837215763c54f2","EDGE-98d3237939201824","$29","$32"],[],["$m","$m","COMP-APP","$m","$m",true,"$m","$m","$m",2,"$m",["shop/app/maintenance.py","$115"],"$m","$m",2,["$61","$63"],2,["$69","$91","$112"],["$68","$91"],"$m","$m","$m","$m","$m",[{"kind":"package","observed_module_count":2,"scope":"shop.app"}],["shop.app"]]],["SCOPE-57b086922ac9c0aa","FACT","components","$45","Observed source scope for render",["$84"],["$12","$15","$21"],["COMP-RENDER"],["EDGE-14e0785acd31207d","$23","$28","$35"],[],["$m","$m","COMP-RENDER","$m","$m",true,"$m","$m","$m",1,"$m",["shop/render/facade.py","shop/render/intermediate.py","$118"],"$m","$m",3,["$85","$87","$89"],3,["$69"],["$68"],"$m","$m","$m","$m","$m",[{"kind":"package","observed_module_count":3,"scope":"$84"}],["$84"]]],["SCOPE-cf339b3b760efdaa","FACT","components","$45","Observed source scope for cli",["shop.cli"],["$17"],["COMP-CLI"],["EDGE-1ad88587dca0df62","EDGE-eeac70451eba4ee8","$27"],[],["$m","$m","COMP-CLI","$m","$m",true,"$m","$m","$m",2,"$m",["$116"],"$m","$m",1,["$66"],1,["$63","$85"],["shop.app","$84"],"$m","$m","$m","$m","$m",[{"kind":"package","observed_module_count":1,"scope":"shop.cli"}],["shop.cli"]]],["SCOPE-dec4382bbde4da11","FACT","components","$45","Observed source scope for store",["$91"],["$8","$9","$10","$11","$13","$16","$19"],["COMP-STORE"],["EDGE-afcd576017d020e3","EDGE-f647d4d8e69e0f81","$24","$25","$26","$30","$31","$34","$36"],[],["$m","$m","COMP-STORE","$m","$m",true,"$m","$m","$m",1,"$m",["shop/store/__init__.py","$119","$120","$121","$122","$123","$124"],"$m","$m",7,["$91","$93","$94","$99","$103","$108","$112"],7,["$69"],["$68"],"$m","$m","$m","$m","$m",[{"kind":"package","observed_module_count":7,"scope":"$91"}],["$91"]]]],"source":{"dirty":true,"git_head":"46afeedc0f45092662eb8ff771c53e4551aaae5a","scope":["shop/**/*.py"],"source_digest":"3b8f4ea35cf0172c1112f5508d2bfeabeac2c10f5980b1e37fbb14abaea33e2a"},"string_table":["            Path(store_dir), order_id, description, int(quantity), int(unit_price_cents)","        lines = tuple(Line.from_dict(item) for item in payload[\"lines\"])","        return decode(read_document(order_path(self._root, order_id)))","        write_document(order_path(self._root, order.order_id), encode(order))","    document: OrderDocument = {\"version\": DOCUMENT_VERSION, \"order\": order.to_dict()}","    line = Line(description=description, quantity=quantity, unit_price=Money(unit_price_cents))","Class call recorded; constructor result type is not proven","DECLARED_RULE","EVD-0bc1ac0341f42b20","EVD-0e6de0672e6a3e36","EVD-30263e40ce3f9226","EVD-32a548d291612a9d","EVD-40c83677fd6be5b2","EVD-4af1c0e685325907","EVD-686bfc024de0e17f","EVD-7190d0f4dbced5e5","EVD-a46ec27f5abbd9cc","EVD-a88d07cff62ce2f2","EVD-bbbbeb02d4c0aed4","EVD-bd9899a51f65f727","EVD-dff16dfb262b2579","EVD-ec03fd7255ed89b3","Import __future__.annotations","MOD-1018f0c136362ccf","MOD-2613d08cbfa31192","MOD-4e4e7559db7d702d","MOD-651628f6395e3f74","MOD-7484964315f131f2","MOD-86ea23a41c1e6c0b","MOD-9a0394d8e9355d76","MOD-9b03abc666a221d0","MOD-a5f5919aae7f572b","MOD-a911202de97fe81b","MOD-c7aefefacb7161e3","MOD-d9d532913f09f5f2","MOD-ddd1236afac37f18","MOD-e0926795712d4e0e","Missing static proof does not prove that the runtime path is absent","__future__.annotations","annotated receiver of known type, unproven at runtime","call_hierarchy","class creation, binding or attribute writes remain unmeasured","class creation, binding or generated methods are not fully represented","convention","dataclasses.dataclass","declared_component_scope_observation","dependencies","dependency_violations","docs/architecture/shop.md","dynamic receiver with matching internal methods","forbidden_dependency","from __future__ import annotations","imported symbol binding","module_dependency","module_topology","partially_resolved","partially_resolved_call","public_name","repository_topology","resolved_call","rule_evaluation","shop.app.maintenance","shop.app.maintenance.run_maintenance","shop.app.orders","shop.app.orders.place_order","shop.app.orders.summarize","shop.cli.main","shop.cli.main.main","shop.model","shop.model.entities","shop.model.entities.Discount","shop.model.entities.Discount.apply","shop.model.entities.Line","shop.model.entities.Line.from_dict","shop.model.entities.Line.to_dict","shop.model.entities.Line.total","shop.model.entities.LinePayload","shop.model.entities.Money","shop.model.entities.Money.__add__","shop.model.entities.Order","shop.model.entities.Order.from_dict","shop.model.entities.Order.to_dict","shop.model.entities.Order.total","shop.model.entities.OrderPayload","shop.render","shop.render.facade","shop.render.facade.render_order","shop.render.intermediate","shop.render.intermediate.render_order","shop.render.text","shop.render.text.render_order","shop.store","shop.store (shop/store/__init__.py) has no owner in scope store. Assign it to one existing component using exact_modules: [\"shop.store\"].","shop.store.backend","shop.store.backend.files","shop.store.backend.files.ENCODING","shop.store.backend.files.discard_document","shop.store.backend.files.read_document","shop.store.backend.files.write_document","shop.store.backend.paths","shop.store.backend.paths.DOCUMENT_SUFFIX","shop.store.backend.paths.order_path","shop.store.backend.paths.order_paths","shop.store.codec","shop.store.codec.DOCUMENT_VERSION","shop.store.codec.OrderDocument","shop.store.codec.decode","shop.store.codec.encode","shop.store.repository","shop.store.repository.OrderRepository","shop.store.repository.OrderRepository.load","shop.store.repository.OrderRepository.save","shop.store.sqlite","shop.store.sqlite.Connection","shop.store.sqlite.vacuum","shop/app/orders.py","shop/cli/main.py","shop/model/entities.py","shop/render/text.py","shop/store/backend/__init__.py","shop/store/backend/files.py","shop/store/backend/paths.py","shop/store/codec.py","shop/store/repository.py","shop/store/sqlite.py","value_reference"],"symbols":[["SYM-01d2c4dfc342d97f","FACT","$58","static_constant","DOCUMENT_VERSION",["$103","$104"],["EVD-19ff467f293c6747"],[],[],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m",1,"$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$103","DOCUMENT_VERSION","$m","$m","$m","$m",null,"$104","$m","static_constant","$m","$m","$m","$m","$m","$m","$m","$m","$m","$57",{"basis":"$43","kind":"public","spelling":"DOCUMENT_VERSION"}]],["SYM-03a741a00a38e247","FACT","$58","function","vacuum",["$112","$114"],["EVD-0fe909c92608a522"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["pathlib.Path","$113"],"$m","$m",null,"$m","$m","$112","vacuum",true,false,"$91",[{"annotation":"Connection","default":null,"default_known":true,"kind":"positional","name":"connection"}],null,"$114","connection","$m","None","1233c60337e90701",27,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"vacuum"}]],["SYM-094cb8a1abb8f245","FACT","$58","function","decode",["$103","$106"],["EVD-538428ebc2c45adf"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$103","decode",true,false,"$91",[{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"document"}],null,"$106","document","$m","Order","ce57632699ffda91",48,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"decode"}]],["SYM-0f98fb6f9a3c1a88","FACT","$58","function","read_document",["$94","$97"],["EVD-832db48c570c8ce0"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$94","read_document",true,false,"$91",[{"annotation":"Path","default":null,"default_known":true,"kind":"positional","name":"path"}],null,"$97","path","$m","str","acdee450ad07ad82",9,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"read_document"}]],["SYM-1268d346aa3386e0","FACT","$58","method","to_dict",["$69","$81"],["EVD-380072b2520ec91b"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["$76","$83"],"$m","$m","SYM-31c700c61943c8dd","$m","instance","$69","to_dict",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"}],"$79","$81","self","$m","OrderPayload","c8b222d85473c23c",21,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"to_dict"}]],["SYM-1413fc34058d59ad","FACT","$58","function","place_order",["$63","$64"],["EVD-0d980b58b58a2c27"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["pathlib.Path","$72","$77","$79"],"$m","$m",null,"$m","$m","$63","place_order",true,false,"shop.app",[{"annotation":"Path","default":null,"default_known":true,"kind":"positional","name":"store_dir"},{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"order_id"},{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"description"},{"annotation":"int","default":null,"default_known":true,"kind":"positional","name":"quantity"},{"annotation":"int","default":null,"default_known":true,"kind":"positional","name":"unit_price_cents"}],null,"$64","store_dir","$m","Order","29ee4973a7595fd0",46,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"place_order"}]],["SYM-1d32533c0809c896","FACT","$58","class","Discount",["$69","$70"],["EVD-3adffac283771a7d"],[],[],[],["$m",[{"annotation":"int","definition_id":"ATTR-2947ebe40b712841","evidence_ids":["EVD-cde312752aeb6591"],"name":"percent","visibility":{"basis":"$43","kind":"public","spelling":"percent"}}],[],[],[],false,false,"dataclass",["apply"],"$m",false,["dataclass"],false,[],"$m","$m",[{"annotation":"int","name":"percent"}],true,null,[{"definition_ids":["ATTR-2947ebe40b712841"],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":["SYM-b183fc3dea9441aa"],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$69","Discount",true,"$m","$68","$m",null,"$70","$m","$m","$m","$m","$m","$m",true,"$m",false,"class","$m","$57",{"basis":"$43","kind":"public","spelling":"Discount"}]],["SYM-213a7c362a680705","FACT","$58","method","total",["$69","$75"],["EVD-db42ea9082a4945d"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["$77"],"$m","$m","SYM-f4f91ac449914582","$m","instance","$69","total",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"}],"$72","$75","self","$m","Money","1c390dac5aec669a",11,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"total"}]],["SYM-25e035a8f02b4217","FACT","$58","class","LinePayload",["$69","$76"],["EVD-fd291905059136db"],[],[],[],["$m",[{"annotation":"str","definition_id":"ATTR-5bc99a5c10b53ee2","evidence_ids":["EVD-f4d31d51ea3e1e42"],"name":"description","visibility":{"basis":"$43","kind":"public","spelling":"description"}},{"annotation":"int","definition_id":"ATTR-ba1abad8ea8e3caf","evidence_ids":["EVD-98e8a9e4b48ff15d"],"name":"quantity","visibility":{"basis":"$43","kind":"public","spelling":"quantity"}},{"annotation":"int","definition_id":"ATTR-d78c41404bd46c5e","evidence_ids":["EVD-b05a1762998abb57"],"name":"unit_price","visibility":{"basis":"$43","kind":"public","spelling":"unit_price"}}],[{"candidate_count":1,"evidence_ids":["EVD-580df503e76dbb5c"],"expression":"TypedDict","id":"BASE-a8af3cbb2d3bbfea","reason":"external classifier kind is unavailable","relationship_kind":"inherits","status":"$55","targets":["typing.TypedDict"]}],["typing.TypedDict"],["TypedDict"],false,true,"class",[],"$m",true,[],false,[],"$m","$m",[{"annotation":"str","name":"description"},{"annotation":"int","name":"quantity"},{"annotation":"int","name":"unit_price"}],false,null,[{"definition_ids":["ATTR-5bc99a5c10b53ee2","ATTR-ba1abad8ea8e3caf","ATTR-d78c41404bd46c5e"],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":[],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$69","LinePayload",true,"$m","$68","$m",null,"$76","$m","$m","$m","$m","$m","$m",true,"$m",false,"class",true,"$57",{"basis":"$43","kind":"public","spelling":"LinePayload"}]],["SYM-306fffdb8811c478","FACT","$58","method","total",["$69","$82"],["EVD-41e509000836a272"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["$77"],"$m","$m","SYM-31c700c61943c8dd","$m","instance","$69","total",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"}],"$79","$82","self","$m","Money","9d3b44c27afb48d8",29,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"total"}]],["SYM-3084c7286ff5a998","FACT","$58","function","render_order",["$89","$90"],["EVD-e32da9f19fec9395"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$89","render_order",true,false,"$84",[{"annotation":"dict","default":null,"default_known":true,"kind":"positional","name":"order"}],null,"$90","order","$m","str","db9a3e602e01c1e6",65,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"render_order"}]],["SYM-31c700c61943c8dd","FACT","$58","class","Order",["$69","$79"],["EVD-13b53f5e83189b76"],[],[],[],["$m",[{"annotation":"str","definition_id":"ATTR-c5ca98215dbe1326","evidence_ids":["EVD-8d78f90faf8f2db6"],"name":"order_id","visibility":{"basis":"$43","kind":"public","spelling":"order_id"}},{"annotation":"tuple[Line, ...]","definition_id":"ATTR-9cff44ec4158b2b6","evidence_ids":["EVD-e077aa75caee794f"],"name":"lines","visibility":{"basis":"$43","kind":"public","spelling":"lines"}}],[],[],[],false,false,"dataclass",["from_dict","to_dict","total"],"$m",true,["dataclass"],false,[],{"shop.model.entities":["$72","$77"]},"$m",[{"annotation":"str","name":"order_id"},{"annotation":"tuple[Line, ...]","name":"lines"}],true,null,[{"definition_ids":["ATTR-c5ca98215dbe1326","ATTR-9cff44ec4158b2b6"],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":["SYM-306fffdb8811c478","SYM-1268d346aa3386e0","SYM-f3293ef7f8441e4a"],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$69","Order",true,"$m","$68","$m",null,"$79","$m","$m","$m","$m","$m","$m",true,"$m",false,"class","$m","$57",{"basis":"$43","kind":"public","spelling":"Order"}]],["SYM-3ddc33e5a1bedfc4","FACT","$58","function","write_document",["$94","$98"],["EVD-03b7b333aac461f3"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$94","write_document",true,false,"$91",[{"annotation":"Path","default":null,"default_known":true,"kind":"positional","name":"path"},{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"document"}],null,"$98","path","$m","None","c30c2656741bbe05",46,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"write_document"}]],["SYM-421012b9fa5f6934","FACT","$58","method","from_dict",["$69","$73"],["EVD-f306204066b62b9f"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,["classmethod"],"$m",[],"$m",["$72","$76","$77"],"$m","$m","SYM-f4f91ac449914582","$m","class","$69","from_dict",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"cls"},{"annotation":"LinePayload","default":null,"default_known":true,"kind":"positional","name":"payload"}],"$72","$73","cls","$m","Line","bffa006109dfdc32",25,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"from_dict"}]],["SYM-44ce6b303fb819a9","FACT","$58","function","describe_connection",["$63","shop.app.orders.describe_connection"],["EVD-fc14974701907ab7"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$63","describe_connection",true,false,"shop.app",[{"annotation":"Connection","default":null,"default_known":true,"kind":"positional","name":"connection"}],null,"shop.app.orders.describe_connection","connection","$m","str","d864e6477b9a53f9",8,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"describe_connection"}]],["SYM-4698877829fcbfae","FACT","$58","method","to_dict",["$69","$74"],["EVD-ea5b17eeeff85142"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["$76"],"$m","$m","SYM-f4f91ac449914582","$m","instance","$69","to_dict",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"}],"$72","$74","self","$m","LinePayload","c96bc6296e78f88a",19,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"to_dict"}]],["SYM-521e10b69216a628","FACT","$58","method","__add__",["$69","$78"],["EVD-1a1f857322507e84"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["$77"],"$m","$m","SYM-6a6e23a6aabf9211","$m","instance","$69","__add__",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"},{"annotation":"Money","default":null,"default_known":true,"kind":"positional","name":"other"}],"$77","$78","self","$m","Money","1df72fadcc5f1f60",14,true,"$m",false,"$m","method","$m","private",{"basis":"$43","kind":"public","spelling":"__add__"}]],["SYM-5e29728aec775442","FACT","$58","function","order_paths",["$99","$102"],["EVD-5e3d87c185579640"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$99","order_paths",true,false,"$91",[{"annotation":"Path","default":null,"default_known":true,"kind":"positional","name":"root"}],null,"$102","root","$m","list[Path]","a381c6af608fa84d",14,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"order_paths"}]],["SYM-5e8c22c32a17a88c","FACT","$58","function","_indent",["$89","shop.render.text._indent"],["EVD-1c55304fac7d5d2d"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$89","_indent",true,false,"$84",[{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"text"}],null,"shop.render.text._indent","text","$m","str","fef6164d0766e1aa",6,"$m","$m","$m","$m","function","$m","private",{"basis":"$43","kind":"private","spelling":"_indent"}]],["SYM-617dbdf906017b98","FACT","$58","function","run_maintenance",["$61","$62"],["EVD-bb058fe2332a7f1b"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$61","run_maintenance",true,false,"shop.app",[{"annotation":"Connection","default":null,"default_known":true,"kind":"positional","name":"connection"}],null,"$62","connection","$m","None","126a6c743b6f955a",6,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"run_maintenance"}]],["SYM-651121df4d1e8ad5","FACT","$58","function","summarize",["$63","$65"],["EVD-fd68302f088e77a9"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$63","summarize",true,false,"shop.app",[{"annotation":"Path","default":null,"default_known":true,"kind":"positional","name":"store_dir"},{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"order_id"}],null,"$65","store_dir","$m","Money","6c0b58e6e0d3e57e",14,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"summarize"}]],["SYM-6a6e23a6aabf9211","FACT","$58","class","Money",["$69","$77"],["EVD-809590eb3ddf92d6"],[],[],[],["$m",[{"annotation":"int","definition_id":"ATTR-b28171f8a8aabff7","evidence_ids":["EVD-b09a505fab326d5a"],"name":"cents","visibility":{"basis":"$43","kind":"public","spelling":"cents"}}],[],[],[],false,false,"dataclass",["__add__","__mul__","__str__"],"$m",true,["dataclass"],false,[],"$m","$m",[{"annotation":"int","name":"cents"}],true,null,[{"definition_ids":["ATTR-b28171f8a8aabff7"],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":["SYM-521e10b69216a628","SYM-c24e1dc0171bbef6","SYM-891b0ba59ee7a735"],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$69","Money",true,"$m","$68","$m",null,"$77","$m","$m","$m","$m","$m","$m",true,"$m",false,"class","$m","$57",{"basis":"$43","kind":"public","spelling":"Money"}]],["SYM-785f9f9b17ce8f3c","FACT","$58","function","main",["$66","$67"],["EVD-a825188e58318989"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$66","main",true,false,"shop.cli",[{"annotation":"list[str]","default":null,"default_known":true,"kind":"positional","name":"argv"}],null,"$67","argv","$m","int","e1cecae182e321fa",60,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"main"}]],["SYM-7be0fbfe04d8ef32","FACT","$58","method","load",["$108","$110"],["EVD-ed3cfc06e043e57d"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["$72","$77","$79"],"$m","$m","SYM-f9d489ab3f329c71","$m","instance","$108","load",true,false,"$91",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"},{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"order_id"}],"$109","$110","self","$m","Order","034b056e2c8feff4",16,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"load"}]],["SYM-891b0ba59ee7a735","FACT","$58","method","__str__",["$69","shop.model.entities.Money.__str__"],["EVD-5ff808486c74736f"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m","SYM-6a6e23a6aabf9211","$m","instance","$69","__str__",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"}],"$77","shop.model.entities.Money.__str__","self","$m","str","55f65d10d221adf9",12,true,"$m",false,"$m","method","$m","private",{"basis":"$43","kind":"public","spelling":"__str__"}]],["SYM-912783379834f463","FACT","$58","function","order_path",["$99","$101"],["EVD-0977f81fc2ac2b19"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$99","order_path",true,false,"$91",[{"annotation":"Path","default":null,"default_known":true,"kind":"positional","name":"root"},{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"order_id"}],null,"$101","root","$m","Path","c4d271c707395ce7",12,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"order_path"}]],["SYM-98565702bb3be343","FACT","$58","method","save",["$108","$111"],["EVD-73c79d763526af76"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["$72","$77","$79"],"$m","$m","SYM-f9d489ab3f329c71","$m","instance","$108","save",true,false,"$91",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"},{"annotation":"Order","default":null,"default_known":true,"kind":"positional","name":"order"}],"$109","$111","self","$m","None","622311be837367e6",20,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"save"}]],["SYM-9961cb1a552ff2e5","FACT","$58","static_constant","ENCODING",["$94","$95"],["EVD-81ea2509d3cf2d51"],[],[],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","utf-8","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$94","ENCODING","$m","$m","$m","$m",null,"$95","$m","static_constant","$m","$m","$m","$m","$m","$m","$m","$m","$m","$57",{"basis":"$43","kind":"public","spelling":"ENCODING"}]],["SYM-a3e7c6567ab50c7e","FACT","$58","class","OrderPayload",["$69","$83"],["EVD-598749736e720d9d"],[],[],[],["$m",[{"annotation":"str","definition_id":"ATTR-9e017786e861e14c","evidence_ids":["EVD-afd0cf198ebc2e4f"],"name":"order_id","visibility":{"basis":"$43","kind":"public","spelling":"order_id"}},{"annotation":"list[LinePayload]","definition_id":"ATTR-d3ceb82968de3038","evidence_ids":["EVD-827eb64915d3f3d1"],"name":"lines","visibility":{"basis":"$43","kind":"public","spelling":"lines"}}],[{"candidate_count":1,"evidence_ids":["EVD-833e49daa46041b3"],"expression":"TypedDict","id":"BASE-ffbd52b48447f81c","reason":"external classifier kind is unavailable","relationship_kind":"inherits","status":"$55","targets":["typing.TypedDict"]}],["typing.TypedDict"],["TypedDict"],false,true,"class",[],"$m",true,[],false,[],{"shop.model.entities":["$76"]},"$m",[{"annotation":"str","name":"order_id"},{"annotation":"list[LinePayload]","name":"lines"}],false,null,[{"definition_ids":["ATTR-9e017786e861e14c","ATTR-d3ceb82968de3038"],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":[],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$69","OrderPayload",true,"$m","$68","$m",null,"$83","$m","$m","$m","$m","$m","$m",true,"$m",false,"class",true,"$57",{"basis":"$43","kind":"public","spelling":"OrderPayload"}]],["SYM-a50e2ec88a399b26","FACT","$58","function","safe",["$85","shop.render.facade.safe"],["EVD-c4ae8139ca820399"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",true,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$85","safe",true,false,"$84",[{"annotation":"str","default":null,"default_known":true,"kind":"positional","name":"value"}],null,"shop.render.facade.safe","value","$m","str","0c686ac77f6f2ac5",3,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"safe"}]],["SYM-b183fc3dea9441aa","FACT","$58","method","apply",["$69","$71"],["EVD-3a45cf803befe154"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m","SYM-1d32533c0809c896","$m","instance","$69","apply",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"},{"annotation":"Money","default":null,"default_known":true,"kind":"positional","name":"amount"}],"$70","$71","self","$m","Money","a7b125c011b349da",20,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"apply"}]],["SYM-bdbad6c793f01a7e","FACT","$58","static_constant","DOCUMENT_SUFFIX",["$99","$100"],["EVD-976a02b50cb046c6"],[],[],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m",".json","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$99","DOCUMENT_SUFFIX","$m","$m","$m","$m",null,"$100","$m","static_constant","$m","$m","$m","$m","$m","$m","$m","$m","$m","$57",{"basis":"$43","kind":"public","spelling":"DOCUMENT_SUFFIX"}]],["SYM-c24e1dc0171bbef6","FACT","$58","method","__mul__",["$69","shop.model.entities.Money.__mul__"],["EVD-ed97a6a2fb111212"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["$77"],"$m","$m","SYM-6a6e23a6aabf9211","$m","instance","$69","__mul__",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"},{"annotation":"int","default":null,"default_known":true,"kind":"positional","name":"quantity"}],"$77","shop.model.entities.Money.__mul__","self","$m","Money","0ba3a10f50ddaed1",12,true,"$m",false,"$m","method","$m","private",{"basis":"$43","kind":"public","spelling":"__mul__"}]],["SYM-c6dc50ed43219b97","FACT","$58","function","encode",["$103","$107"],["EVD-ac6210f7ea66f63c"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$103","encode",true,false,"$91",[{"annotation":"Order","default":null,"default_known":true,"kind":"positional","name":"order"}],null,"$107","order","$m","str","b27149e11f1ca9c1",25,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"encode"}]],["SYM-d63ca702f952e689","FACT","$58","class","Connection",["$112","$113"],["EVD-55874fa4e1457292"],[],[],[],["$m",[{"annotation":"Path","definition_id":"ATTR-83846be49e54253a","evidence_ids":["EVD-23018504a17945f5"],"name":"path","visibility":{"basis":"$43","kind":"public","spelling":"path"}}],[],[],[],false,false,"dataclass",[],"$m",false,["dataclass"],false,[],{"shop.store.sqlite":["pathlib.Path"]},"$m",[{"annotation":"Path","name":"path"}],true,null,[{"definition_ids":["ATTR-83846be49e54253a"],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":[],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$112","Connection",true,"$m","$91","$m",null,"$113","$m","$m","$m","$m","$m","$m",true,"$m",false,"class","$m","$57",{"basis":"$43","kind":"public","spelling":"Connection"}]],["SYM-ebdd1de485e05bb4","FACT","$58","class","OrderDocument",["$103","$105"],["EVD-1adb244d07352ea3"],[],[],[],["$m",[{"annotation":"int","definition_id":"ATTR-f30488078c653937","evidence_ids":["EVD-c54644bde9e9101b"],"name":"version","visibility":{"basis":"$43","kind":"public","spelling":"version"}},{"annotation":"OrderPayload","definition_id":"ATTR-1bd7b4d8d3d662eb","evidence_ids":["EVD-aa596964e86742bd"],"name":"order","visibility":{"basis":"$43","kind":"public","spelling":"order"}}],[{"candidate_count":1,"evidence_ids":["EVD-eab6da8b941792d8"],"expression":"TypedDict","id":"BASE-eb460a678411c2af","reason":"external classifier kind is unavailable","relationship_kind":"inherits","status":"$55","targets":["typing.TypedDict"]}],["typing.TypedDict"],["TypedDict"],false,true,"class",[],"$m",false,[],false,[],"$m","$m",[{"annotation":"int","name":"version"},{"annotation":"OrderPayload","name":"order"}],false,null,[{"definition_ids":["ATTR-f30488078c653937","ATTR-1bd7b4d8d3d662eb"],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":[],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$103","OrderDocument",true,"$m","$91","$m",null,"$105","$m","$m","$m","$m","$m","$m",true,"$m",false,"class",true,"$57",{"basis":"$43","kind":"public","spelling":"OrderDocument"}]],["SYM-f3293ef7f8441e4a","FACT","$58","method","from_dict",["$69","$80"],["EVD-daa05f47b32b9483"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,["classmethod"],"$m",[],"$m",["$72","$76","$77","$79","$83"],"$m","$m","SYM-31c700c61943c8dd","$m","class","$69","from_dict",true,false,"$68",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"cls"},{"annotation":"OrderPayload","default":null,"default_known":true,"kind":"positional","name":"payload"}],"$79","$80","cls","$m","Order","fc94866367e8a19a",35,true,"$m",false,"$m","method","$m","$57",{"basis":"$43","kind":"public","spelling":"from_dict"}]],["SYM-f4f91ac449914582","FACT","$58","class","Line",["$69","$72"],["EVD-1bc0e01868608acb"],[],[],[],["$m",[{"annotation":"str","definition_id":"ATTR-df31e2a2970abc74","evidence_ids":["EVD-c88f0d6581c4ad5a"],"name":"description","visibility":{"basis":"$43","kind":"public","spelling":"description"}},{"annotation":"int","definition_id":"ATTR-a131a146c51c4e73","evidence_ids":["EVD-f4f642647debf00c"],"name":"quantity","visibility":{"basis":"$43","kind":"public","spelling":"quantity"}},{"annotation":"Money","definition_id":"ATTR-f128eeab83d2c29a","evidence_ids":["EVD-4663909830aa85df"],"name":"unit_price","visibility":{"basis":"$43","kind":"public","spelling":"unit_price"}}],[],[],[],false,false,"dataclass",["from_dict","to_dict","total"],"$m",true,["dataclass"],false,[],{"shop.model.entities":["$77"]},"$m",[{"annotation":"str","name":"description"},{"annotation":"int","name":"quantity"},{"annotation":"Money","name":"unit_price"}],true,null,[{"definition_ids":["ATTR-df31e2a2970abc74","ATTR-a131a146c51c4e73","ATTR-f128eeab83d2c29a"],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":["SYM-213a7c362a680705","SYM-4698877829fcbfae","SYM-421012b9fa5f6934"],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$69","Line",true,"$m","$68","$m",null,"$72","$m","$m","$m","$m","$m","$m",true,"$m",false,"class","$m","$57",{"basis":"$43","kind":"public","spelling":"Line"}]],["SYM-f66eff607f8f1109","FACT","$58","method","__init__",["$108","shop.store.repository.OrderRepository.__init__"],["EVD-3b7170d21682aff8"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m",["pathlib.Path"],"$m","$m","SYM-f9d489ab3f329c71","$m","instance","$108","__init__",true,false,"$91",[{"annotation":null,"default":null,"default_known":true,"kind":"positional","name":"self"},{"annotation":"Path","default":null,"default_known":true,"kind":"positional","name":"root"}],"$109","shop.store.repository.OrderRepository.__init__","self","$m","None","2c6355b85672647c",7,true,"$m",false,"$m","method","$m","private",{"basis":"$43","kind":"public","spelling":"__init__"}]],["SYM-f7d39b41d9b7b9a7","FACT","$58","function","discard_document",["$94","$96"],["EVD-a2a4d5e6bd3ab2a3"],[],[],[],[false,"$m","$m","$m","$m","$m","$m","$m","$m","$m",false,[],"$m",[],"$m","$m","$m","$m",null,"$m","$m","$94","discard_document",true,false,"$91",[{"annotation":"Path","default":null,"default_known":true,"kind":"positional","name":"path"}],null,"$96","path","$m","None","c7c4dad5b7c281bd",6,"$m","$m","$m","$m","function","$m","$57",{"basis":"$43","kind":"public","spelling":"discard_document"}]],["SYM-f9d489ab3f329c71","FACT","$58","class","OrderRepository",["$108","$109"],["EVD-cf8e27a1f06f4855"],[],[],[],["$m",[],[],[],[],false,true,"class",["__init__","load","save"],"$m",false,[],false,[],"$m","$m",[],false,null,[{"definition_ids":[],"kind":"attribute","reason":"$41","schema_version":"1.0.0","status":"partial"},{"definition_ids":["SYM-f66eff607f8f1109","SYM-98565702bb3be343","SYM-7be0fbfe04d8ef32"],"kind":"method","reason":"$42","schema_version":"1.0.0","status":"partial"}],"$m","$108","OrderRepository",true,"$m","$91","$m",null,"$109","$m","$m","$m","$m","$m","$m",true,"$m",false,"class","$m","$57",{"basis":"$43","kind":"public","spelling":"OrderRepository"}]]],"transitive_paths":[["PATH-21fc6d9ca7c296ed","FACT","package_topology","transitive_package_dependency","shop.cli → shop.app → shop.store",["shop.app","shop.cli","$91"],[],[],["EDGE-40faba752ec25c2f","EDGE-db0372f1a8a568e1"],[],["package",["shop.cli","shop.app","$91"],"shop.cli","$91"]],["PATH-39053f9fed4a02a2","FACT","package_topology","transitive_package_dependency","shop.cli → shop.app → shop.model",["shop.app","shop.cli","$68"],[],[],["EDGE-ad55f037555582ca","EDGE-db0372f1a8a568e1"],[],["package",["shop.cli","shop.app","$68"],"shop.cli","$68"]]],"typing_signals":[],"unknowns":[["UNKNOWN-BOUNDARY-TYPE-POSITION-6f4acc9ca5130f7b","UNKNOWN","type_architecture","boundary_type_position","shop.app.orders.place_order store_dir: external_type",["shop.app","$63","$64"],["EVD-0d980b58b58a2c27"],["APP-TYPES-NOT-DICT"],["SYM-1413fc34058d59ad"],[],["$m","$m","Path","$m","$m","$m","$m","$m","$m","$m","$63","$m",0,"$m","store_dir","$m","$64","external_type","$m","$m","$m","$m","$m","$m"]],["UNKNOWN-BOUNDARY-TYPE-ROUTE-bdf5992d496fabe1","UNKNOWN","type_architecture","boundary_type_route","RENDER-TYPES-NOT-DICT cannot resolve a declared facade alias route",["$85","$86"],["EVD-5a3cb5f2c9bc58fb"],["RENDER-TYPES-NOT-DICT"],["IMP-d74d063c1c3b04f9"],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$85","$m","$m","$m","$m","$m","$86","unresolved_reexport_route",["$86","$88"],"$m","$m","$m","$m","$m"]],["UNKNOWN-BOUNDARY-TYPES-d4c18ad1fb20590a","UNKNOWN","type_architecture","boundary_type_limit","APP-TYPES-NOT-DICT decided 5 of 6 declared facade type positions",["shop.app"],[],["APP-TYPES-NOT-DICT"],[],[],[0,0,"$m",5,0,1,0,0,0,0,"$m",0,"$m",0,"$m",6,"$m","$m","$m",[{"annotation":"Path","module":"$63","occurrence":0,"position":"store_dir","qualified_name":"$64","reason":"external_type"}],1,0,"$m",0]],["UNKNOWN-CONTEXT-DATAFLOW","UNKNOWN","contexts_state","context_alias_limit","Context read/write topology excludes unproven dynamic aliases",["shop"],[],[],[],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","The scanner follows direct annotations, constructor bindings, and self-field access only","$m","$m","$m","$m","$m","$m"]],["UNKNOWN-PYTHON-DYNAMIC-CALLS","UNKNOWN","$40","dynamic_call_limit","Python dynamic behavior prevents a complete call graph",["shop"],[],[],[],[],["$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m","$m",7,"$m"]]],"violations":[]}
