{"id":1558,"date":"2010-07-10T15:08:50","date_gmt":"2010-07-10T20:08:50","guid":{"rendered":"http:\/\/mikeconley.ca\/blog\/?p=1558"},"modified":"2023-12-20T16:25:16","modified_gmt":"2023-12-20T21:25:16","slug":"filing-defects-in-review-board","status":"publish","type":"post","link":"https:\/\/mikeconley.ca\/blog\/2010\/07\/10\/filing-defects-in-review-board\/","title":{"rendered":"Filing Defects in Review Board"},"content":{"rendered":"<p>In my last post, I talked about <a href=\"http:\/\/mikeconley.ca\/blog\/2010\/07\/05\/review-board-statistics-extensions-karma-stopwatch-and-fixit\/\">an extension for Review Board<\/a> that would allow users to register \u201cdefects\u201d, \u201cTODOs\u201d or \u201cproblems\u201d with code that&#8217;s up for review.<\/p>\n<p>After chatting with the lead RB devs for a bit, we&#8217;ve decided to scrap the extension.<\/p>\n<p>[audible gasp, booing, hissing]<\/p>\n<p>Instead, we&#8217;re just going to put it in the core of Review Board.<\/p>\n<p>[thundering applause]<\/p>\n<h3>Defects<\/h3>\n<p>Why is this useful?\u00a0 I&#8217;ve got a few reasons for you:<\/p>\n<ol>\n<li>It&#8217;ll be easier for reviewees to keep track of things left to fix, and similarly, it&#8217;ll be harder for reviewees to accidentally skip over fixing a defect that a reviewer has found<\/li>\n<li>My statistics extension will be able to calculate useful things like <strong>defect detection rate<\/strong>, and <strong>defect density<\/strong><\/li>\n<li>Maybe it&#8217;s just me, but checking things off as &#8220;fixed&#8221; or &#8220;completed&#8221; is <em>really<\/em> satisfying<\/li>\n<li>Who knows, down the line, I might code up an extension that lets you <a href=\"http:\/\/mikeconley.ca\/blog\/2010\/03\/09\/turning-peer-code-review-into-a-game\/\">turn finding\/closing defects into a game<\/a><\/li>\n<\/ol>\n<p>However, since we&#8217;re adding this to the core of <a href=\"http:\/\/www.reviewboard.org\">Review Board<\/a>, we have to keep it simple.\u00a0 One of Review Board&#8217;s biggest strengths is in its total lack of clutter.\u00a0 No bells.\u00a0 No whistles.\u00a0 Just the things you need to get the job done.\u00a0 Let the extensions bring the bells and whistles.<\/p>\n<p>So that means creating a bare-bones defect-tracking mechanism and UI, and leaving it open for extension.\u00a0 Because who knows, maybe <a href=\"http:\/\/groups.google.com\/group\/reviewboard\/browse_thread\/thread\/e224b4afce4a8cfc\/d3501fd3018fae93\">there<\/a> <a href=\"http:\/\/groups.google.com\/group\/reviewboard\/browse_thread\/thread\/2b4dc38ad73b82b2\/9d410350f1c769ae\">are<\/a> <a href=\"http:\/\/groups.google.com\/group\/reviewboard\/browse_thread\/thread\/eb6d98fad2c1b3c5\/bbf2592fcc70b53c\">some<\/a> <a href=\"http:\/\/groups.google.com\/group\/reviewboard\/browse_thread\/thread\/8dfbea6d40a9f160\/a4319afa5b1404b1\">people<\/a> out there who want to customize what <em>kind <\/em>of defects they&#8217;re filing.<\/p>\n<p>I&#8217;ve come up with a design that I think is pretty simple and clean.\u00a0 And it doesn&#8217;t rock the boat &#8211; if you&#8217;re not interested in filing defects, your Review Board experience stays the same.<\/p>\n<h4>Filing a Defect<\/h4>\n<p>I propose adding a simple checkbox to the comment dialog to indicate that this comment files a defect, like so:<\/p>\n<div id=\"attachment_1560\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comment_checkbox_shot.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1560\" data-attachment-id=\"1560\" data-permalink=\"https:\/\/mikeconley.ca\/blog\/2010\/07\/10\/filing-defects-in-review-board\/comment_checkbox_shot\/\" data-orig-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comment_checkbox_shot.png\" data-orig-size=\"926,368\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Comment Defect Checkbox Screenshot\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Just a simple little checkbox.&lt;\/p&gt;\n\" data-large-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comment_checkbox_shot.png\" class=\"size-medium wp-image-1560 \" title=\"Comment Defect Checkbox Screenshot\" src=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comment_checkbox_shot-300x119.png\" alt=\"Comment Defect Checkbox Screenshot\" width=\"300\" height=\"119\" srcset=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comment_checkbox_shot-300x119.png 300w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comment_checkbox_shot.png 926w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1560\" class=\"wp-caption-text\">No bells.  No whistles.  Just a simple little checkbox.<\/p><\/div>\n<p>While I&#8217;m in there, I&#8217;ll try to toss in some hooks so that extension developers can add more fields &#8211; for example, the classification or the priority of the defect.\u00a0 By default, however, it&#8217;s just a bare-bones little checkbox.<\/p>\n<p>So far, so good.\u00a0 You&#8217;ve filed a defect.\u00a0 Maybe this is how it&#8217;ll look like in the in-line comment viewer:<\/p>\n<div id=\"attachment_1569\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report_inline.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1569\" data-attachment-id=\"1569\" data-permalink=\"https:\/\/mikeconley.ca\/blog\/2010\/07\/10\/filing-defects-in-review-board\/comments_interface_shot_report_inline\/\" data-orig-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report_inline.png\" data-orig-size=\"827,355\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"comments_interface_shot_report_inline\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;A defect has been reported!&lt;\/p&gt;\n\" data-large-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report_inline.png\" class=\"size-medium wp-image-1569 \" title=\"comments_interface_shot_report_inline\" src=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report_inline-300x128.png\" alt=\"The inline comment viewer is showing that a defect report has been filed.\" width=\"300\" height=\"128\" srcset=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report_inline-300x128.png 300w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report_inline.png 827w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1569\" class=\"wp-caption-text\">A defect has been reported!<\/p><\/div>\n<h4>Two Choices<\/h4>\n<p>A reviewer can file defects reports, and the <strong>reviewee<\/strong> is able to act on them.<\/p>\n<p>Lets say I&#8217;m the reviewee.\u00a0 I&#8217;ve just gotten a review, and I&#8217;ve got my editor \/ IDE with my patch waiting in the background.\u00a0 I see a few defect reports have been filed.\u00a0 For the ones I completely agree with, I fix them in my editor, and then go back to Review Board and mark them as <strong>Fixed<\/strong>.<\/p>\n<div id=\"attachment_1567\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed_inline.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1567\" data-attachment-id=\"1567\" data-permalink=\"https:\/\/mikeconley.ca\/blog\/2010\/07\/10\/filing-defects-in-review-board\/comments_interface_shot_fixed_inline\/\" data-orig-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed_inline.png\" data-orig-size=\"827,355\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"comments_interface_shot_fixed_inline\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;All fixed!&lt;\/p&gt;\n\" data-large-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed_inline.png\" class=\"size-medium wp-image-1567\" title=\"comments_interface_shot_fixed_inline\" src=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed_inline-300x128.png\" alt=\"The defect report has been marked as being fixed.\" width=\"300\" height=\"128\" srcset=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed_inline-300x128.png 300w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed_inline.png 827w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1567\" class=\"wp-caption-text\">All fixed!<\/p><\/div>\n<p>It&#8217;s also possible that I might not agree with one or more of the defect reports.\u00a0 In this case, I&#8217;ll reply to the comment to argue my case.\u00a0 I might also mark the defect report as <strong>Pass<\/strong>, which means, &#8220;I&#8217;ve seen it, but I think I&#8217;ll pass on that&#8221;.<\/p>\n<div id=\"attachment_1568\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed_inline.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1568\" data-attachment-id=\"1568\" data-permalink=\"https:\/\/mikeconley.ca\/blog\/2010\/07\/10\/filing-defects-in-review-board\/comments_interface_shot_passed_inline\/\" data-orig-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed_inline.png\" data-orig-size=\"827,355\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"comments_interface_shot_passed_inline\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;I think I&amp;#8217;ll pass on that, thanks.&lt;\/p&gt;\n\" data-large-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed_inline.png\" class=\"size-medium wp-image-1568\" title=\"comments_interface_shot_passed_inline\" src=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed_inline-300x128.png\" alt=\"The defect report has been marked as &quot;pass&quot;.\" width=\"300\" height=\"128\" srcset=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed_inline-300x128.png 300w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed_inline.png 827w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1568\" class=\"wp-caption-text\">I think I&#39;ll pass on that, thanks.<\/p><\/div>\n<p>These comments and defect reports are also visible in the review request details page:<\/p>\n<div id=\"attachment_1564\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1564\" data-attachment-id=\"1564\" data-permalink=\"https:\/\/mikeconley.ca\/blog\/2010\/07\/10\/filing-defects-in-review-board\/comments_interface_shot_report\/\" data-orig-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report.png\" data-orig-size=\"1250,362\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"comments_interface_shot_report\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;A defect has been filed.&lt;\/p&gt;\n\" data-large-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report-1024x296.png\" class=\"size-medium wp-image-1564\" title=\"comments_interface_shot_report\" src=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report-300x86.png\" alt=\"A defect report has been filed, and we're in the review request detail page.\" width=\"300\" height=\"86\" srcset=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report-300x86.png 300w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report-1024x296.png 1024w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_report.png 1250w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1564\" class=\"wp-caption-text\">A defect has been filed.<\/p><\/div>\n<div id=\"attachment_1565\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1565\" data-attachment-id=\"1565\" data-permalink=\"https:\/\/mikeconley.ca\/blog\/2010\/07\/10\/filing-defects-in-review-board\/comments_interface_shot_fixed\/\" data-orig-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed.png\" data-orig-size=\"1250,362\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"comments_interface_shot_fixed\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;All fixed up.&lt;\/p&gt;\n\" data-large-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed-1024x296.png\" class=\"size-medium wp-image-1565\" title=\"comments_interface_shot_fixed\" src=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed-300x86.png\" alt=\"The defect is marked as fixed, and we're in the review request detail page.\" width=\"300\" height=\"86\" srcset=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed-300x86.png 300w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed-1024x296.png 1024w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_fixed.png 1250w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1565\" class=\"wp-caption-text\">All fixed up.<\/p><\/div>\n<div id=\"attachment_1566\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1566\" data-attachment-id=\"1566\" data-permalink=\"https:\/\/mikeconley.ca\/blog\/2010\/07\/10\/filing-defects-in-review-board\/comments_interface_shot_passed\/\" data-orig-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed.png\" data-orig-size=\"1250,362\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"comments_interface_shot_passed\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;It&amp;#8217;s all good &amp;#8211; just pass this defect report.&lt;\/p&gt;\n\" data-large-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed-1024x296.png\" class=\"size-medium wp-image-1566\" title=\"comments_interface_shot_passed\" src=\"http:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed-300x86.png\" alt=\"We're passing on the defect report, and we're in the review request detail page.\" width=\"300\" height=\"86\" srcset=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed-300x86.png 300w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed-1024x296.png 1024w, https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2010\/07\/comments_interface_shot_passed.png 1250w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1566\" class=\"wp-caption-text\">It&#39;s all good - just pass this defect report.<\/p><\/div>\n<h3>Thoughts?<\/h3>\n<p>What do you think?\u00a0 Am I on the right track?\u00a0 Am I missing a case?\u00a0 Does &#8220;pass&#8221; make sense?\u00a0 Will this be useful?\u00a0 I&#8217;d love to hear your thoughts.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my last post, I talked about an extension for Review Board that would allow users to register \u201cdefects\u201d, \u201cTODOs\u201d or \u201cproblems\u201d with code that&#8217;s up for review. After chatting with the lead RB devs for a bit, we&#8217;ve decided to scrap the extension. [audible gasp, booing, hissing] Instead, we&#8217;re just going to put it [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[657],"tags":[787,788,779,780,784,131,789,791,1219,504,790],"class_list":["post-1558","post","type-post","status-publish","format-standard","hentry","category-extensions-review-board-code-reviews-computer-science-technology","tag-bugs","tag-bugtracking","tag-defect-density","tag-defect-detection-rate","tag-defects","tag-extensions","tag-fixes","tag-mockups","tag-review-board","tag-reviewboard","tag-ui"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/prmTy-p8","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/comments?post=1558"}],"version-history":[{"count":13,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1558\/revisions"}],"predecessor-version":[{"id":1843,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1558\/revisions\/1843"}],"wp:attachment":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/media?parent=1558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/categories?post=1558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/tags?post=1558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}