<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:15:22 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[FOLIO-1716] Uniquely identify backend API validation errors</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-1716</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;It seems we have started using &lt;tt&gt;code&lt;/tt&gt; as part of validation error in order to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;make decisions based upon the presence of a specific validation error in the client&lt;/li&gt;
	&lt;li&gt;facilitate localization of validation error messages in the client&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;See &lt;a href=&quot;https://github.com/folio-org/raml/blob/raml1.0/schemas/error.schema&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/raml/blob/raml1.0/schemas/error.schema&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Is this intended to be the standard approach?&lt;/p&gt;

&lt;p&gt;Does the UI currently use some of the existing examples?&lt;/p&gt;

&lt;p&gt;If it is intended to be the standard approach, I believe there are some decisions we could need to make.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Potential Decisions&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Should all validation error messages be expected to have a unique code? (and if so, should this be part of the definition of done for backend stories?&lt;/li&gt;
	&lt;li&gt;How should these codes be named?&lt;/li&gt;
	&lt;li&gt;Are codes owned by interfaces or implementing modules?&lt;/li&gt;
	&lt;li&gt;How do we avoid naming conflicts between modules?&lt;/li&gt;
	&lt;li&gt;How does a client know what the set of potential unique errors are?&lt;/li&gt;
	&lt;li&gt;If used for localisation, how does a client map parameterised errors to messages?&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="80912">FOLIO-1716</key>
            <summary>Uniquely identify backend API validation errors</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10001" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p2.svg">P2</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Won&apos;t Do</resolution>
                                                        <assignee accountid="-1">Unassigned</assignee>
                                                                <reporter accountid="63e2a2771b13d42998e4e706">Marc Johnson</reporter>
                                    <labels>
                            <label>i18n</label>
                            <label>potential-decision</label>
                    </labels>
                <created>Thu, 17 Jan 2019 12:18:47 +0000</created>
                <updated>Thu, 2 Sep 2021 12:28:03 +0000</updated>
                            <resolved>Thu, 2 Sep 2021 12:28:03 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>8</watches>
                                                                <comments>
                                                            <comment id="194441" author="557058:925f55a1-465f-4875-8818-49cbe9a45838" created="Thu, 17 Jan 2019 12:31:18 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=63e2a2771b13d42998e4e706&quot; class=&quot;user-hover&quot; rel=&quot;63e2a2771b13d42998e4e706&quot; data-account-id=&quot;63e2a2771b13d42998e4e706&quot; accountid=&quot;63e2a2771b13d42998e4e706&quot; rel=&quot;noreferrer&quot;&gt;Marc Johnson&lt;/a&gt; And in addition, should current text messages (for 400, 500 etc. status codes) be converted to codes as well?&lt;/p&gt;</comment>
                                                            <comment id="194445" author="63e2a2771b13d42998e4e706" created="Thu, 17 Jan 2019 12:52:17 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A925f55a1-465f-4875-8818-49cbe9a45838&quot; class=&quot;user-hover&quot; rel=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; data-account-id=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; accountid=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; rel=&quot;noreferrer&quot;&gt;Kostyantyn Khodarev&lt;/a&gt; I think that is a good question, that related to the outstanding question in 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-671&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-671&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Respond with descriptive information in consistent JSON on bad requests and server errors&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            FOLIO-671
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
. &lt;/p&gt;

&lt;p&gt;I think it is worth keeping the decision about validation / process errors (which the reference UI treats differently) separate to other kinds of errors (which at the moment, the reference UI just alerts on verbatim, as they are often not intended to be user actionable).&lt;/p&gt;</comment>
                                                            <comment id="194449" author="615afd1cd9820f0070a09ef0" created="Tue, 2 Apr 2019 14:47:17 +0000"  >&lt;p&gt;A Code4lib posting about JHOVE mentions the merits of providing permanent identifiers for server-side error messages: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are now permanent and unique IDs for all JHOVE error and information messages. This means error catching need no longer be done by string matching.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;#8211; &lt;a href=&quot;https://lists.clir.org/cgi-bin/wa?A2=ind1904&amp;amp;L=CODE4LIB&amp;amp;P=12196&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://lists.clir.org/cgi-bin/wa?A2=ind1904&amp;amp;L=CODE4LIB&amp;amp;P=12196&lt;/a&gt;&lt;/p&gt;</comment>
                                                            <comment id="194456" author="5ced27478b03050f27825a93" created="Wed, 15 Apr 2020 13:16:02 +0000"  >&lt;p&gt;Redirecting comments from 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;CIRC-476&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRC-476&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Blocked patron can successfully place a request&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium&quot; /&gt;
            CIRC-476
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Initial question about the handling of user-facing error messages from the back-end by &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5ced27478b03050f27825a93&quot; class=&quot;user-hover&quot; rel=&quot;5ced27478b03050f27825a93&quot; data-account-id=&quot;5ced27478b03050f27825a93&quot; accountid=&quot;5ced27478b03050f27825a93&quot; rel=&quot;noreferrer&quot;&gt;Peter Murray&lt;/a&gt;: &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRC-476?focusedCommentId=108164&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/browse/CIRC-476?focusedCommentId=108164&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;...see subsequent discussion...&lt;/li&gt;
	&lt;li&gt;How the Thunderjet team addressed this for acquisitions apps from &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5cf6c546b87c300f36eb7b9a&quot; class=&quot;user-hover&quot; rel=&quot;5cf6c546b87c300f36eb7b9a&quot; data-account-id=&quot;5cf6c546b87c300f36eb7b9a&quot; accountid=&quot;5cf6c546b87c300f36eb7b9a&quot; rel=&quot;noreferrer&quot;&gt;Craig McNally&lt;/a&gt;: &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRC-476?focusedCommentId=108193&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/browse/CIRC-476?focusedCommentId=108193&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Proposal by &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=615afd1cd9820f0070a09ef0&quot; class=&quot;user-hover&quot; rel=&quot;615afd1cd9820f0070a09ef0&quot; data-account-id=&quot;615afd1cd9820f0070a09ef0&quot; accountid=&quot;615afd1cd9820f0070a09ef0&quot; rel=&quot;noreferrer&quot;&gt;Zak Burke&lt;/a&gt;: &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRC-476?focusedCommentId=108222&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/browse/CIRC-476?focusedCommentId=108222&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Reminder by &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5bffed52a1b46046f530c8f7&quot; class=&quot;user-hover&quot; rel=&quot;5bffed52a1b46046f530c8f7&quot; data-account-id=&quot;5bffed52a1b46046f530c8f7&quot; accountid=&quot;5bffed52a1b46046f530c8f7&quot; rel=&quot;noreferrer&quot;&gt;Mike Taylor&lt;/a&gt; of an earlier proposal: &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRC-476?focusedCommentId=108239&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/browse/CIRC-476?focusedCommentId=108239&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Please post subsequent comments here rather than 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;CIRC-476&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRC-476&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Blocked patron can successfully place a request&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium&quot; /&gt;
            CIRC-476
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
.  RFC draft will be available soon.&lt;/p&gt;</comment>
                                                            <comment id="194462" author="5bffed52a1b46046f530c8f7" created="Wed, 15 Apr 2020 14:51:49 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=615afd1cd9820f0070a09ef0&quot; class=&quot;user-hover&quot; rel=&quot;615afd1cd9820f0070a09ef0&quot; data-account-id=&quot;615afd1cd9820f0070a09ef0&quot; accountid=&quot;615afd1cd9820f0070a09ef0&quot; rel=&quot;noreferrer&quot;&gt;Zak Burke&lt;/a&gt; and I, briefly discussing on Slack, were both pleased to see how closely our proposals resemble each other, and hope that indicates that they may be closing in on some kind of Platonic Ideal for how to do this stuff.&lt;/p&gt;

&lt;p&gt;BTW., this isn&apos;t only about validation errors, but potentially &lt;em&gt;any&lt;/em&gt; errors. Validation was just an interesting motivating example, because it&apos;s easy to imagine wanting to accompany a validation error with structured data containing details about the various fields that failed.&lt;/p&gt;</comment>
                                                            <comment id="194468" author="63e2a2771b13d42998e4e706" created="Fri, 8 May 2020 12:41:33 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5bffed52a1b46046f530c8f7&quot; class=&quot;user-hover&quot; rel=&quot;5bffed52a1b46046f530c8f7&quot; data-account-id=&quot;5bffed52a1b46046f530c8f7&quot; accountid=&quot;5bffed52a1b46046f530c8f7&quot; rel=&quot;noreferrer&quot;&gt;Mike Taylor&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;BTW., this isn&apos;t only about validation errors, but potentially any errors&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Please could you provide some examples of the other kinds of errors you are thinking about here. Does this refer to business logic decisions, e.g. &lt;tt&gt;this item cannot be checked out to patron A because patron B has already requested it&lt;/tt&gt;, or are we considering any kind of error that the system could encounter e.g. &lt;tt&gt;the database is unreachable&lt;/tt&gt; or &lt;tt&gt;another module is unreachable&lt;/tt&gt;?&lt;/p&gt;</comment>
                                                            <comment id="194473" author="615afd1cd9820f0070a09ef0" created="Fri, 8 May 2020 19:07:35 +0000"  >&lt;p&gt;What are the merits of &lt;em&gt;not&lt;/em&gt; using static values? Personally, I imagine a static code and/or name and some kind of &lt;tt&gt;supplementaryData&lt;/tt&gt; object where we can provide dynamic values to the client. &lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
{
    errorCode: 123,
    errorName: &lt;span class=&quot;code-quote&quot;&gt;&quot;ITEM_ALREADY_REQUESTED&quot;&lt;/span&gt;,
    supplementaryData: {
        requestId: &lt;span class=&quot;code-quote&quot;&gt;&quot;123abc&quot;&lt;/span&gt;,
    }
}

{
    errorCode: 123,
    errorName: &lt;span class=&quot;code-quote&quot;&gt;&quot;ITEM_ALREADY_REQUESTED&quot;&lt;/span&gt;,
    supplementaryData: {
        checkoutPatronId: &lt;span class=&quot;code-quote&quot;&gt;&quot;123abc&quot;&lt;/span&gt;,
        requestPatronId: &lt;span class=&quot;code-quote&quot;&gt;&quot;789efg&quot;&lt;/span&gt;
    }
}

{
    errorCode: 456,
    errorName: &lt;span class=&quot;code-quote&quot;&gt;&quot;DATABASE_UNREACHABLE&quot;&lt;/span&gt;,
    supplementaryData: {
        systemResponse: &lt;span class=&quot;code-quote&quot;&gt;&quot;Something &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; and verbose and scary sounding, 192.168.11.22, OH NOES! An IP address!!!&quot;&lt;/span&gt;
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Alternatively/additionally/maaaaaybe, we provide an &lt;tt&gt;errorMessage&lt;/tt&gt; field that includes a human-readable message in the language matching the &lt;tt&gt;Accept-Language&lt;/tt&gt; header of the request that generated the error. &lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
{
    errorCode: 123,
    errorName: &lt;span class=&quot;code-quote&quot;&gt;&quot;ITEM_ALREADY_REQUESTED&quot;&lt;/span&gt;,
    errorMessage: &lt;span class=&quot;code-quote&quot;&gt;&quot;Das is nicht really Deutsch da Ich don&apos;t actually spraken Deutsch.&quot;&lt;/span&gt;,
    supplementaryData: {
        requestId: &lt;span class=&quot;code-quote&quot;&gt;&quot;123abc&quot;&lt;/span&gt;,
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This would simplify things on the UI side because we could forward such values directly to the UI, and that&apos;s nicer for folks calling the API directly, and maybe there some logging benefits since errors are now localized. But it also means we split translation over the front-end and back-end AND we have to introduce i18n capabilities to &lt;em&gt;all&lt;/em&gt; backend modules. I&apos;m not a backend dev, but that feels like a huge project. &lt;/p&gt;</comment>
                                                            <comment id="194479" author="5bffed52a1b46046f530c8f7" created="Sun, 10 May 2020 11:07:28 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=63e2a2771b13d42998e4e706&quot; class=&quot;user-hover&quot; rel=&quot;63e2a2771b13d42998e4e706&quot; data-account-id=&quot;63e2a2771b13d42998e4e706&quot; accountid=&quot;63e2a2771b13d42998e4e706&quot; rel=&quot;noreferrer&quot;&gt;Marc Johnson&lt;/a&gt; The value here arises in any kind of error condition that the client could react to intelligently if it had details. Validation is an obvious one, because it could highlight the relevant fields that had validation errors. But it could be anything.&lt;/p&gt;</comment>
                                                            <comment id="194482" author="5bffed52a1b46046f530c8f7" created="Sun, 10 May 2020 11:08:31 +0000"  >&lt;p&gt;Oh, and &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=615afd1cd9820f0070a09ef0&quot; class=&quot;user-hover&quot; rel=&quot;615afd1cd9820f0070a09ef0&quot; data-account-id=&quot;615afd1cd9820f0070a09ef0&quot; accountid=&quot;615afd1cd9820f0070a09ef0&quot; rel=&quot;noreferrer&quot;&gt;Zak Burke&lt;/a&gt; I agree we don&apos;t want to impose the burden of i18n on back-end modules.&lt;/p&gt;</comment>
                                                            <comment id="194485" author="63e2a2771b13d42998e4e706" created="Mon, 11 May 2020 10:59:52 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=615afd1cd9820f0070a09ef0&quot; class=&quot;user-hover&quot; rel=&quot;615afd1cd9820f0070a09ef0&quot; data-account-id=&quot;615afd1cd9820f0070a09ef0&quot; accountid=&quot;615afd1cd9820f0070a09ef0&quot; rel=&quot;noreferrer&quot;&gt;Zak Burke&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;What are the merits of not using static values?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;By static value, do you mean a fixed value that is known in advance to both the server and clients that uniquely identifies a particular kind of error?&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;it also means we split translation over the front-end and back-end AND we have to introduce i18n capabilities to all backend modules. I&apos;m not a backend dev, but that feels like a huge project.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Yes, this would be a significant architectural change and require significant investment. The first step being to determine what the equivalent workflow would be for how translations are changed in the UI modules.&lt;/p&gt;</comment>
                                                            <comment id="194488" author="63e2a2771b13d42998e4e706" created="Mon, 11 May 2020 11:01:46 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5bffed52a1b46046f530c8f7&quot; class=&quot;user-hover&quot; rel=&quot;5bffed52a1b46046f530c8f7&quot; data-account-id=&quot;5bffed52a1b46046f530c8f7&quot; accountid=&quot;5bffed52a1b46046f530c8f7&quot; rel=&quot;noreferrer&quot;&gt;Mike Taylor&lt;/a&gt; Thanks&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The value here arises in any kind of error condition that the client could react to intelligently if it had details. Validation is an obvious one, because it could highlight the relevant fields that had validation errors. But it could be anything.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Can you think of other examples? &lt;/p&gt;

&lt;p&gt;I think there likely needs to be some kind of bound on this. For example, would we want this to include technical errors like &lt;tt&gt;could not connect to a database&lt;/tt&gt;, &lt;tt&gt;could not publish message&lt;/tt&gt;, &lt;tt&gt;request timed out&lt;/tt&gt; etc?&lt;/p&gt;</comment>
                                                            <comment id="194492" author="5bffed52a1b46046f530c8f7" created="Mon, 11 May 2020 11:15:54 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=63e2a2771b13d42998e4e706&quot; class=&quot;user-hover&quot; rel=&quot;63e2a2771b13d42998e4e706&quot; data-account-id=&quot;63e2a2771b13d42998e4e706&quot; accountid=&quot;63e2a2771b13d42998e4e706&quot; rel=&quot;noreferrer&quot;&gt;Marc Johnson&lt;/a&gt; The issue here is not what &lt;em&gt;specific&lt;/em&gt; scenarios it might be useful, but what &lt;em&gt;category&lt;/em&gt;. It&apos;s about situations in which the client can actually take action based on the machine-readable code, rather than merely displaying it to the user.&lt;/p&gt;

&lt;p&gt;There is no value in the numeric code 54 if all we&apos;re doing is telling the user &quot;Error 54, I have no idea what that means&quot;. Or even &quot;Error 54: could not connect to database&quot;, which is no more informative than &quot;Could not connect to database&quot;. But if the client can take some action (or prompt the user to take some action) which would avoid the error, then there is merit in reporting it.&lt;/p&gt;</comment>
                                                            <comment id="194502" author="615afd1cd9820f0070a09ef0" created="Mon, 11 May 2020 11:29:29 +0000"  >&lt;blockquote&gt;&lt;p&gt;By static value, do you mean a fixed value that is known in advance to both the server and clients that uniquely identifies a particular kind of error?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Yes. &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Can you think of other examples? I think there likely needs to be some kind of bound on this. For example, would we want this to include technical errors like &lt;tt&gt;could not connect to a database&lt;/tt&gt;, &lt;tt&gt;could not publish message&lt;/tt&gt;, &lt;tt&gt;request timed out&lt;/tt&gt; etc?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Why should it be bounded? In the UI, any text that will be presented to the user that is known at compile time is extracted from the code and replaced with placeholder. These placeholders are then replaced at run-time with values pulled from the appropriate locale file. I see no reason for the backend to do anything different with the values it hard-codes. &lt;/p&gt;

&lt;p&gt;As above, perhaps the backend does not need to translate those strings, but I see no reason why they should not be extracted and made available to the UI so it can be responsible for cataloging those values and making them available for translation. &lt;/p&gt;</comment>
                                                            <comment id="194508" author="5bffed52a1b46046f530c8f7" created="Mon, 11 May 2020 11:34:59 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=615afd1cd9820f0070a09ef0&quot; class=&quot;user-hover&quot; rel=&quot;615afd1cd9820f0070a09ef0&quot; data-account-id=&quot;615afd1cd9820f0070a09ef0&quot; accountid=&quot;615afd1cd9820f0070a09ef0&quot; rel=&quot;noreferrer&quot;&gt;Zak Burke&lt;/a&gt; is right, of course &#8212; which means that I was wrong when I said there is no point sending a code 54 for &quot;could not connect to database&quot;. If we want to be able to tell the user that at all, then a code is exactly what we do need.&lt;/p&gt;</comment>
                                                            <comment id="194514" author="63e2a2771b13d42998e4e706" created="Mon, 11 May 2020 12:09:33 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5bffed52a1b46046f530c8f7&quot; class=&quot;user-hover&quot; rel=&quot;5bffed52a1b46046f530c8f7&quot; data-account-id=&quot;5bffed52a1b46046f530c8f7&quot; accountid=&quot;5bffed52a1b46046f530c8f7&quot; rel=&quot;noreferrer&quot;&gt;Mike Taylor&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The issue here is not what specific scenarios it might be useful, but what category. It&apos;s about situations in which the client can actually take action based on the machine-readable code, rather than merely displaying it to the user.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Hmm, I thought most of this conversation was focused on localisation of error messages presented to the user. Is localisation an action by the client?&lt;/p&gt;</comment>
                                                            <comment id="194517" author="63e2a2771b13d42998e4e706" created="Mon, 11 May 2020 12:13:56 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=615afd1cd9820f0070a09ef0&quot; class=&quot;user-hover&quot; rel=&quot;615afd1cd9820f0070a09ef0&quot; data-account-id=&quot;615afd1cd9820f0070a09ef0&quot; accountid=&quot;615afd1cd9820f0070a09ef0&quot; rel=&quot;noreferrer&quot;&gt;Zak Burke&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Why should it be bounded? In the UI, any text that will be presented to the user that is known at compile time is extracted from the code and replaced with placeholder. These placeholders are then replaced at run-time with values pulled from the appropriate locale file. I see no reason for the backend to do anything different with the values it hard-codes.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I&apos;m suggesting it needs to be be bounded because this proposal relies on each kind of error being predicted in advance. They need to be predicted in order to be given a code that is understood by all servers and all clients. &lt;/p&gt;

&lt;p&gt;There is an overhead to that prediction process and it is likely to be fallible, which means there will need to be agreement on what happens when the actual error cannot be identified as fitting into one of these kinds / categories.&lt;/p&gt;

&lt;p&gt;Does that make sense?&lt;/p&gt;</comment>
                                                            <comment id="194522" author="5bffed52a1b46046f530c8f7" created="Mon, 11 May 2020 13:59:16 +0000"  >&lt;p&gt;No, no. We would surely add new error codes to the global list as and when they are needed. Client code would have a fallback path (as indeed it would need any) for unrecognised codes, presumably just displaying them to the user. The idea that we can, in advance, enumerate all possible error conditions seems more than a little fanciful.&lt;/p&gt;</comment>
                                                            <comment id="194524" author="63e2a2771b13d42998e4e706" created="Mon, 11 May 2020 16:18:10 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5bffed52a1b46046f530c8f7&quot; class=&quot;user-hover&quot; rel=&quot;5bffed52a1b46046f530c8f7&quot; data-account-id=&quot;5bffed52a1b46046f530c8f7&quot; accountid=&quot;5bffed52a1b46046f530c8f7&quot; rel=&quot;noreferrer&quot;&gt;Mike Taylor&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The idea that we can, in advance, enumerate all possible error conditions seems more than a little fanciful.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Agreed.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;No, no. We would surely add new error codes to the global list as and when they are needed.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Agreed. This is what I meant by bounded. That the set of known kinds of errors (and hence codes) is limited in some way.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Client code would have a fallback path (as indeed it would need any) for unrecognised codes, presumably just displaying them to the user.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Agreed, there needs to be a fallback. I think there are a few variations on this:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;There is no code defined for this kind of error (it is effectively unknown to the system)&lt;/li&gt;
	&lt;li&gt;There is a code defined for this kind of error however the server does not know it, so cannot provide it with the error&lt;/li&gt;
	&lt;li&gt;There is a code defined for this kind of error however the client does not know it, so cannot interpret the error&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="194527" author="5bffed52a1b46046f530c8f7" created="Mon, 11 May 2020 17:00:08 +0000"  >&lt;p&gt;What would it mean for a code to be unknown to both the client &lt;em&gt;and&lt;/em&gt; the server? What else &lt;em&gt;is&lt;/em&gt; there to know it?&lt;/p&gt;

&lt;p&gt;I think the only scenarios that matter are:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Server provides code that the client recognises&lt;/li&gt;
	&lt;li&gt;Server provides code that the client does not recognise&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="194528" author="63e2a2771b13d42998e4e706" created="Tue, 12 May 2020 12:32:00 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5bffed52a1b46046f530c8f7&quot; class=&quot;user-hover&quot; rel=&quot;5bffed52a1b46046f530c8f7&quot; data-account-id=&quot;5bffed52a1b46046f530c8f7&quot; accountid=&quot;5bffed52a1b46046f530c8f7&quot; rel=&quot;noreferrer&quot;&gt;Mike Taylor&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;What would it mean for a code to be unknown to both the client and the server? &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I don&apos;t think I described a scenario where it is unknown to both, maybe it is implicit in the error being unknown to FOLIO.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;What else is there to know it?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I interpreted your previous statement (below), as suggesting there was a global list of codes defined for FOLIO. That is the other places that knows the codes.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;We would surely add new error codes to the global list as and when they are needed&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;My variations were likely ambiguous. Let me ask them a different way.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;What should a server do when it encounters an error it does not recognise or know the code for (there may be no code defined)?&lt;/li&gt;
	&lt;li&gt;What should a client do when it encounters an error with a code it does not recognise?&lt;/li&gt;
	&lt;li&gt;If the server can respond with no code for situations it does not recognise or does not know the code, what should a client do when it encounters an error with no code?&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="194531" author="63e2a2771b13d42998e4e706" created="Thu, 2 Sep 2021 12:28:03 +0000"  >&lt;p&gt;Has been superseded by later conversations&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10006">
                    <name>Gantt End to Start</name>
                                            <outwardlinks description="has to be done before">
                                        <issuelink>
            <issuekey id="42026">UIU-977</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="47196">CIRC-1146</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="25861">UIREQ-211</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="26140">UIREQ-603</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="80227">FOLIO-671</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="48135">CIRC-476</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81197">FOLIO-1965</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                        <customfield id="customfield_10107" key="com.atlassian.jira.plugin.system.customfieldtypes:multiselect">
                        <customfieldname>Affected Institution</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10396"><![CDATA[GBV]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10144"><![CDATA[Core: Platform]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzzc07:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 17 Jan 2019 12:31:18 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>