From 804153c67c7c5466ee94e9553118cc3df03a56f9 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 4 Oct 2019 20:17:44 +0200 Subject: [PATCH] Switch to SHA256 for detecting changes to files --- CHANGELOG.md | 4 ++++ docs/reference/item.md | 3 ++- doorstop/cli/tests/docs/HLT001.yml | 14 +++++++------- doorstop/cli/tests/docs/HLT002.yml | 6 +++--- doorstop/cli/tests/docs/HLT003.yml | 8 ++++---- doorstop/cli/tests/docs/HLT004.yml | 4 ++-- doorstop/cli/tests/docs/HLT005.yml | 2 +- doorstop/cli/tests/files/A001.txt | 5 +++-- doorstop/cli/tests/files/A002.txt | 5 +++-- doorstop/cli/tests/files/B001.txt | 5 +++-- doorstop/cli/tests/files/B002.txt | 7 ++++--- doorstop/cli/tests/files/C001.txt | 7 ++++--- doorstop/cli/tests/files/C002.txt | 3 ++- doorstop/cli/tests/files/C003.txt | 3 ++- doorstop/core/tests/docs/LLT001.yml | 4 ++-- doorstop/core/tests/docs/LLT002.yml | 4 ++-- doorstop/core/tests/docs/LLT003.yml | 4 ++-- doorstop/core/tests/docs/LLT004.yml | 4 ++-- doorstop/core/tests/docs/LLT005.yml | 4 ++-- doorstop/core/tests/docs/LLT007.yml | 14 +++++++------- doorstop/core/tests/docs/LLT008.yml | 4 ++-- doorstop/core/tests/docs/LLT009.yml | 2 +- doorstop/core/tests/docs/LLT010.yml | 2 +- doorstop/core/tests/files/REQ002.yml | 2 +- doorstop/core/tests/files/exported.csv | 2 +- doorstop/core/tests/files/exported.tsv | 2 +- doorstop/core/tests/files/exported.xlsx | Bin 5892 -> 5907 bytes doorstop/core/tests/files/exported.yml | 2 +- doorstop/core/tests/test_importer.py | 4 ++-- doorstop/core/tests/test_item.py | 12 ++++++------ doorstop/core/tests/test_item_validator.py | 2 +- doorstop/core/tests/test_types.py | 14 ++++++++++---- doorstop/core/types.py | 9 +++++---- reqs/REQ001.yml | 2 +- reqs/REQ002.yml | 2 +- reqs/REQ003.yml | 2 +- reqs/REQ004.yml | 2 +- reqs/REQ006.yml | 2 +- reqs/REQ007.yml | 2 +- reqs/REQ008.yml | 2 +- reqs/REQ009.yml | 2 +- reqs/REQ010.yml | 2 +- reqs/REQ011.yml | 2 +- reqs/REQ012.yml | 2 +- reqs/REQ013.yml | 2 +- reqs/REQ014.yml | 2 +- reqs/REQ015.yml | 2 +- reqs/REQ016.yml | 2 +- reqs/REQ017.yml | 2 +- reqs/REQ018.yml | 2 +- reqs/REQ019.yml | 2 +- reqs/tutorial/TUT001.yml | 6 +++--- reqs/tutorial/TUT002.yml | 12 ++++++------ reqs/tutorial/TUT003.yml | 9 ++++----- reqs/tutorial/TUT004.yml | 10 +++++----- reqs/tutorial/TUT005.yml | 2 +- reqs/tutorial/TUT008.yml | 4 ++-- reqs/tutorial/TUT009.yml | 4 ++-- reqs/tutorial/TUT010.yml | 4 ++-- reqs/tutorial/TUT011.yml | 2 +- reqs/tutorial/TUT012.yml | 4 ++-- reqs/tutorial/TUT013.yml | 4 ++-- reqs/tutorial/TUT014.yml | 2 +- reqs/tutorial/TUT015.yml | 4 ++-- reqs/tutorial/TUT016.yml | 4 ++-- reqs/tutorial/TUT017.yml | 4 ++-- reqs/tutorial/TUT018.yml | 2 +- reqs/tutorial/TUT019.yml | 4 ++-- 68 files changed, 151 insertions(+), 133 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4a0fb3d5..6d5580c01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # 2.0 (unreleased) - Dropped support for Python 3.5. +- **BREAKING:** Switched to SHA256 for tracking changes to files. Use + `doorstop review all` followed by `doorstop clear all` to update an existing + project. Warning: this marks all items as reviewed and clears all suspect + links. # 1.6 (2019-08-10) diff --git a/docs/reference/item.md b/docs/reference/item.md index b9fc48cf4..cda29c16d 100644 --- a/docs/reference/item.md +++ b/docs/reference/item.md @@ -133,7 +133,8 @@ values of extended attributes can be added to the fingerprint through a The value of the *reviewed* attribute indicates the fingerprint of the item when it was last reviewed. "null" if the item has not yet been reviewed. Doorstop will use this to detect unreviewed changes to an item by comparing the -current item fingerprint to the last reviewed fingerprint. +current item fingerprint to the last reviewed fingerprint. The fingerprint +hash algorithm is SHA256 stored in URL-safe Base64 encoding. You should not calculate this value manually, use `doorstop review`. diff --git a/doorstop/cli/tests/docs/HLT001.yml b/doorstop/cli/tests/docs/HLT001.yml index d155697b5..6362e5819 100644 --- a/doorstop/cli/tests/docs/HLT001.yml +++ b/doorstop/cli/tests/docs/HLT001.yml @@ -3,14 +3,14 @@ derived: false header: '' level: 1.1 links: -- TUT001: 63207cc0be9a957dd43f20eb88b20170 -- TUT002: 3a4234ca2b58212fa1bd6052b113daa7 -- TUT004: 81b4d9e74572f0a91b46c924de931c36 -- TUT008: 2dbd9266fa287cc3f765c2a81aa57a91 -- TUT017: b77c84ce6fd12c137a11197baa3064e9 -- TUT019: 85c96dfa447540b5433a67f1e1114c61 +- TUT001: UdIKq3W6wFQh-0c_VH39gf_h_ylXOAhobQ-ULSgiH-Y= +- TUT002: yJH1DjAtUch02wejY1yhbglJskFa9mf2VgusvEF03vU= +- TUT004: I36aGjE75oB5vbPvUlM_gXuyLh_56CfVmYuAcEzsa6U= +- TUT008: z3Xivwhj4Ii69-OvVs7lj1qt4owdivQLvMi7wMGxL6Y= +- TUT017: JvHYGJBTVYk--HFVudf5PMOvTHZuikZf5trmX1TKikE= +- TUT019: Wg_m37OqgVhFw9YvjZkxv9mFdrg04ZIy8u1NLg4Pvh0= normative: true ref: test_tutorial_section_1 -reviewed: 2e4702d52e9ab2fd24b9d22270bcc4dc +reviewed: LuZMejVVbNoVI-fZff7mrEqiORKLfSvW0IYGX1CTafA= text: | Tutorial Section 1.0: diff --git a/doorstop/cli/tests/docs/HLT002.yml b/doorstop/cli/tests/docs/HLT002.yml index e747b0c7f..17b4dcdea 100644 --- a/doorstop/cli/tests/docs/HLT002.yml +++ b/doorstop/cli/tests/docs/HLT002.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 1.2 links: -- TUT009: 49abe5f194cc21ad59a12973f320e93e -- TUT010: 8617d77ba54ccf850c3e590dd6fa0222 +- TUT009: A_rTJjsI_7B9QRUOWaqSBxquBdz1t9h_HwNn3cQXtQQ= +- TUT010: zgtZEugq0wM6J06MTFhb_kGQtUdus1Qdi_HTc-ZiReI= normative: true ref: test_tutorial_section_2 -reviewed: ff6c3f091c35d597121a1466bf157b7a +reviewed: zXSVvXJUdWg5mMc78SyoUg7iFagz82_GKz1uDSK0tAA= text: | Tutorial Section 2.0: diff --git a/doorstop/cli/tests/docs/HLT003.yml b/doorstop/cli/tests/docs/HLT003.yml index 6fd630a5f..c760595ac 100644 --- a/doorstop/cli/tests/docs/HLT003.yml +++ b/doorstop/cli/tests/docs/HLT003.yml @@ -3,11 +3,11 @@ derived: false header: '' level: 1.3 links: -- TUT012: 000c0e9c39a92c6eb93902e4ea972740 -- TUT013: d9ecaf05f4eba86402b07d0ef10ff8f6 -- TUT016: 1e9933f973dc2d1ebbc101b414046fa1 +- TUT012: VkQ9YnIdcmX4-9b9WpMwi2Ghqd4Tg5qMn8pqrGGmXas= +- TUT013: 7lqiX5VtcvclAHuCzl7mqVr17Xu1PEQNuquw80DNDSQ= +- TUT016: ZA0D9hs_RcGQvBR3EjlVdAYRp1lonVCBBq29AVU-vPE= normative: true ref: test_tutorial_section_3 -reviewed: b69dc79fcd47cc1fca2cdea7f8c1ac1e +reviewed: aME0_SIctRosiaSzFJLZSugR1lZfDkgnSXyPiMUQd-A= text: | Tutorial Section 3.0: diff --git a/doorstop/cli/tests/docs/HLT004.yml b/doorstop/cli/tests/docs/HLT004.yml index d8b9078a7..7d9f6e8a5 100644 --- a/doorstop/cli/tests/docs/HLT004.yml +++ b/doorstop/cli/tests/docs/HLT004.yml @@ -3,9 +3,9 @@ derived: false header: '' level: 1.4 links: -- TUT015: 208dbf9e5350223aa2c261411b9075ea +- TUT015: ClzVApdcWd-VQIuz7XN_SRyRvlFUVD9A6XONsF9ZNT4= normative: true ref: test_tutorial_section_4 -reviewed: 05cc1129d5beef4a69808529b68147f0 +reviewed: uqurqigZ0qa92QvdApGpiaV4htLBKHLOZT0xoOOe6-8= text: | Tutorial Section 4.0: diff --git a/doorstop/cli/tests/docs/HLT005.yml b/doorstop/cli/tests/docs/HLT005.yml index 42a95a76d..c5bc77096 100644 --- a/doorstop/cli/tests/docs/HLT005.yml +++ b/doorstop/cli/tests/docs/HLT005.yml @@ -5,6 +5,6 @@ level: 1.0 links: [] normative: false ref: '' -reviewed: 3ff43d3e1c49802b6d00018f66fbb53d +reviewed: b15hY4KHGmxUEWzRPFSCWv5ToVl0lbsdIgTv8O5xVA0= text: | Automated Tests diff --git a/doorstop/cli/tests/files/A001.txt b/doorstop/cli/tests/files/A001.txt index 7ecc7b52c..7bc14d2b5 100644 --- a/doorstop/cli/tests/files/A001.txt +++ b/doorstop/cli/tests/files/A001.txt @@ -1,10 +1,11 @@ active: true derived: false +header: '' level: 1.0 links: -- B001: 4f8f0ce49c56474c07bb7d3aebee81fd +- B001: xaO5x-ZxaHLy2knS_DD73aXtVRV3hxqCmJInnCh2PZY= normative: true ref: '' -reviewed: e805f473655509bd0b1d0bd167d5e9b3 +reviewed: JEp17AY60onnnNJH7zLSYmM5O2d3heNVB96iEGFkX48= text: | A001 diff --git a/doorstop/cli/tests/files/A002.txt b/doorstop/cli/tests/files/A002.txt index dd32d45ee..d466ee6d6 100644 --- a/doorstop/cli/tests/files/A002.txt +++ b/doorstop/cli/tests/files/A002.txt @@ -1,10 +1,11 @@ active: true derived: false +header: '' level: 1.1 links: -- A002: 23e02cca707fc2db356546bf9b09c664 +- A002: xwOeM6ISel7jEK2qfGlKduG-u5zjhv0uybQrC61UbDQ= normative: true ref: '' -reviewed: 1e9d4868c614ccb2c73f06145df5e21b +reviewed: 4jsCT-Eq-WsIKbMoEV-tzo4AJ_I2_Bs0laFUehmJETg= text: | A002 diff --git a/doorstop/cli/tests/files/B001.txt b/doorstop/cli/tests/files/B001.txt index 4da27e383..f2112a57f 100644 --- a/doorstop/cli/tests/files/B001.txt +++ b/doorstop/cli/tests/files/B001.txt @@ -1,10 +1,11 @@ active: true derived: false +header: '' level: 1.0 links: -- B002: 26f9500c1a290315dbfffade4a4a3eba +- B002: gDTkEwZSPXcHS-l4h25uOvA8kPtZ6kF0srVr6KbD2Zo= normative: true ref: '' -reviewed: e393ce229853b50eb4f8b4e27457bb22 +reviewed: GZSV6eLVc5kAfY6bwMSAT1oTHouyBLJHLOUDJu5E-J8= text: | B001 diff --git a/doorstop/cli/tests/files/B002.txt b/doorstop/cli/tests/files/B002.txt index a4ee55008..fb88a61b0 100644 --- a/doorstop/cli/tests/files/B002.txt +++ b/doorstop/cli/tests/files/B002.txt @@ -1,11 +1,12 @@ active: true derived: false +header: '' level: 1.1 links: -- A001: a5e44cddfa203a4e3f8ae9d93e28bda7 -- A002: 23e02cca707fc2db356546bf9b09c664 +- A001: tVIIYUpx8ypqwRceNq8fPnXtMRBkuVJEcJHF-0oVya8= +- A002: xwOeM6ISel7jEK2qfGlKduG-u5zjhv0uybQrC61UbDQ= normative: true ref: '' -reviewed: b151d8073a4562ca541c64968e8efa6d +reviewed: 64iJUOaTCc2Ufto1KD7_B5Rj2mthKNbuElJvZI52n9k= text: | B002 diff --git a/doorstop/cli/tests/files/C001.txt b/doorstop/cli/tests/files/C001.txt index f563f0c33..b957add4c 100644 --- a/doorstop/cli/tests/files/C001.txt +++ b/doorstop/cli/tests/files/C001.txt @@ -1,11 +1,12 @@ active: true derived: false +header: '' level: 1.0 links: -- C002: deadbeefdeadbeefdeadbeefdeadbeef -- C003: deadbeefdeadbeefdeadbeefdeadbeef +- C002: ThisIsTheFingerprintOfASuspectLinkABCDEFGHI= +- C003: ThisIsTheFingerprintOfASuspectLinkABCDEFGHI= normative: true ref: '' -reviewed: 918294db8654e4443cc4b221a51d618b +reviewed: czv54TPcUklkenTWIS96RvaEKb_vYY9wKgwD5TJcKsA= text: | C001 diff --git a/doorstop/cli/tests/files/C002.txt b/doorstop/cli/tests/files/C002.txt index 0a4eb8060..fc9bffc53 100644 --- a/doorstop/cli/tests/files/C002.txt +++ b/doorstop/cli/tests/files/C002.txt @@ -1,9 +1,10 @@ active: true derived: false +header: '' level: 1.1 links: [] normative: true ref: '' -reviewed: d48826bf3f51ec9d79f9ef501e397ccf +reviewed: d05UOdrvVooFi8X_3XHRFPrHG3d5DE5yH0sc1dIaZ64= text: | C002 diff --git a/doorstop/cli/tests/files/C003.txt b/doorstop/cli/tests/files/C003.txt index 6376a1d09..435492f6a 100644 --- a/doorstop/cli/tests/files/C003.txt +++ b/doorstop/cli/tests/files/C003.txt @@ -1,9 +1,10 @@ active: true derived: false +header: '' level: 1.2 links: [] normative: true ref: '' -reviewed: 486c91baf12e1e0190e7c37b0ef9d526 +reviewed: QERl1YZnr5RYggS6Pkf5Sibzh9FJ0CfDGGFe6lDpY5U= text: | C003 diff --git a/doorstop/core/tests/docs/LLT001.yml b/doorstop/core/tests/docs/LLT001.yml index 59e0fb50f..2ec94148c 100644 --- a/doorstop/core/tests/docs/LLT001.yml +++ b/doorstop/core/tests/docs/LLT001.yml @@ -3,9 +3,9 @@ derived: false header: '' level: 1.1 links: -- REQ003: 1f33605bbc5d1a39c9a6441b91389e88 +- REQ003: 9TcFUzsQWUHhoh5wsqnhL7VRtSqMaIhrCXg7mfIkxKM= normative: true ref: Verify an item can be added to a document. -reviewed: c87f21066512a269d35f83944607893c +reviewed: 3cWsswJTpxB9WHng7lXLeM4jQW6zbPTZtt1vL1mZFMI= text: | Test adding items: diff --git a/doorstop/core/tests/docs/LLT002.yml b/doorstop/core/tests/docs/LLT002.yml index c30e15d16..110c7ed37 100644 --- a/doorstop/core/tests/docs/LLT002.yml +++ b/doorstop/core/tests/docs/LLT002.yml @@ -3,9 +3,9 @@ derived: false header: '' level: 1.2 links: -- REQ004: 94f4db8d1a50ab62ee0edec1e28c0afb +- REQ004: T2tSkn27DO3GXvagwOgNNLvhW4FPNg9gyLfru-l9hWQ= normative: true ref: Verify Markdown can be published from a document. -reviewed: ac1b90d6b6404a0c4b6f512bf8c4644a +reviewed: ly_FQiijvn6dMCKTGW5gzw3zovTXRmB5g_WFv39j0nA= text: | Test publishing Markdown: diff --git a/doorstop/core/tests/docs/LLT003.yml b/doorstop/core/tests/docs/LLT003.yml index 99700e991..a76cc9b6a 100644 --- a/doorstop/core/tests/docs/LLT003.yml +++ b/doorstop/core/tests/docs/LLT003.yml @@ -3,9 +3,9 @@ derived: false header: '' level: 1.3 links: -- REQ007: 1b2201126b830e4ea9f57c77dbd6a38e +- REQ007: N4qTPlDi0z6kClsYAWlTsYPYWPylyr5KscMlxyYlzbA= normative: true ref: Verify text can be published from a document. -reviewed: bbe335058ebdee8d5d3740ae8e601120 +reviewed: nZXA_TD_MfctNFPxpkuwjeucmfGh3588iDeLsaExROA= text: | Test publishing text: diff --git a/doorstop/core/tests/docs/LLT004.yml b/doorstop/core/tests/docs/LLT004.yml index 53d885722..e5e0042cc 100644 --- a/doorstop/core/tests/docs/LLT004.yml +++ b/doorstop/core/tests/docs/LLT004.yml @@ -3,9 +3,9 @@ derived: false header: '' level: 1.4 links: -- REQ008: 0bcefd81b9d92145690ac5ab7d6e2ca0 +- REQ008: Y9QwGNJVzJSHbW9sHzBqswqAtF5v8OJup8HEH7E2qHU= normative: true ref: Verify the items in a document can be accessed. -reviewed: a97970c0bc91f349e54211023345a67a +reviewed: vD17pIGCoBclRlwG71wnHHt_Ng1jkCo4uq2h6hOYBWw= text: | Test getting items from a document: diff --git a/doorstop/core/tests/docs/LLT005.yml b/doorstop/core/tests/docs/LLT005.yml index 36840f80d..d451763c5 100644 --- a/doorstop/core/tests/docs/LLT005.yml +++ b/doorstop/core/tests/docs/LLT005.yml @@ -3,9 +3,9 @@ derived: false header: '' level: 1.5 links: -- REQ001: 37a3faae380b4e466aaf18c31f2184c0 +- REQ001: avwblqPimDJ2OgTrRCXxRPN8FQhUBWqPIXm7kSR95C4= normative: true ref: Verify an item's reference can also be a filename. -reviewed: 3d708f9247d638ef3580312c99a873e7 +reviewed: G96xqQH4CjV1i3ZwiWtUKbbDisOK28E7ik8aItcy07A= text: | Test referencing an external file by name: diff --git a/doorstop/core/tests/docs/LLT007.yml b/doorstop/core/tests/docs/LLT007.yml index 032058174..488ee2b56 100644 --- a/doorstop/core/tests/docs/LLT007.yml +++ b/doorstop/core/tests/docs/LLT007.yml @@ -3,15 +3,15 @@ derived: false header: '' level: 2.1 links: -- REQ009: 6c23761dd907de37c62614155cca22cc -- REQ011: e58a22974b6610a0698866fce6c1ad14 -- REQ012: 456cf6a9040c790588ca8c78e1ed350f -- REQ013: 3dce36a426be6e9901feac6de75c1d71 -- REQ014: 634e782d9c7ec27a279e4fd303afe05f -- REQ015: 5057c48dd88b53fe5e639e1e33126714 +- REQ009: uuTiyRLtSfUnneuE71WqML8D_X8YtiKj02Ehlb8b2bg= +- REQ011: 3N-eJ3o7Va-Vwx8F4VCE1eYw4WCwK1DleYM95RfsaEQ= +- REQ012: aDEVUTCV4yqDY99sfjch7otkgidiyG0We8tGSTWD9Hs= +- REQ013: ch1ilz7OJnQhSuKbpcN81Z0ml2z6lBTQqV6rWanW_ZA= +- REQ014: r_QHE6crBVcD_cEeXXtztbaeU7PoTnvpQ6uSpR3M63w= +- REQ015: DxAA240XYSKeWMmaKCR3OymyabO52_T7dQGRVfF7yKw= normative: true ref: '' -reviewed: e865230b7f344df2b0122ca90e278fce +reviewed: yFFQ523SPsaP7IgGKaQ1f-guLTZ0-8msYsaqK-zuxAI= text: | These checks ensure the version control system (VCS) meets the needs of requirements management: diff --git a/doorstop/core/tests/docs/LLT008.yml b/doorstop/core/tests/docs/LLT008.yml index 5eb849701..92306a574 100644 --- a/doorstop/core/tests/docs/LLT008.yml +++ b/doorstop/core/tests/docs/LLT008.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 2.2 links: -- REQ015: 5057c48dd88b53fe5e639e1e33126714 +- REQ015: DxAA240XYSKeWMmaKCR3OymyabO52_T7dQGRVfF7yKw= normative: true ref: '' -reviewed: 05bcc369bcf9b1869049674546b41dba +reviewed: 5HmM-ABqS824omdludZzfX5gPwIH2gEq4l3EYf9wXkY= text: | These checks ensure the Python package is distributed properly: diff --git a/doorstop/core/tests/docs/LLT009.yml b/doorstop/core/tests/docs/LLT009.yml index 8630980ce..937a92019 100644 --- a/doorstop/core/tests/docs/LLT009.yml +++ b/doorstop/core/tests/docs/LLT009.yml @@ -5,6 +5,6 @@ level: 1.0 links: [] normative: false ref: '' -reviewed: 34bc7c87d78400ef325041b4dd2e6fa2 +reviewed: kSJLszT3Mu5O-OdoMVqiniUEc1w4voBPiZZJ4bmfBBs= text: | Automated Tests diff --git a/doorstop/core/tests/docs/LLT010.yml b/doorstop/core/tests/docs/LLT010.yml index a2b77eeeb..35bb521ae 100644 --- a/doorstop/core/tests/docs/LLT010.yml +++ b/doorstop/core/tests/docs/LLT010.yml @@ -5,6 +5,6 @@ level: 2.0 links: [] normative: false ref: '' -reviewed: 6db517f3e8cf9e8f861e9c53f93019ff +reviewed: vAqWkWng0CMNOxNTMWZGUC-l3YfBOIpl1dIxJdUh3wQ= text: | Inspection Tests diff --git a/doorstop/core/tests/files/REQ002.yml b/doorstop/core/tests/files/REQ002.yml index c26fadd52..9b6de5c73 100644 --- a/doorstop/core/tests/files/REQ002.yml +++ b/doorstop/core/tests/files/REQ002.yml @@ -6,7 +6,7 @@ level: 2.1 links: [] normative: true ref: '' -reviewed: 50ae164a198e612dee696cc80942dc29 +reviewed: 1PvBLmy0xmdK_zLKrLu1au0wlIw_zsD6A8Oc5F4zWxU= text: | Hello, world! diff --git a/doorstop/core/tests/files/exported.csv b/doorstop/core/tests/files/exported.csv index 14c9a7bcd..235a83067 100644 --- a/doorstop/core/tests/files/exported.csv +++ b/doorstop/core/tests/files/exported.csv @@ -28,7 +28,7 @@ Reviewer --> (Review Item) System --> (Suspect Changes) System --> (Integrity) @enduml -```",,,True,False,Plantuml,True,50ae164a198e612dee696cc80942dc29 +```",,,True,False,Plantuml,True,1PvBLmy0xmdK_zLKrLu1au0wlIw_zsD6A8Oc5F4zWxU= REQ2-001,2.1,"Hello, world! Test Math Expressions in Latex Style: diff --git a/doorstop/core/tests/files/exported.tsv b/doorstop/core/tests/files/exported.tsv index b340b564b..39bd25634 100644 --- a/doorstop/core/tests/files/exported.tsv +++ b/doorstop/core/tests/files/exported.tsv @@ -28,7 +28,7 @@ Reviewer --> (Review Item) System --> (Suspect Changes) System --> (Integrity) @enduml -```" True False Plantuml True 50ae164a198e612dee696cc80942dc29 +```" True False Plantuml True 1PvBLmy0xmdK_zLKrLu1au0wlIw_zsD6A8Oc5F4zWxU= REQ2-001 2.1 "Hello, world! Test Math Expressions in Latex Style: diff --git a/doorstop/core/tests/files/exported.xlsx b/doorstop/core/tests/files/exported.xlsx index bbc5108aa18ddc0490753decbf4dea4195fc35ae..9bd78d2d38e252df2a62d0806827d28f360b1904 100644 GIT binary patch delta 2107 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 delta 2140 zcmZ9Ndpr~BAIE2InK-k}5Gl8Ei`ImaST4~Btwbq}VVk+lB|5U)Cb`AXI30IM7s|wP z%`KN)(nd~&$n6jsX^iq4{myy4I?o@^=k@x2pU?OCKHuk$H%%u-N5UR0C@lgz za1_nI-dZvvXjwsbES%%1201Z|9l!wV#s1Q>o&|klgC|SWO+HCRy;&s2*#}05Nm|QU zfc9af;3`I%Nte^dR6-ap@Gm5He@oBP)G}nm^cS1RPvMl>aWX`TER~G+)bTspH20}x zxh@>LZvNnH2hO|lwUqRldPzbv_Va~RM^Xx-5rlUPi^?;5ao9*rw`YEMDyK91yn%3| z&aQ@1VnBdeHqVFrea1xmPlFKeP3$o-oOt68+X&zI!iD+PJ8$K~`X$;kLoU!WWXc%|=TT z)*a)@YXH3 zC|{Qk>vT;+nGId|-_E1PLDoXh?11b0bIS7coOHcpL1jy>5KmBSCO93=vf%WkZEThn zg+2xm+E>+HmLH_V+1~yRsc=O_iI`WL2WhoB&~9HA`}+VFqKA!wKsT85XbAZUj74Zx z$fUPyVy6lrft9VRwzB2R<9(-N-z{d`50MfNQ@vzwYiCy!s{AG|wRr6y>OR?5)>Ipj zb>t1CbY}oh&%NLJqKXQV6sI=xNU;?w`2lED9!GG(i&JI`6k|(q0+;mh9ckrVKzVk{ zEq2w%h==VKd!@V>6X%Tmsc{-s;=WEP=p{@`*<3Kqcsg{W?p#$;07f{)RX8P=v1IV1 zrgo#A#UXJpDa#ikyhq_CD^KK=l=f-2X`WDS5{Ap(6H7uZrrE24`n+Cesp`3DV3g4J zguV!kQq(}oLf|V|w=5>`H!(sCRh(2pg*nXzdb+(M=gNU@XTg1=digQrZ}k4mz;ZEF zZOf5;avb+$vt5g6?TH#`JBmHvQcgE^$_+|m_8;mcDBOx-IJd>WWo*6*K7oi#B(* zHB8>rp=Q!WHdBvfO7FI(xs`XbQI8ssRyIru0f~?~hPIV63-&J&N(Vv?^}1>cN#by6 zwsHfi2oUyJnqdd-)pM7a+r*AUxqcDlof;kC8Ptb=_Vp1EXT+)R!E3V>EX}SHD`HaQunU?2>2*$%rJfo+NqMl{45B@)ugvpo=-u zjcsch?rIvIntvA_?8yJ8$eyN^Jc<^{v#pGfANG~jQyj8-2qQle?OT{Ic)l*!Av*E@ zJ-DzRy0E=NQvCuQjC=k5YF@2VtQ=QvUt5|)cM%F0blP~t;MIX}o}EC@Q{S;xW5?*g zI!E0$op5YHDnJKIbizGKudRC?W~OB&6B>CD;}=`W_FgAP?v5H! zT4Y8vo~%lkG&D(kyd3K^l-EAvoMl}9+A{0Z({oDG$ZQ+b-kL&D_OayVxU%uG&?eapfdMN77wUcq+&+DAu__iXnIHiLR)xRCBy2<>;2h2~;%k`1W{vrIV#H2Ak@y&{~UtuMx z`sX*@>L51OM7uBQh$MRJonHxh7XF!MKAE1ck|0yKQJ^mcl;I9<^yf37nSzo~pX0xM zxd<;e-PH!@o4r#~8nTjnmAB^?WH1g%eijhq^MR%Wp4w6dNGk1TAQv*R9iT!jeg=AB zM*pIfCM9jKZ9_{Rm-q!Qv`pzEd$uA)pB0a`3IG88LI8jSA2|Q48v=0Jg0#Z6TLLam z5e5SQu4E5Vpsvo=ZjTlK!UX^2xgGA)Og0bz`0bw>e7zyCz&D1HwkhW3=jXiz vum76!59kM%^AE4{3+(#E91YnvyOL=oaHZ{DUcu!Bh_q?=K9MI|w*&qMH`~DK diff --git a/doorstop/core/tests/files/exported.yml b/doorstop/core/tests/files/exported.yml index 9e2ae2f0b..428a9b9c2 100644 --- a/doorstop/core/tests/files/exported.yml +++ b/doorstop/core/tests/files/exported.yml @@ -53,7 +53,7 @@ REQ002: links: [] normative: true ref: '' - reviewed: 50ae164a198e612dee696cc80942dc29 + reviewed: 1PvBLmy0xmdK_zLKrLu1au0wlIw_zsD6A8Oc5F4zWxU= text: | Hello, world! diff --git a/doorstop/core/tests/test_importer.py b/doorstop/core/tests/test_importer.py index a92ffcd3e..a02824641 100644 --- a/doorstop/core/tests/test_importer.py +++ b/doorstop/core/tests/test_importer.py @@ -170,7 +170,7 @@ def test_file_csv(self, mock_itemize): False, 'Plantuml', True, - '50ae164a198e612dee696cc80942dc29', + '1PvBLmy0xmdK_zLKrLu1au0wlIw_zsD6A8Oc5F4zWxU=', ], [ 'REQ2-001', @@ -331,7 +331,7 @@ def test_file_xlsx(self, mock_itemize): False, 'Plantuml', True, - '50ae164a198e612dee696cc80942dc29', + '1PvBLmy0xmdK_zLKrLu1au0wlIw_zsD6A8Oc5F4zWxU=', ], [ 'REQ2-001', diff --git a/doorstop/core/tests/test_item.py b/doorstop/core/tests/test_item.py index f07ce8e6d..60449b98a 100644 --- a/doorstop/core/tests/test_item.py +++ b/doorstop/core/tests/test_item.py @@ -673,14 +673,14 @@ def test_new_existing(self): def test_stamp(self): """Verify an item's contents can be stamped.""" - stamp = 'c6a87755b8756b61731c704c6a7be4a2' + stamp = 'OoHOpBnrt8us7ph8DVnz5KrQs6UBqj_8MEACA0gWpjY=' self.assertEqual(stamp, self.item.stamp()) def test_stamp_with_one_extended_reviewed(self): """Verify fingerprint with one extended reviewed attribute.""" self.item._data['type'] = 'functional' self.item.document.extended_reviewed = ['type'] - stamp = '04fdd093f67ce3a3160dfdc5d93e7813' + stamp = '5ijLUBTXGCkN-2wctQTQ5cl2-ZTDMeukDlXDy0OBCGg=' self.assertEqual(stamp, self.item.stamp()) def test_stamp_with_two_extended_reviewed(self): @@ -688,7 +688,7 @@ def test_stamp_with_two_extended_reviewed(self): self.item._data['type'] = 'functional' self.item._data['verification-method'] = 'test' self.item.document.extended_reviewed = ['type', 'verification-method'] - stamp = 'cf8aaea03cd5765bac978ad74a42d729' + stamp = 'xmXpN4L0mNHm8-5Ga24VJLc5b9J2ttG4G8XVGrgDFeU=' self.assertEqual(stamp, self.item.stamp()) def test_stamp_with_reversed_extended_reviewed_reverse(self): @@ -696,7 +696,7 @@ def test_stamp_with_reversed_extended_reviewed_reverse(self): self.item._data['type'] = 'functional' self.item._data['verification-method'] = 'test' self.item.document.extended_reviewed = ['verification-method', 'type'] - stamp = '7b14dfcc17026e98790284c5cddb0900' + stamp = '2HCtrWC2tYEpFpCtNKf-D4n_s0IrxuEuiF-6cZ6wdr0=' self.assertEqual(stamp, self.item.stamp()) def test_stamp_with_missing_extended_reviewed_reverse(self): @@ -709,7 +709,7 @@ def test_stamp_with_missing_extended_reviewed_reverse(self): 'type', 'verification-method', ] - stamp = 'cf8aaea03cd5765bac978ad74a42d729' + stamp = 'xmXpN4L0mNHm8-5Ga24VJLc5b9J2ttG4G8XVGrgDFeU=' self.assertEqual(stamp, self.item.stamp()) self.assertIn( "RQ001: missing extended reviewed attribute: missing", handler.records @@ -718,7 +718,7 @@ def test_stamp_with_missing_extended_reviewed_reverse(self): def test_stamp_links(self): """Verify an item's contents can be stamped.""" self.item.link('mock_link') - stamp = '1020719292bbdc4090bd236cf41cd104' + stamp = 'yE7YshtnqRzPryOsmNI6nkeRmE97LPB19eenX0b5cIk=' self.assertEqual(stamp, self.item.stamp(links=True)) def test_clear(self): diff --git a/doorstop/core/tests/test_item_validator.py b/doorstop/core/tests/test_item_validator.py index d5b5e6e49..5909070ec 100644 --- a/doorstop/core/tests/test_item_validator.py +++ b/doorstop/core/tests/test_item_validator.py @@ -62,7 +62,7 @@ def test_validate_reviewed(self): """Verify that checking a reviewed item updates the stamp.""" self.item._data['reviewed'] = True self.assertTrue(self.item_validator.validate(self.item)) - stamp = 'c6a87755b8756b61731c704c6a7be4a2' + stamp = 'OoHOpBnrt8us7ph8DVnz5KrQs6UBqj_8MEACA0gWpjY=' self.assertEqual(stamp, self.item._data['reviewed']) @patch('doorstop.settings.REVIEW_NEW_ITEMS', False) diff --git a/doorstop/core/tests/test_types.py b/doorstop/core/tests/test_types.py index a12924eef..22603f36b 100644 --- a/doorstop/core/tests/test_types.py +++ b/doorstop/core/tests/test_types.py @@ -399,7 +399,9 @@ def setUp(self): def test_repr(self): """Verify stamps can be represented.""" self.assertEqual("Stamp('abc123')", repr(self.stamp1)) - self.assertEqual("Stamp('2645439971b8090da05c7403320afcfa')", repr(self.stamp2)) + self.assertEqual( + "Stamp('u0t4qETWyPPPzcRu5K_2iCMAGgfLN8bDP4enBHqBsWg=')", repr(self.stamp2) + ) self.assertEqual("Stamp(True)", repr(self.stamp3)) self.assertEqual("Stamp(None)", repr(self.stamp4)) self.assertEqual("Stamp(None)", repr(self.stamp5)) @@ -407,7 +409,9 @@ def test_repr(self): def test_str(self): """Verify stamps can be converted to strings.""" self.assertEqual('abc123', str(self.stamp1)) - self.assertEqual('2645439971b8090da05c7403320afcfa', str(self.stamp2)) + self.assertEqual( + 'u0t4qETWyPPPzcRu5K_2iCMAGgfLN8bDP4enBHqBsWg=', str(self.stamp2) + ) self.assertEqual('', str(self.stamp3)) self.assertEqual('', str(self.stamp4)) self.assertEqual('', str(self.stamp5)) @@ -423,7 +427,7 @@ def test_bool(self): def test_eq(self): """Verify stamps can be equated.""" self.assertEqual('abc123', self.stamp1) - self.assertEqual('2645439971b8090da05c7403320afcfa', self.stamp2) + self.assertEqual('u0t4qETWyPPPzcRu5K_2iCMAGgfLN8bDP4enBHqBsWg=', self.stamp2) self.assertEqual(True, self.stamp3) self.assertEqual(None, self.stamp4) self.assertNotEqual(self.stamp1, self.stamp2) @@ -433,7 +437,9 @@ def test_eq(self): def test_yaml(self): """Verify stamps can be converted to their YAML dump format.""" self.assertEqual('abc123', self.stamp1.yaml) - self.assertEqual('2645439971b8090da05c7403320afcfa', self.stamp2.yaml) + self.assertEqual( + 'u0t4qETWyPPPzcRu5K_2iCMAGgfLN8bDP4enBHqBsWg=', self.stamp2.yaml + ) self.assertEqual(True, self.stamp3.yaml) self.assertEqual(None, self.stamp4.yaml) self.assertEqual(None, self.stamp5.yaml) diff --git a/doorstop/core/types.py b/doorstop/core/types.py index cfcd36e98..6ce4de482 100644 --- a/doorstop/core/types.py +++ b/doorstop/core/types.py @@ -5,6 +5,7 @@ import hashlib import os import re +from base64 import urlsafe_b64encode from typing import Union import yaml @@ -558,12 +559,12 @@ def yaml(self): return self.value @staticmethod - def digest(*values): + def digest(*values) -> str: """Hash the values for later comparison.""" - md5 = hashlib.md5() + hsh = hashlib.sha256() for value in values: - md5.update(str(value).encode()) - return md5.hexdigest() + hsh.update(str(value).encode()) + return urlsafe_b64encode(hsh.digest()).decode('utf-8') def to_bool(obj): diff --git a/reqs/REQ001.yml b/reqs/REQ001.yml index 29c0d1103..025c8abc5 100644 --- a/reqs/REQ001.yml +++ b/reqs/REQ001.yml @@ -6,6 +6,6 @@ level: 2.3 links: [] normative: true ref: '' -reviewed: 37a3faae380b4e466aaf18c31f2184c0 +reviewed: avwblqPimDJ2OgTrRCXxRPN8FQhUBWqPIXm7kSR95C4= text: | Doorstop **shall** support the storage of external requirements assets. diff --git a/reqs/REQ002.yml b/reqs/REQ002.yml index a9204e0ec..0ba7eeacf 100644 --- a/reqs/REQ002.yml +++ b/reqs/REQ002.yml @@ -5,6 +5,6 @@ level: 2.0 links: [] normative: false ref: '' -reviewed: 3b3afc2a86ebf8477a1f38abc53c2d61 +reviewed: XQwVjcTIdnbfgDZLM1ZyqMZa6aO4DrSahsK8Eji4Wzs= text: | Composition Features diff --git a/reqs/REQ003.yml b/reqs/REQ003.yml index 8473728d0..938e3bb10 100644 --- a/reqs/REQ003.yml +++ b/reqs/REQ003.yml @@ -6,7 +6,7 @@ level: 2.1 links: [] normative: true ref: '' -reviewed: 1f33605bbc5d1a39c9a6441b91389e88 +reviewed: 9TcFUzsQWUHhoh5wsqnhL7VRtSqMaIhrCXg7mfIkxKM= text: | Doorstop **shall** provide unique and permanent identifiers to linkable sections of text. diff --git a/reqs/REQ004.yml b/reqs/REQ004.yml index 5b627bd33..21dec3675 100644 --- a/reqs/REQ004.yml +++ b/reqs/REQ004.yml @@ -6,6 +6,6 @@ level: 2.2 links: [] normative: true ref: '' -reviewed: 94f4db8d1a50ab62ee0edec1e28c0afb +reviewed: T2tSkn27DO3GXvagwOgNNLvhW4FPNg9gyLfru-l9hWQ= text: | Doorstop **shall** support formatting within linkable text. diff --git a/reqs/REQ006.yml b/reqs/REQ006.yml index 09bffc747..fc7ed62ca 100644 --- a/reqs/REQ006.yml +++ b/reqs/REQ006.yml @@ -5,6 +5,6 @@ level: 3.0 links: [] normative: false ref: '' -reviewed: 4037bbff982c36941d587f224e9236f7 +reviewed: kJ7kN6wsDHYywfmsDUWTgyw91Ce2yM03vpzC5w9Y93g= text: | Presentation Features diff --git a/reqs/REQ007.yml b/reqs/REQ007.yml index 67923ee98..f50d6a953 100644 --- a/reqs/REQ007.yml +++ b/reqs/REQ007.yml @@ -6,6 +6,6 @@ level: 3.1 links: [] normative: true ref: '' -reviewed: 1b2201126b830e4ea9f57c77dbd6a38e +reviewed: N4qTPlDi0z6kClsYAWlTsYPYWPylyr5KscMlxyYlzbA= text: | Doorstop **shall** provide a way to view requirements as a document. diff --git a/reqs/REQ008.yml b/reqs/REQ008.yml index e72ac2d96..8336ac1c2 100644 --- a/reqs/REQ008.yml +++ b/reqs/REQ008.yml @@ -6,6 +6,6 @@ level: 3.2 links: [] normative: true ref: '' -reviewed: 0bcefd81b9d92145690ac5ab7d6e2ca0 +reviewed: Y9QwGNJVzJSHbW9sHzBqswqAtF5v8OJup8HEH7E2qHU= text: | Doorstop **shall** provide a way to view document items interactively. diff --git a/reqs/REQ009.yml b/reqs/REQ009.yml index a90790052..e83be153a 100644 --- a/reqs/REQ009.yml +++ b/reqs/REQ009.yml @@ -6,7 +6,7 @@ level: 3.3 links: [] normative: true ref: '' -reviewed: 6c23761dd907de37c62614155cca22cc +reviewed: uuTiyRLtSfUnneuE71WqML8D_X8YtiKj02Ehlb8b2bg= text: | Doorstop **shall** provide the capability to baseline versions of requirements. diff --git a/reqs/REQ010.yml b/reqs/REQ010.yml index c582c564e..b89659fd3 100644 --- a/reqs/REQ010.yml +++ b/reqs/REQ010.yml @@ -5,6 +5,6 @@ level: 4.0 links: [] normative: false ref: '' -reviewed: 9d5b3c0ab0e0d1c6759f173435d31bd7 +reviewed: w3QVQhmViSZ_9hlxTy89hOLiiO3zQP6juQC4hYewX7s= text: | Administration Features diff --git a/reqs/REQ011.yml b/reqs/REQ011.yml index 1c97e6529..538c87cfd 100644 --- a/reqs/REQ011.yml +++ b/reqs/REQ011.yml @@ -6,6 +6,6 @@ level: 4.1 links: [] normative: true ref: '' -reviewed: e58a22974b6610a0698866fce6c1ad14 +reviewed: 3N-eJ3o7Va-Vwx8F4VCE1eYw4WCwK1DleYM95RfsaEQ= text: | Doorstop **shall** store requirements in a permanent and secure manner. diff --git a/reqs/REQ012.yml b/reqs/REQ012.yml index 87d989535..0896dfcbf 100644 --- a/reqs/REQ012.yml +++ b/reqs/REQ012.yml @@ -6,6 +6,6 @@ level: 4.2 links: [] normative: true ref: '' -reviewed: 456cf6a9040c790588ca8c78e1ed350f +reviewed: aDEVUTCV4yqDY99sfjch7otkgidiyG0We8tGSTWD9Hs= text: | Doorstop **shall** handle change management of the requirements. diff --git a/reqs/REQ013.yml b/reqs/REQ013.yml index 47d6357ff..9ced8e137 100644 --- a/reqs/REQ013.yml +++ b/reqs/REQ013.yml @@ -6,7 +6,7 @@ level: 4.3 links: [] normative: true ref: '' -reviewed: 3dce36a426be6e9901feac6de75c1d71 +reviewed: ch1ilz7OJnQhSuKbpcN81Z0ml2z6lBTQqV6rWanW_ZA= text: | Doorstop **shall** associate requirements changes to existing developer identification. diff --git a/reqs/REQ014.yml b/reqs/REQ014.yml index 6502da33c..3a4b60b8e 100644 --- a/reqs/REQ014.yml +++ b/reqs/REQ014.yml @@ -6,6 +6,6 @@ level: 4.4 links: [] normative: true ref: '' -reviewed: 634e782d9c7ec27a279e4fd303afe05f +reviewed: r_QHE6crBVcD_cEeXXtztbaeU7PoTnvpQ6uSpR3M63w= text: | Doorstop **shall** be scalable to support thousands of requirements. diff --git a/reqs/REQ015.yml b/reqs/REQ015.yml index 8367f952f..d7cc18b38 100644 --- a/reqs/REQ015.yml +++ b/reqs/REQ015.yml @@ -6,6 +6,6 @@ level: 4.5 links: [] normative: true ref: '' -reviewed: 5057c48dd88b53fe5e639e1e33126714 +reviewed: DxAA240XYSKeWMmaKCR3OymyabO52_T7dQGRVfF7yKw= text: | Doorstop **shall** provide a lightweight installation method. diff --git a/reqs/REQ016.yml b/reqs/REQ016.yml index c280851ae..c36d7d724 100644 --- a/reqs/REQ016.yml +++ b/reqs/REQ016.yml @@ -6,7 +6,7 @@ level: 2.4 links: [] normative: true ref: '' -reviewed: cd08e04c45e8f91de19227a183f78777 +reviewed: y2OYEsfH2SeMgox69qRaoF8vq2C9JtR5eJ-0wXXIBJI= text: | Doorstop **shall** be able to import content from other requirments management tools. diff --git a/reqs/REQ017.yml b/reqs/REQ017.yml index 3e1f585cd..20369d78f 100644 --- a/reqs/REQ017.yml +++ b/reqs/REQ017.yml @@ -6,7 +6,7 @@ level: 2.5 links: [] normative: true ref: '' -reviewed: 4a5e03f8a2525f73633f078aa67e29e7 +reviewed: swor_1mByeIN71VfyIFD2i06PT2nX47zDKbrxDYWR-0= text: | Doorstop **shall** be able to export content to interact with common text/document tools. diff --git a/reqs/REQ018.yml b/reqs/REQ018.yml index f2b366d2d..597e75c0b 100644 --- a/reqs/REQ018.yml +++ b/reqs/REQ018.yml @@ -5,6 +5,6 @@ level: 1.0 links: [] normative: false ref: '' -reviewed: 36dc57d43cb60ffc9f05ffb055ac4994 +reviewed: T7URqeO_PWK6KoVq43mGLtmc_rM7Ytw7nRDIqo7FPYE= text: | Overview diff --git a/reqs/REQ019.yml b/reqs/REQ019.yml index 2209e1f46..82a57b4f1 100644 --- a/reqs/REQ019.yml +++ b/reqs/REQ019.yml @@ -6,7 +6,7 @@ level: 1.1 links: [] normative: false ref: '' -reviewed: f639ec5286fcfa4d694925a2ba29fc93 +reviewed: bb-HpMnSXh4pZIm4RHCARfJa0ifqGam0Fc5vjHEldgs= text: | Doorstop is a requirements management tool that leverages version control to store and manage a project's documentation traced from specification through diff --git a/reqs/tutorial/TUT001.yml b/reqs/tutorial/TUT001.yml index 37d617a75..88600c665 100644 --- a/reqs/tutorial/TUT001.yml +++ b/reqs/tutorial/TUT001.yml @@ -3,11 +3,11 @@ derived: false header: '' level: 1.1 links: -- REQ003: 1f33605bbc5d1a39c9a6441b91389e88 -- REQ004: 94f4db8d1a50ab62ee0edec1e28c0afb +- REQ003: 9TcFUzsQWUHhoh5wsqnhL7VRtSqMaIhrCXg7mfIkxKM= +- REQ004: T2tSkn27DO3GXvagwOgNNLvhW4FPNg9gyLfru-l9hWQ= normative: true ref: '' -reviewed: 95fa17ae70576ef02c6c46097095f52d +reviewed: 4sVZFR60cL0w9FttKN20oBQNhdF12ApSwmOnM35ddRY= text: | **Creating a New Document and Adding Items** diff --git a/reqs/tutorial/TUT002.yml b/reqs/tutorial/TUT002.yml index 7d8dbfaec..6043467b4 100644 --- a/reqs/tutorial/TUT002.yml +++ b/reqs/tutorial/TUT002.yml @@ -3,14 +3,14 @@ derived: false header: '' level: 1.2 links: -- REQ003: 1f33605bbc5d1a39c9a6441b91389e88 -- REQ004: 94f4db8d1a50ab62ee0edec1e28c0afb -- REQ011: e58a22974b6610a0698866fce6c1ad14 -- REQ012: 456cf6a9040c790588ca8c78e1ed350f -- REQ013: 3dce36a426be6e9901feac6de75c1d71 +- REQ003: 9TcFUzsQWUHhoh5wsqnhL7VRtSqMaIhrCXg7mfIkxKM= +- REQ004: T2tSkn27DO3GXvagwOgNNLvhW4FPNg9gyLfru-l9hWQ= +- REQ011: 3N-eJ3o7Va-Vwx8F4VCE1eYw4WCwK1DleYM95RfsaEQ= +- REQ012: aDEVUTCV4yqDY99sfjch7otkgidiyG0We8tGSTWD9Hs= +- REQ013: ch1ilz7OJnQhSuKbpcN81Z0ml2z6lBTQqV6rWanW_ZA= normative: true ref: '' -reviewed: 23a1302a0d674a2accf1f15f1175d081 +reviewed: 21EAe6LYhAzOvGgzXcid08kyNt3aXdRjf64b24cf-AA= text: | **Creating a Child Document with Links to the Parent Document** diff --git a/reqs/tutorial/TUT003.yml b/reqs/tutorial/TUT003.yml index 927969d3f..cc4a78cfb 100644 --- a/reqs/tutorial/TUT003.yml +++ b/reqs/tutorial/TUT003.yml @@ -1,10 +1,9 @@ active: true derived: false header: '' -level: 1.0 +level: 1 links: [] -normative: false +normative: true ref: '' -reviewed: 639ae71d6d884f6567866833a5b17c1a -text: | - Document and Item Creation +reviewed: CFQ_a9SPDWwyv_Sw-k8Vkm4XnC3tDkwRXAYZ9bk_IQ8= +text: '' diff --git a/reqs/tutorial/TUT004.yml b/reqs/tutorial/TUT004.yml index e07acba6f..a1e6fc7f8 100644 --- a/reqs/tutorial/TUT004.yml +++ b/reqs/tutorial/TUT004.yml @@ -3,13 +3,13 @@ derived: false header: '' level: 1.3 links: -- REQ003: 1f33605bbc5d1a39c9a6441b91389e88 -- REQ011: e58a22974b6610a0698866fce6c1ad14 -- REQ012: 456cf6a9040c790588ca8c78e1ed350f -- REQ013: 3dce36a426be6e9901feac6de75c1d71 +- REQ003: 9TcFUzsQWUHhoh5wsqnhL7VRtSqMaIhrCXg7mfIkxKM= +- REQ011: 3N-eJ3o7Va-Vwx8F4VCE1eYw4WCwK1DleYM95RfsaEQ= +- REQ012: aDEVUTCV4yqDY99sfjch7otkgidiyG0We8tGSTWD9Hs= +- REQ013: ch1ilz7OJnQhSuKbpcN81Z0ml2z6lBTQqV6rWanW_ZA= normative: true ref: '' -reviewed: 9e61ea88ad1b63819610dcdce6efe4e5 +reviewed: 3KoKMtZljDE7t4mzJIY_s13kMfAiDUgV_Ig5WMoWZ2U= text: | **Removing Items and Links** diff --git a/reqs/tutorial/TUT005.yml b/reqs/tutorial/TUT005.yml index 292bb5994..b705ab427 100644 --- a/reqs/tutorial/TUT005.yml +++ b/reqs/tutorial/TUT005.yml @@ -5,6 +5,6 @@ level: 2.0 links: [] normative: false ref: '' -reviewed: f2b19737fd35618847eef21f2783472f +reviewed: HmjDKBW1DjmixkzdADInyZN3lRQXsJjFFr4W8PFMGOo= text: | Publishing Documents diff --git a/reqs/tutorial/TUT008.yml b/reqs/tutorial/TUT008.yml index 74df50419..a74a455a9 100644 --- a/reqs/tutorial/TUT008.yml +++ b/reqs/tutorial/TUT008.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 1.4 links: -- REQ003: 1f33605bbc5d1a39c9a6441b91389e88 +- REQ003: 9TcFUzsQWUHhoh5wsqnhL7VRtSqMaIhrCXg7mfIkxKM= normative: true ref: '' -reviewed: c4e3f66be726f0c52536f13720148f03 +reviewed: vNBr4d83a8SIKz4mOaDu2_eLZlXcgDoKSW09sThlb9U= text: | **Validating the Tree** diff --git a/reqs/tutorial/TUT009.yml b/reqs/tutorial/TUT009.yml index c7d252b63..6e4990d75 100644 --- a/reqs/tutorial/TUT009.yml +++ b/reqs/tutorial/TUT009.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 2.1 links: -- REQ007: 1b2201126b830e4ea9f57c77dbd6a38e +- REQ007: N4qTPlDi0z6kClsYAWlTsYPYWPylyr5KscMlxyYlzbA= normative: true ref: '' -reviewed: 0dbaa40898950a780a11c481492f6366 +reviewed: c5B5iK7ImS2RzInDT-2lGLxphNQbn_kiXBAZnUYs-to= text: | **Publishing a Document as Text** diff --git a/reqs/tutorial/TUT010.yml b/reqs/tutorial/TUT010.yml index abc946c38..fda227a80 100644 --- a/reqs/tutorial/TUT010.yml +++ b/reqs/tutorial/TUT010.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 2.2 links: -- REQ007: 1b2201126b830e4ea9f57c77dbd6a38e +- REQ007: N4qTPlDi0z6kClsYAWlTsYPYWPylyr5KscMlxyYlzbA= normative: true ref: '' -reviewed: 260ebc296fee841bda6010189194c56d +reviewed: ngBTlPb2ceCpLCYx6k8-dubKS0mHe-5rWRzx0JxmmCk= text: | **Publishing All Documents as an HTML Directory** diff --git a/reqs/tutorial/TUT011.yml b/reqs/tutorial/TUT011.yml index 2292051d6..76feee35d 100644 --- a/reqs/tutorial/TUT011.yml +++ b/reqs/tutorial/TUT011.yml @@ -5,6 +5,6 @@ level: 3.0 links: [] normative: false ref: '' -reviewed: 818d87b8a8914c73073af750d69227bd +reviewed: kjxGvPAHLrgJljFuuKToVfM1Z90a216bOizMsLq8sPw= text: | Importing Content diff --git a/reqs/tutorial/TUT012.yml b/reqs/tutorial/TUT012.yml index 77c91b485..61c21d5b6 100644 --- a/reqs/tutorial/TUT012.yml +++ b/reqs/tutorial/TUT012.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 3.2 links: -- REQ016: cd08e04c45e8f91de19227a183f78777 +- REQ016: y2OYEsfH2SeMgox69qRaoF8vq2C9JtR5eJ-0wXXIBJI= normative: true ref: '' -reviewed: 04cdf642c704815067e7433c3ba37c49 +reviewed: EZkHT1vOOvOHIbaKJ9rpVB6_3WAbYK7c9dip4RMf4zU= text: | **Importing a Document** diff --git a/reqs/tutorial/TUT013.yml b/reqs/tutorial/TUT013.yml index bbc9c7c1b..00dd5c01a 100644 --- a/reqs/tutorial/TUT013.yml +++ b/reqs/tutorial/TUT013.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 3.3 links: -- REQ016: cd08e04c45e8f91de19227a183f78777 +- REQ016: y2OYEsfH2SeMgox69qRaoF8vq2C9JtR5eJ-0wXXIBJI= normative: true ref: '' -reviewed: fb9ce2ceabcc8d5743490be3e8649c3b +reviewed: 6Zfa7fYSteAA535QNMs2ro1RU-g72XXKrm9tOffQT2Q= text: | **Importing an Item** diff --git a/reqs/tutorial/TUT014.yml b/reqs/tutorial/TUT014.yml index 3acc468f7..9ba0249bc 100644 --- a/reqs/tutorial/TUT014.yml +++ b/reqs/tutorial/TUT014.yml @@ -5,6 +5,6 @@ level: 4.0 links: [] normative: false ref: '' -reviewed: f409664008b4e435b67652f0a059eb37 +reviewed: MJIh2AD06WwsFv7VWQ52BCL8Eu4SqFHwJMhw0g3uT1k= text: | Exporting Content diff --git a/reqs/tutorial/TUT015.yml b/reqs/tutorial/TUT015.yml index b7af3ff83..83db715ef 100644 --- a/reqs/tutorial/TUT015.yml +++ b/reqs/tutorial/TUT015.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 4.1 links: -- REQ017: 4a5e03f8a2525f73633f078aa67e29e7 +- REQ017: swor_1mByeIN71VfyIFD2i06PT2nX47zDKbrxDYWR-0= normative: true ref: '' -reviewed: 2ebf8d0b43994429742372b50c00e50d +reviewed: bWhqqNInBaWMU4MafipoqwNjzTCPHm568-Vs5B-QaCk= text: | **Exporting a Document** diff --git a/reqs/tutorial/TUT016.yml b/reqs/tutorial/TUT016.yml index 01e725f65..2d97cee09 100644 --- a/reqs/tutorial/TUT016.yml +++ b/reqs/tutorial/TUT016.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 3.1 links: -- REQ016: cd08e04c45e8f91de19227a183f78777 +- REQ016: y2OYEsfH2SeMgox69qRaoF8vq2C9JtR5eJ-0wXXIBJI= normative: true ref: '' -reviewed: c077c9e841dfcb2ee3795da8dd395f4c +reviewed: -urC-KEzvImhVzQizAOXbwhTVYZN6zr3wD2a4_088mk= text: | **Importing a File** diff --git a/reqs/tutorial/TUT017.yml b/reqs/tutorial/TUT017.yml index 97e71a00d..ba4c71c57 100644 --- a/reqs/tutorial/TUT017.yml +++ b/reqs/tutorial/TUT017.yml @@ -3,10 +3,10 @@ derived: false header: '' level: 1.5 links: -- REQ004: 94f4db8d1a50ab62ee0edec1e28c0afb +- REQ004: T2tSkn27DO3GXvagwOgNNLvhW4FPNg9gyLfru-l9hWQ= normative: true ref: '' -reviewed: 6c611696a7b09ca26f613ecad4d3fb1f +reviewed: uPOK_klxAHJRhHZmfgD1HJSs1Gs39jKv2uvlInyl1Ec= text: | ### Headings 3 diff --git a/reqs/tutorial/TUT018.yml b/reqs/tutorial/TUT018.yml index 3644738cd..45bd019c5 100644 --- a/reqs/tutorial/TUT018.yml +++ b/reqs/tutorial/TUT018.yml @@ -5,6 +5,6 @@ level: 1.6.0 links: [] normative: false ref: '' -reviewed: d34af4524b974217cbbd91e635f137a5 +reviewed: PuN-p68SLzbHje_SZ5OrEFicycXQHvuHSO-2caAnaqo= text: | Sub headings diff --git a/reqs/tutorial/TUT019.yml b/reqs/tutorial/TUT019.yml index 3ce6966ff..11961e004 100644 --- a/reqs/tutorial/TUT019.yml +++ b/reqs/tutorial/TUT019.yml @@ -3,9 +3,9 @@ derived: false header: '' level: 1.6.1 links: -- REQ004: 94f4db8d1a50ab62ee0edec1e28c0afb +- REQ004: T2tSkn27DO3GXvagwOgNNLvhW4FPNg9gyLfru-l9hWQ= normative: true ref: '' -reviewed: e48e28000b262f0165edd2e4cbf7914d +reviewed: sOcI4__o2goMqOAECNTgCLlW19__Yhf7Amq9xKa8ZEA= text: | Sub headings can be created by a level that ends in .0