Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 9 additions & 39 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,43 +8,12 @@ All notable changes to this project are documented here. Format follows

### Added

- Evidence-bound occupational construct semantics now keep cognitive
abilities, work styles, work activities, affective reactions, performance
behaviors, and FJA worker functions distinct. Record-to-construct links
require a reified evidence span and PROV-O derivation/time; unsupported
DPT-to-psychology crosswalks and local scores remain unavailable (ADR 0248).
- Versioned occupational construct vocabularies and semantic-unit assertions
now persist in normalized tables. Database and application validation require
same-Post verbatim evidence, and authorized Post detail exposes provenance
without internal identifiers or numerical scores (ADR 0249).
- An operator-only O*NET 31.0 catalog synchronizer now imports every official
cognitive-ability, work-style, and work-activity Content Model element with
stable IRIs, descriptions, attribution, and a deterministic source digest;
conflicting release metadata fails closed (ADR 0250).
- Post-content ingestion now traverses bounded official O*NET hierarchy nodes
through contextual-orchestrator's multi-agent conduct workflow and persists
only exact catalog IRIs with verbatim semantic-unit evidence. A digest-bound
run ledger preserves successful empty extraction without inventing a signal
(ADR 0253).
- Authorized Post detail now shows O*NET work evidence with its verbatim source
span, explicit inference status, and official definition action. Complete
empty, processing, and unavailable states stay distinct and localized rather
than collapsing into a blank panel. Historical cutoff reads omit live
assertions and direct the reviewer to the cutoff-known body (ADR 0254).
- Assertion-backed occupational constructs now appear in the authorized
ontology neighborhood with persisted truth status, cutoff-safe availability,
exact Post evidence, and fail-closed conflicting truth. The projection
duplicates no `knowledge_graph_edge` row and creates no person trait or score
(ADR 0255).

- The DOT/FJA Data/People/Things worker-function taxonomy is now published
in the canonical ontology: all 24 worker functions carry the official
Dictionary of Occupational Titles Appendix B definitions verbatim, their
definitional ordinal ranks (ADR 0232). No DOT-to-O*NET or Fleishman
crosswalk is inferred without an authoritative mapping source. A
deterministic application read
model (`lineageweave.worker_function_taxonomy`) exposes fail-closed
lookups; ranks are scale positions and are never used as weights.
Comment on lines -11 to -47

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changelog drops entries for features still in the tree

This edit deletes the changelog entries for the occupational-construct (ADRs 0248-0255) and DOT/FJA worker-function work, yet worker_function_taxonomy and migrations 0238-0241 remain in the tree. The changelog no longer documents these present, unreleased features.

Prompt for agents
The CHANGELOG 'Added' section in this PR removes the entries describing the occupational-construct features (ADRs 0248, 0249, 0250, 0253, 0254, 0255) and the DOT/FJA worker-function taxonomy (ADR 0232). These entries existed in the merge-base and the underlying features are still present in the head branch (migrations/0238_*.sql through 0241_*.sql, lineageweave/worker_function_taxonomy.py, and docs/adr/0232-worker-function-taxonomy-in-the-published-ontology.md). This appears to be an accidental loss during a rebase where the branch's older Unreleased/Added block overwrote the newer entries. Restore the removed changelog entries alongside the new Voice-of-X entry so the changelog stays synchronized with the features actually present in the tree.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.


- Expanded Voice-of-X post taxonomy (ADR 0246): the governed `voc_type`
scheme adds Voice of Supplier, Employee, Business, Regulator, Investor,
Society, and Process as source-post categories. Ontology SKOS concepts and
idempotent migration 0235 stay in round-trip sync; counterparty relationships
remain a separate evidence contract.
Comment thread
seonghobae marked this conversation as resolved.
Resolved
- Persist explicit paragraph, list, table, MathML formula, and caller-parsed
conversation-turn semantic-unit kinds without inferring absent boundaries.
- Event Lineage now persists each reconstructed connection's independent
Expand All @@ -66,8 +35,9 @@ All notable changes to this project are documented here. Format follows
- Node-attribute datatype properties grounded only in real schema columns
(`postTitle`, `postBody`, `eventOccurredAt`, `personName`,
`lastKnownJobTitle`, `entityName`, `entityCode`, shared domain-free
`createdAt`/`updatedAt`), a SKOS post-type scheme formalizing the governed
five-value `voc_type` vocabulary under the round-trip check, and logical
`createdAt`/`updatedAt`), a SKOS post-type scheme formalizing the initial
five-value `voc_type` vocabulary plus ADR 0246's seven additions under the
round-trip check, and logical
constraints: `OurSidePerson owl:disjointWith CounterpartyPerson` plus the
`hasAffiliate` inverse of `affiliatedWith` (ADR 0207).

Expand Down
102 changes: 102 additions & 0 deletions docs/adr/0246-expanded-voice-of-x-post-taxonomy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# ADR 0246: Expanded Voice-of-X post taxonomy

## Status

Accepted (2026-08-26). Extends ADR 0207 decision 8 without claiming that the
result is an exhaustive stakeholder taxonomy.

## Context

`source_post.voc_type_code` records what kind of voice a source post carries.
The existing five-code scheme (`voc`, `vocc`, `voco`, `vom`, `vop`) cannot
represent supplier, employee, internal-business, regulator, investor,
society, or process-generated source records without changing the source
classification or rejecting the import.

`post_counterparty_entity.relationship_type_code` answers a different
question: how a named organization relates to the post author's organization.
A post voice is not evidence that every organization named in the post has the
same relationship. This ADR therefore does not mirror post-type codes into the
counterparty relationship vocabulary. Any future relationship term requires
its own direction, evidence contract, and source-grounded definition.

## Decision

Add seven product-controlled concepts to the existing `voc_type` scheme:

| Code | Label | Source category represented |
| --- | --- | --- |
| `vos` | Voice of Supplier | supplier-authored or supplier-originated record |
| `voe` | Voice of Employee | employee-authored or employee-originated record |
| `vob` | Voice of Business | internal-management or business-unit record |
| `vor` | Voice of Regulator | regulator-authored or regulator-originated record |
| `voi` | Voice of Investor | investor-authored or investor-originated record |
| `voso` | Voice of Society | community or public-stakeholder record |
| `vops` | Voice of Process | process- or system-generated record |

These are governed LineageWeave codes, not a claim that Freeman (1984),
Mitchell et al. (1997), ISO 16355-4, or quality-engineering literature defines
this exact twelve-code list. The cited works support distinguishing stakeholder
voices and process evidence; they do not establish an exact term-level
crosswalk. `vocc`, `vom`, and the product's code abbreviations remain existing
local vocabulary.

The scheme stays open to a later evidence-backed extension. Import preserves
the supplied code and provenance; no classifier, keyword rule, default, or
weight assigns one of these values. Missing or unsupported source codes remain
unavailable rather than being forced into a nearby category.

Codes remain globally unique lowercase literals in
`common_lookup_value.lookup_code`.

## Consequences

- `migrations/0235_voice_of_x_post_taxonomy.sql` adds the seven `voc_type`
values idempotently and does not alter existing rows.
- `docs/ontology/lineageweave-kg.ttl` publishes one SKOS concept for each new
code under `:postTypeScheme`.
- The ontology round-trip test proves that the migration and published
vocabulary agree.
- The API's existing lookup-label path supplies filter values and labels; no
customer-facing explanation exposes database, migration, or classifier
boundaries.
- The counterparty relationship classifier remains on its independently
governed six-code vocabulary.

## References

AccountAbility. (2015). *AA1000 stakeholder engagement standard*.
https://www.accountability.org/standards/aa1000-stakeholder-engagement

AccountAbility. (2025). *AccountAbility launches public consultation for the
AA1000 Stakeholder Engagement Standard (AA1000SES v3)*.
https://www.accountability.org/insights/accountability-launches-public-consultation-for-the-aa1000-stakeholder-engagement-standard-aa1000ses-v3

Freeman, R. E. (1984). *Strategic management: A stakeholder approach*.
Pitman.

Heskett, J. L., Jones, T. O., Loveman, G. W., Sasser, W. E., &
Schlesinger, L. A. (1994). Putting the service-profit chain to work.
*Harvard Business Review, 72*(2), 164-174.

International Organization for Standardization. (2017). *Applications of
statistical and related methods to new technology and product development
process—Part 4: Analysis of non-quantitative and quantitative Voice of
Customer and Voice of Stakeholder* (ISO Standard No. 16355-4:2017).
https://www.iso.org/standard/62607.html

International Organization for Standardization. (2023, December 19).
*Global Directory stakeholder categories*.
https://helpdesk-docs.iso.org/article/331-gd-stakeholders-categories

International Organization for Standardization. (2010). *Guidance on social
responsibility* (ISO Standard No. 26000:2010).
https://www.iso.org/standard/42546.html

Mitchell, R. K., Agle, B. R., & Wood, D. J. (1997). Toward a theory of
stakeholder identification and salience: Defining the principle of who and
what really counts. *Academy of Management Review, 22*(4), 853-886.
https://doi.org/10.5465/amr.1997.9711022105

Shewhart, W. A. (1931). *Economic control of quality of manufactured
product*. D. Van Nostrand.
60 changes: 52 additions & 8 deletions docs/ontology/lineageweave-kg.ttl
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@

:Post a owl:Class ;
rdfs:label "Post" ;
rdfs:comment "A source_post row: one record typed by the voc_type scheme (:postTypeScheme) -- Voice of Customer, Customer's Customer, Competitor, Market, or Partner." ;
rdfs:comment "A source_post row: one record typed by the voc_type scheme (:postTypeScheme) -- Voice of Customer, Customer's Customer, Competitor, Market, Partner, Supplier, Employee, Business, Regulator, Investor, Society, or Process (ADR 0246)." ;
:lookupCode "node_post" .

:Person a owl:Class ;
Expand Down Expand Up @@ -275,17 +275,18 @@
#################################################################
# SKOS -- voc_type (post type classification)
#
# The five-value VOC source vocabulary migrations/0042 governs. There
# are exactly five seeded codes: vos exists only as a relationship type
# (rel_vos above), never as a post type, so no Voice-of-Supplier concept
# belongs here. Adding "voc_type" to the ontology-covered categories
# puts these codes under tests/test_ontology.py's round-trip check --
# closing the previously documented expected gap.
# The expanded post-voice vocabulary ADR 0246 governs:
# migrations/0042 seeds the original five codes and migrations/0235
# seeds the seven additions. These are product-controlled source categories,
# not an assertion that the cited literature defines an exhaustive twelve-code
# taxonomy. Adding "voc_type" to
# the ontology-covered categories puts all twelve codes under
# tests/test_ontology.py's round-trip check.
#################################################################

:postTypeScheme a skos:ConceptScheme ;
rdfs:label "Post type scheme" ;
rdfs:comment "Voice-based classification of what a source post records, per the governed five-value voc_type lookup category (migrations/0042)." .
rdfs:comment "Voice-based classification of what a source post records, per the governed twelve-code voc_type lookup category (migrations/0042 + 0235)." .

:voiceOfCustomerType a skos:Concept ;
skos:inScheme :postTypeScheme ;
Expand Down Expand Up @@ -317,6 +318,49 @@
rdfs:comment "A partner organization's voice." ;
:lookupCode "vop" .

# ADR 0246 additions -- expanded source-post voice categories.
:voiceOfSupplierType a skos:Concept ;
skos:inScheme :postTypeScheme ;
skos:prefLabel "Voice of Supplier"@en ;
rdfs:comment "A supplier organization's own voice about supplying the author's organization." ;
:lookupCode "vos" .

:voiceOfEmployeeType a skos:Concept ;
skos:inScheme :postTypeScheme ;
skos:prefLabel "Voice of Employee"@en ;
rdfs:comment "An employee-authored or employee-originated source record." ;
:lookupCode "voe" .

:voiceOfBusinessType a skos:Concept ;
skos:inScheme :postTypeScheme ;
skos:prefLabel "Voice of Business"@en ;
rdfs:comment "An internal-management or business-unit source record." ;
:lookupCode "vob" .

:voiceOfRegulatorType a skos:Concept ;
skos:inScheme :postTypeScheme ;
skos:prefLabel "Voice of Regulator"@en ;
rdfs:comment "A regulator-authored or regulator-originated source record." ;
:lookupCode "vor" .

:voiceOfInvestorType a skos:Concept ;
skos:inScheme :postTypeScheme ;
skos:prefLabel "Voice of Investor"@en ;
rdfs:comment "An investor-authored or investor-originated source record." ;
:lookupCode "voi" .

:voiceOfSocietyType a skos:Concept ;
skos:inScheme :postTypeScheme ;
skos:prefLabel "Voice of Society"@en ;
rdfs:comment "A community or public-stakeholder source record." ;
:lookupCode "voso" .

:voiceOfProcessType a skos:Concept ;
skos:inScheme :postTypeScheme ;
skos:prefLabel "Voice of Process"@en ;
rdfs:comment "A process- or system-generated source record." ;
:lookupCode "vops" .

#################################################################
# SKOS -- corporate_entity_level (Group -> Company -> Plant)
#################################################################
Expand Down
2 changes: 1 addition & 1 deletion docs/product-requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ A release claim requires one exact protected-main head that proves:
- Product/data boundary: ADR 0001, ADR 0089.
- Asynchronous delivery and database-pool isolation: ADR 0204, ADR 0213.
- Knowledge Graph, ontology, and provenance: ADR 0004, ADR 0011, ADR 0065,
ADR 0184, ADR 0207, ADR 0222.
ADR 0184, ADR 0207, ADR 0222, ADR 0246.
- Semantic units and retrieval: ADR 0047, ADR 0062, ADR 0102, ADR 0217.
- LLM/model boundary: ADR 0070, ADR 0072, ADR 0076, ADR 0079.
- Measurement: ADR 0003, ADR 0145, ADR 0200, ADR 0205.
Expand Down
58 changes: 58 additions & 0 deletions docs/product-technical-gap-baseline.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,63 @@
# Product & Technical Gap Baseline

> Voice-of-X delivery snapshot: 2026-08-27 KST. Protected `main` was
> `ff7431bd1851c03e737808d22c6a2d43968582f9`; PR #713 was
> `fea73e19c8b9662b4e6c3c842f1edaa6a3ef6d63`. This candidate and the
> historical evidence below are not protected-main release evidence.

## Voice-of-X product and technical gap

ADR 0246 and PR #713 add Supplier, Employee, Business, Regulator, Investor,
Society, and Process to the original Customer, Customer's Customer,
Competitor, Market, and Partner source-post vocabulary. The migration,
published SKOS concepts, product requirements, changelog, and ontology
round-trip tests agree on the twelve codes. The design is organization-type
neutral: public bodies, nonprofits, communities, and automated processes do
not need to be forced into a B2B2C customer chain.

The phrase "all Voice-of-X combinations" does not have a standards-backed
finite enumeration. ISO's own stakeholder-category guidance says that the
relevant category set varies by committee and subject; ISO 26000 requires
stakeholder identification and engagement across organizational contexts;
AA1000SES requires an inclusive, continuing identification process; and
Mitchell, Agle, and Wood (1997) model stakeholder salience from combinations
of power, legitimacy, and urgency rather than a fixed industry-role list.
Accordingly, ADR 0246 keeps the controlled vocabulary extensible and refuses
keyword inference, defaults, invented weights, or an asserted exhaustive
cross-product.

The remaining user-visible gap is evidence-bearing composition. A post still
has one source-provided `voc_type_code`; the product cannot yet represent a
single record that intentionally carries multiple independently evidenced
voices, nor expose the combination in filters, exports, or the ontology
neighborhood. Do not solve this by adding every Cartesian-product code. The
acceptance boundary for a later ADR is a normalized, provenance-bearing
multi-voice association that:

1. preserves the imported primary voice without reclassification;
2. records each additional voice with its own source/evidence and truth state;
3. keeps post voice distinct from named-counterparty relationship, actor role,
topic, channel, lifecycle, and stakeholder-salience attributes;
4. returns only authorized associations through API, JSON-LD, CSV, filters,
and UI; and
5. proves zero-, one-, and multi-voice states with synthetic fixtures,
migration replay, ontology/SHACL, API, accessibility, and Storybook edge
tests before any release claim.

At this snapshot the repository had 23 open PRs and 10 open issues. PR #713
was `MERGEABLE` but policy-blocked: exact-head backend, frontend, CodeQL,
ontology-publication, Semgrep, OSV, Trivy, Scorecard, Noema, Devin, and
CodeRabbit checks were successful; `coverage-source-tree` was queued; Strix
failed closed with `STRIX_PROVIDER_UNAVAILABLE`; and an independent approval
was still required. Auto-merge remains enabled. No self-approval, admin bypass,
or stale-head check transfer is permitted.

References for this gap use the APA 7 entries in ADR 0246. Current supporting
standards pages were rechecked on 2026-08-27: ISO 26000:2010 remains applicable
to all organization types and AA1000SES v3 is under development for a planned
2027 release, so the repository continues to cite the published AA1000SES
(2015) contract rather than treating the draft as adopted policy.

> Dashboard delivery snapshot: 2026-08-26 07:15 KST. Protected `main` was
> `494b54e2245040bcf02b45376f221c37cd437e76`. This local branch is not
> protected-main release evidence.
Expand Down
23 changes: 23 additions & 0 deletions frontend/src/i18n.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,21 @@ describe("i18n", () => {
});

describe("locale-aware source labels", () => {
const allVoiceLabels = [
"Voice of Customer",
"Voice of Customer's Customer",
"Voice of Competitor",
"Voice of Market",
"Voice of Partner",
"Voice of Supplier",
"Voice of Employee",
"Voice of Business",
"Voice of Regulator",
"Voice of Investor",
"Voice of Society",
"Voice of Process",
] as const;

it.each([
["en", "Voice of Customer", "Public"],
["ko", "고객의 소리", "공개"],
Expand All @@ -316,4 +331,12 @@ describe("locale-aware source labels", () => {
expect(t("Voice of Customer")).toBe(customerVoice);
expect(t("Public")).toBe(visibility);
});

it.each(["ko", "zh", "ja", "vi"] as const)(
"translates every governed atomic Voice label in %s",
(locale) => {
setLocale(locale);
for (const label of allVoiceLabels) expect(t(label)).not.toBe(label);
},
);
});
Loading
Loading