{ "project": { "name": "mantra", "version": "1.0.1", "link": "https://github.com/mhatzl/mantra" }, "tag": { "name": "0.1.0", "link": "https://github.com/mhatzl/mantra-wiki" }, "overview": { "req_cnt": 20, "traced_cnt": 9, "traced_ratio": 0.45, "covered_cnt": 2, "covered_ratio": 0.1, "passed_cnt": 2, "passed_ratio": 0.1, "verified_cnt": 2, "verified_ratio": 0.5 }, "requirements": [ { "id": "id", "title": "Parent", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": null, "direct_children": [ "id.sub_id_1", "id.sub_id_2", "id.sub_id_3" ], "leaf_statistic": { "leaf_cnt": 9, "traced_leaf_cnt": 3, "traced_leaf_ratio": 0.3333333333333333, "covered_leaf_cnt": 0, "covered_leaf_ratio": 0.0, "passed_covered_leaf_cnt": 0, "passed_covered_leaf_ratio": 0.0 }, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_1", "title": "Sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "id", "direct_children": [ "id.sub_id_1.sub_sub_id_1", "id.sub_id_1.sub_sub_id_2" ], "leaf_statistic": { "leaf_cnt": 3, "traced_leaf_cnt": 2, "traced_leaf_ratio": 0.6666666666666666, "covered_leaf_cnt": 0, "covered_leaf_ratio": 0.0, "passed_covered_leaf_cnt": 0, "passed_covered_leaf_ratio": 0.0 }, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_1.sub_sub_id_1", "title": "Sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": true, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_1", "direct_children": [ "id.sub_id_1.sub_sub_id_1.sub_sub_sub_id_1", "id.sub_id_1.sub_sub_id_1.sub_sub_sub_id_2" ], "leaf_statistic": { "leaf_cnt": 2, "traced_leaf_cnt": 2, "traced_leaf_ratio": 1.0, "covered_leaf_cnt": 0, "covered_leaf_ratio": 0.0, "passed_covered_leaf_cnt": 0, "passed_covered_leaf_ratio": 0.0 }, "trace_info": { "traced": true, "fully_traced": true, "direct_traces": [], "indirect_traces": [ { "traced_id": "id.sub_id_1.sub_sub_id_1.sub_sub_sub_id_1", "traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 1 } ] }, { "traced_id": "id.sub_id_1.sub_sub_id_1.sub_sub_sub_id_2", "traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 1 } ] } ] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [ { "review_name": "Some Review", "review_date": "2024-05-25 22:00:00.0", "comment": "This one was tough." } ], "valid": true }, { "id": "id.sub_id_1.sub_sub_id_1.sub_sub_sub_id_1", "title": "Sub-sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": true, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_1.sub_sub_id_1", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": true, "fully_traced": true, "direct_traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 1 } ], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_1.sub_sub_id_1.sub_sub_sub_id_2", "title": "Sub-sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": true, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_1.sub_sub_id_1", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": true, "fully_traced": true, "direct_traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 1 } ], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_1.sub_sub_id_2", "title": "Sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_1", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_2", "title": "Sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "id", "direct_children": [ "id.sub_id_2.sub_sub_id_1", "id.sub_id_2.sub_sub_id_2" ], "leaf_statistic": { "leaf_cnt": 3, "traced_leaf_cnt": 1, "traced_leaf_ratio": 0.3333333333333333, "covered_leaf_cnt": 0, "covered_leaf_ratio": 0.0, "passed_covered_leaf_cnt": 0, "passed_covered_leaf_ratio": 0.0 }, "trace_info": { "traced": true, "fully_traced": false, "direct_traces": [], "indirect_traces": [ { "traced_id": "id.sub_id_2.sub_sub_id_1", "traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 7 } ] }, { "traced_id": "id.sub_id_2.sub_sub_id_2", "traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 7 } ] } ] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_2.sub_sub_id_1", "title": "Sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": true, "info": null, "rendered_info": null, "parent": "id.sub_id_2", "direct_children": [ "id.sub_id_2.sub_sub_id_1.sub_sub_sub_id_1", "id.sub_id_2.sub_sub_id_1.sub_sub_sub_id_2" ], "leaf_statistic": { "leaf_cnt": 2, "traced_leaf_cnt": 0, "traced_leaf_ratio": 0.0, "covered_leaf_cnt": 0, "covered_leaf_ratio": 0.0, "passed_covered_leaf_cnt": 0, "passed_covered_leaf_ratio": 0.0 }, "trace_info": { "traced": true, "fully_traced": false, "direct_traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 7 } ], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": false }, { "id": "id.sub_id_2.sub_sub_id_1.sub_sub_sub_id_1", "title": "Sub-sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": true, "info": null, "rendered_info": null, "parent": "id.sub_id_2.sub_sub_id_1", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_2.sub_sub_id_1.sub_sub_sub_id_2", "title": "Sub-sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": true, "info": null, "rendered_info": null, "parent": "id.sub_id_2.sub_sub_id_1", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_2.sub_sub_id_2", "title": "Sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_2", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": true, "fully_traced": true, "direct_traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 7 } ], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_3", "title": "Sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "id", "direct_children": [ "id.sub_id_3.sub_sub_id_1", "id.sub_id_3.sub_sub_id_2" ], "leaf_statistic": { "leaf_cnt": 3, "traced_leaf_cnt": 0, "traced_leaf_ratio": 0.0, "covered_leaf_cnt": 0, "covered_leaf_ratio": 0.0, "passed_covered_leaf_cnt": 0, "passed_covered_leaf_ratio": 0.0 }, "trace_info": { "traced": true, "fully_traced": false, "direct_traces": [ { "filepath": "src/hierarchy_test.yaml", "line": 11 } ], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_3.sub_sub_id_1", "title": "Sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_3", "direct_children": [ "id.sub_id_3.sub_sub_id_1.sub_sub_sub_id_1", "id.sub_id_3.sub_sub_id_1.sub_sub_sub_id_2" ], "leaf_statistic": { "leaf_cnt": 2, "traced_leaf_cnt": 0, "traced_leaf_ratio": 0.0, "covered_leaf_cnt": 0, "covered_leaf_ratio": 0.0, "passed_covered_leaf_cnt": 0, "passed_covered_leaf_ratio": 0.0 }, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_3.sub_sub_id_1.sub_sub_sub_id_1", "title": "Sub-sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": true, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_3.sub_sub_id_1", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [ { "review_name": "Some Review", "review_date": "2024-05-25 22:00:00.0", "comment": null } ], "valid": true }, { "id": "id.sub_id_3.sub_sub_id_1.sub_sub_sub_id_2", "title": "Sub-sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_3.sub_sub_id_1", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id.sub_id_3.sub_sub_id_2", "title": "Sub-sub", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "id.sub_id_3", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "id_from_schema", "title": "Some req added from JSON.", "link": "local", "manual": false, "deprecated": false, "info": { "custom_field": "some data" }, "rendered_info": "
Requirements from wikis currently have no custom information.
\r\nThis is only rendered for the requirement from JSON that has a custom field with 'some data'.
", "parent": null, "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "main_id", "title": "Main", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": null, "direct_children": [ "main_id.sub_id" ], "leaf_statistic": { "leaf_cnt": 1, "traced_leaf_cnt": 0, "traced_leaf_ratio": 0.0, "covered_leaf_cnt": 0, "covered_leaf_ratio": 0.0, "passed_covered_leaf_cnt": 0, "passed_covered_leaf_ratio": 0.0 }, "trace_info": { "traced": true, "fully_traced": false, "direct_traces": [ { "filepath": "src/traces.rs", "line": 1 } ], "indirect_traces": [] }, "test_coverage_info": { "covered": true, "passed": true, "fully_covered": false, "direct_coverage": [ { "name": "usage-test", "date": "+002024-06-11T13:07:43.346392800Z", "tests": [ { "name": "traces::test::test_fn", "passed": true, "traces": [ { "filepath": "src/traces.rs", "line": 1 } ] } ] } ], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "main_id.sub_id", "title": "Sub-requirement", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": "main_id", "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": false, "fully_traced": false, "direct_traces": [], "indirect_traces": [] }, "test_coverage_info": { "covered": false, "passed": false, "fully_covered": false, "direct_coverage": [], "indirect_coverage": [] }, "verified_info": [], "valid": true }, { "id": "other_id", "title": "Other", "link": "https://github.com/mhatzl/mantra/tree/main/reqs", "manual": false, "deprecated": false, "info": null, "rendered_info": null, "parent": null, "direct_children": [], "leaf_statistic": null, "trace_info": { "traced": true, "fully_traced": true, "direct_traces": [ { "filepath": "src/traces.rs", "line": 7 }, { "filepath": "src/traces.yaml", "line": 1 } ], "indirect_traces": [] }, "test_coverage_info": { "covered": true, "passed": true, "fully_covered": true, "direct_coverage": [ { "name": "usage-test", "date": "+002024-06-11T13:07:43.346392800Z", "tests": [ { "name": "traces::test::test_fn", "passed": true, "traces": [ { "filepath": "src/traces.rs", "line": 7 } ] } ] } ], "indirect_coverage": [] }, "verified_info": [ { "review_name": "Some Review", "review_date": "2024-05-25 22:00:00.0", "comment": "What could go wrong?" } ], "valid": true } ], "tests": { "overview": { "test_cnt": 1, "ran_cnt": 1, "ran_ratio": 1.0, "passed_cnt": 1, "passed_ratio": 1.0, "failed_cnt": 0, "failed_ratio": 0.0, "skipped_cnt": 0, "skipped_ratio": 0.0 }, "test_runs": [ { "overview": { "test_cnt": 1, "ran_cnt": 1, "ran_ratio": 1.0, "passed_cnt": 1, "passed_ratio": 1.0, "failed_cnt": 0, "failed_ratio": 0.0, "skipped_cnt": 0, "skipped_ratio": 0.0 }, "name": "usage-test", "date": "+002024-06-11T13:07:43.346392800Z", "meta": { "binary": "target\\debug\\usage" }, "rendered_meta": "Custom Info:
\r\nThis test-run was executed using binary: target\\debug\\usage
", "logs": "", "tests": [ { "covers": [ "main_id", "other_id" ], "name": "traces::test::test_fn", "filepath": "src/traces.rs", "line": 8, "state": "Passed" } ] } ] }, "reviews": [ { "name": "Some Review", "date": "2024-05-25 22:00:00.0", "reviewer": "Manuel Hatzl", "comment": "This is a test review.", "requirements": [ { "id": "id.sub_id_1.sub_sub_id_1", "comment": "This one was tough." }, { "id": "id.sub_id_3.sub_sub_id_1.sub_sub_sub_id_1", "comment": null }, { "id": "other_id", "comment": "What could go wrong?" } ] } ], "trace_criteria": "Requirements are traced if one of the following criteria is met:\n\n- A trace directly referring to the requirement exists (Directly traced)\n- All of the leaf requirements of the requirement have direct traces (Indirectly traced)\n\nRequirements are fully traced if all of their leaf requirements are traced.", "test_coverage_criteria": "A requirement is covered through a test if any of the following criteria are met:\n\n- At least one direct trace to the requirement was reached during test execution\n- All leaf requirements of the requirement were covered by the test\n\nA requirement is passed covered if all of the following criteria are met:\n\n- The requirement is covered at least once\n- All tests covering the requirement passed\n- All tests covering the child requirements of the requirement passed\n\nRequirements are fully covered if all of their leaf requirements are passed covered.", "creation_date": "+002024-07-01T16:20:22.090733800Z", "validation": { "is_valid": false, "criteria": "The collected data is valid if no *deprecated* requirement is traced.", "invalid_reqs": [ "id.sub_id_2.sub_sub_id_1" ] }, "unrelated": { "traces": [ { "req_id": "bad_id", "filepath": "src/traces.rs", "line": 7 } ], "coverage": [ { "test_run_name": "usage-test", "test_run_date": "+002024-06-11T13:07:43.346392800Z", "test_name": "traces::test::test_fn", "req_id": "bad_id", "trace_filepath": "src/traces.rs", "trace_line": 7 } ], "verified_requirements": [] } }