Skip to content

Releases: concordance-wiki/concordance

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 18:13

v0.4.0

Minor changes

  • a851604: concordance build --timings prints, after the summary, how long each phase of the build and each step of the pipeline took; the figures never reach the log or the model.
  • 587ea09: concordance mcp serves the questions of query to an agent over the standard input as tools of the model context protocol, one tool per family (lookup, search, relations, list, corpus, passages), without state, key or network; distribution/mcp/mcp.json is the configuration a harness reads to start it.
  • 78f7248: concordance query <expression> prints what the model knows about an expression, without the site: the note it names, resolved as the recognition reads it (identifier, title or alias, normalised form, prefix; a term wins among candidates), where it is used with file, line and context, what it is linked to with relation, confidence and methods, and the decisions and sessions among those links; --format json follows the new query.schema.json.
  • fddad56: concordance query answers the questions of the whole corpus: --stats, --sources, --domains, --undefined [<expression>] with --min-files, --recent with --since and --source, <expression> --changed-with, and --findings about an entity or under --check.
  • 30da51f: concordance query reads one section alone (--occurrences, --links, --related), walks the way to another entity (--path <target>, --max-depth), lists the entities of the model (--list with --type, --domain, --application, --source, --status, --all), and finds its model through concordance.yaml of the working directory or --config, then through the published model of concordance-lint.yaml, when --model names none; options that do not go together are refused by name.
  • 7d4b9a5: concordance query --text <phrase> finds where a phrase is written or spoken: the positions of the converted documents and the transcripts, with page, slide or timecode and speaker, and the sections of the notes, from the fragments next to the model.
  • 2caceac: concordance query narrows the links of an entity with --direction in|out and --relation <slug>, lists what lies within --radius links with --near, and explains why two entities are linked with --explain <target>, every provenance of every link between them shown with its place and context.
  • 6c7d540: concordance query --search <words> runs the search of the site from the command line, with the same ranking and facets as the results page, from the index the site wrote, else from the model and its fragments, else from the model alone; --keywords-only and --no-keywords filter the keyword pages. The search index takes the English labels when nobody gives it any.
  • 2b05e76: The preset carries the two contract plugins, @concordance-wiki/plugin-contract-openapi and @concordance-wiki/plugin-contract-wsdl, as the guides promised: a wiki that declares them needs nothing installed next to the preset.
  • e5ca327: The caches survive an interrupted build: the node file system writes next to the destination and renames, so a file is whole or absent; a text representation or a cached contract that is not JSON reads as absent and is extracted again (the build reports a text representation it cannot read, instead of stopping on the raw error); a contract reader declares the cacheVersion of the shape it extracts, and a contract cached under another version is read again; the work folder of a conversion is removed whatever happened in it.
  • 524f45d: The alphabetical index, the category lists and the dated spaces are ordered by a collation computed from the options of the language pack (collation in the core package: accents and case set aside, digits compared by value), never from the collation data of the runtime: two builds on two versions of Node.js order the same titles the same way. A language pack exposes the collation options it compares with in place of an Intl.Collator.
  • b6a5530: A contract path that leaves its source (absolute, or climbing above the root) is refused with a W-CONTRACT-UNREACHABLE whose message names no path of the machine, and is never copied under the output; a contract URL pointing at the build machine, its link-local neighbours or a private network is never fetched. contractPathIn and refusedContractUrl are exported by the core package.
  • da662fd: The credentials a URL carries never reach a published file: model.json records the git URL of a source without them, and the finding of an unreachable source strips them from what git echoed (withoutCredentials in the core package).
  • 8b2155e: A contract fetched by URL and the published model of the global lint scope are read within thirty seconds and fifty megabytes (fetchWithin, readBounded and fetchFailure in the core package): a server that never answers or a response that never ends is reported instead of holding the build, the hook or the pipeline for ever, the linter falling back on its cached copy.
  • 7359a7b: The validation refuses a source named after a folder the site reserves (about, assets, fragments, index, keywords, search, spaces, todo; RESERVED_SOURCE_NAMES in the core package), and the assembly of the site fails on two documents at one path instead of writing one over the other; LibreOffice is an optional dependency of its plugin, so that a PDF source is still read without it and an office document gets a finding naming the missing command instead of a silent loss.
  • ccbf0fc: Every published schema is read and compiled once per process (compiledSchema in the core package) and its validator shared: reading the thirty-five type modules of the default profile takes a seventh of the time, validating a configuration a fifth, and every command starts faster; readSchema returns the same schema object on every call.
  • 23d6f77: A document over conversion.max_size_mb is no longer read and hashed before the converter refuses it: the build checks its size first (size joins the file system interface) and reports the same W-CONV-FAILED without reading a byte.
  • ee74348: A WSDL or a package part that declares a DOCTYPE is refused before any entity is expanded, where an entity bomb used to stop the build on an exception; of an office package only the property and slide parts are inflated, none above 8 MB, so that media and an entry that inflates to gigabytes stay compressed.
  • 641870f: I-TERM-HOMONYM lands on the note of the first entity sharing the form (glossary first), carries its source, path and identifier, and cites the form as that note writes it instead of the comparison form; DictionarySource may carry the path of the note.

Patch changes

  • ea6f439: W-API-CONSUMER-MISMATCH counts a consumer as citing the API only when a serves link was read in the consumer's own note, as its page says, never in a third note; the WSDL reader reports a deployment document that imports its port types and declares no operation, instead of an empty contract; the W-TERM-UNDEFINED page no longer promises a keyword page the publication thresholds may withhold.
  • 1131d78: The two consumer checks index the entities and the serves links once per run instead of rebuilding a set of every identifier for every declared consumer and walking every link three times per API.
  • 6d7208b: The findings, the check registry and the relation attributes of the global lint are ordered code unit by code unit rather than by the collation of the runtime, so that two machines write the same order.
  • aa89964: The catalogue says the same remediation as the build for I-TERM-HOMONYM, W-TERM-UNDEFINED, W-LINK-CROSS-SOURCE and W-ATTRIBUTE-UNKNOWN, whose texts had drifted apart; a test over the golden corpora keeps every finding's remediation equal to its catalogue entry, the checks that word their situation apart.
  • 7863128: concordance build reaches the network through the fetch of the command io alone, as lint does: a caller that gives none forbids every connection; the gallery reads the type modules of the core through the injected file system.
  • e5ca327: The caches survive an interrupted build: the node file system writes next to the destination and renames, so a file is whole or absent; a text representation or a cached contract that is not JSON reads as absent and is extracted again (the build reports a text representation it cannot read, instead of stopping on the raw error); a contract reader declares the cacheVersion of the shape it extracts, and a contract cached under another version is read again; the work folder of a conversion is removed whatever happened in it.
  • b6a5530: A contract path that leaves its source (absolute, or climbing above the root) is refused with a W-CONTRACT-UNREACHABLE whose message names no path of the machine, and is never copied under the output; a contract URL pointing at the build machine, its link-local neighbours or a private network is never fetched. contractPathIn and refusedContractUrl are exported by the core package.
  • da662fd: The credentials a URL carries never reach a published file: model.json records the git URL of a source without them, and the finding of an unreachable source strips them from what git echoed (withoutCredentials in the core package).
  • 641870f: I-TERM-HOMONYM lands on the note of the first entity sharing the form (glossary first), carries its source, path and identifier, and cites the form as that note writes it instead of the comparison form; DictionarySource may carry the path of the note.
  • 4234308: Two keywords sharing a slug take their addresses in code-unit order of the keys, never by score, so that the address of a keyword page depends on the published keys alone; a local source holding the cache or the output folder (path: .) never reads back what the build wrote; a stopword file the configuration names but does not exist is an error validate-config and `bu...
Read more

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 16 Sep 21:42

v0.3.1

Patch changes

  • 6a4fcf6: The duplicates block of build.log.json no longer carries timeMs, so that nothing in the log depends on the clock but its at field; the console summary still prints the measured duration of the twin-resource reconciliation. A missing theme file is told apart from an invalid one by a missing flag on the failed load rather than by the text of its message; the exit codes and the messages are unchanged.
  • 2f3037c: The results page as served no longer announces "0 results": its status region says that the search runs in the browser and needs JavaScript, a sentence of the message catalogue (results.noScript) the island replaces once it mounts. The writing direction of a page now comes from the locale's script through textDirection of the i18n package, so that Pashto, Sorani or Divehi pages read right to left like Arabic, Hebrew, Persian and Urdu ones.
  • 0a4f169: The SARIF log no longer carries originalUriBaseIds: the base URI named the folder of the machine that ran the lint, so two checkouts of the same tree gave different logs. Artifact locations keep their uriBaseId of %SRCROOT%, which the forges resolve against their checkout.
  • 0043442: The reader-office plugin declares its plugin API version through the PLUGIN_API_VERSION constant of the core, as the other official plugins do, so a future bump of the API version reaches it without a literal to update.
  • 456a5a0: The box of a facet value takes its id from a slug of the value, so that a source, an application or a domain named with a space or a quote gives a valid id and its label still selects it; two values of a facet slugging alike are told apart by a rank.

Packages at 0.3.1

@concordance-wiki/checks, @concordance-wiki/cli, @concordance-wiki/concordance, @concordance-wiki/core, @concordance-wiki/i18n, @concordance-wiki/inference, @concordance-wiki/ingest, @concordance-wiki/lint, @concordance-wiki/nlp, @concordance-wiki/plugin-contract-openapi, @concordance-wiki/plugin-contract-wsdl, @concordance-wiki/plugin-convert-libreoffice, @concordance-wiki/plugin-reader-office, @concordance-wiki/plugin-reader-vtt, @concordance-wiki/profile, @concordance-wiki/site, @concordance-wiki/typing, @concordance-wiki/ui

Packages on npm

Container image

concordancewiki/concordance:0.3.1 was not on the registry when these notes were written; the digest is not recorded.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 14 Sep 23:04

v0.3.0

Minor changes

  • 08e61ba: On the desktop the tree of the space and the right panel stay in view while the text scrolls, each no taller than the viewport and scrolling on its own when it holds more; the handle that folds a panel stands fixed at the edge of its column.

Patch changes

  • @concordance-wiki/cli@0.3.0
    • @concordance-wiki/plugin-convert-libreoffice@0.3.0
    • @concordance-wiki/plugin-reader-office@0.3.0
    • @concordance-wiki/plugin-reader-vtt@0.3.0
  • 7c56d0a: Git never waits for anyone: Git Credential Manager is told not to ask, ssh runs in batch mode unless the caller names its own command, and a command that stalls is stopped after fifteen minutes, or the seconds CONCORDANCE_GIT_TIMEOUT gives; a source behind an unknown host key is reported without credentials.
  • f8aad74: A local source, a stopword file and the locations of the global lint block are resolved as the platform resolves paths: on Windows a path source relative to the configuration was reported unreachable.

Packages at 0.3.0

@concordance-wiki/checks, @concordance-wiki/cli, @concordance-wiki/concordance, @concordance-wiki/core, @concordance-wiki/i18n, @concordance-wiki/inference, @concordance-wiki/ingest, @concordance-wiki/lint, @concordance-wiki/nlp, @concordance-wiki/plugin-contract-openapi, @concordance-wiki/plugin-contract-wsdl, @concordance-wiki/plugin-convert-libreoffice, @concordance-wiki/plugin-reader-office, @concordance-wiki/plugin-reader-vtt, @concordance-wiki/profile, @concordance-wiki/site, @concordance-wiki/typing, @concordance-wiki/ui

Packages on npm

Container image

concordancewiki/concordance:0.3.0 was not on the registry when these notes were written; the digest is not recorded.

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 14 Sep 20:43

v0.2.0

Minor changes

  • 678b2f8: Emergent domains proposed from the neighbourhood: inference.domains names the terms with enough neighbours as pivots and reports every unclassified note within the radius as I-DOMAIN-SUGGESTED, listed in the build log, assigned only under assign; the lock file promotes a proposal under domains, and every entity records the origin of its domain under domain_origin.
  • 90cdb13: inference.domains.max_neighbours: the degree above which a term is a hub of the corpus rather than a domain and never a pivot. Without it the most cited words of a corpus win every tie and every proposal names them. A proposal now names the pivot's own domain when something files the pivot, so that an unclassified note joins the domain of the terms it is close to; a domain named after the pivot only when the pivot itself is unclassified.
  • f42ff24: The entity page shows a domain the build proposed in italics, with a tooltip saying so; the unclassified finding of a transcript or a deck grouped into a note the proposal or the lock filed is answered with the note's.
  • 5b2a0a3: The panel of a meeting page and of a document page draws the Domain row of the entity page when the note is filed, so that a brief the proposal filed says so, in italics with the reason on hovering.

Patch changes

  • dbabd01: Readmes written for the registry: every package README opens with what the package is for and who installs it, the install line, the shortest example that runs against the published exports, its entry points and the guides as absolute links, the former notes kept under an Inside section; a packaging check refuses a relative link in a published README.
  • e7ab68f: Package pages that say what they are for: every README on the registry opens with the mark, the package name, a one-line promise, the badges and the links, then why the package exists for the person who installs it, the quick start, what you get and the documentation; the maintainers' notes are kept at the end, folded.
  • f42ff24: The entity page shows a domain the build proposed in italics, with a tooltip saying so; the unclassified finding of a transcript or a deck grouped into a note the proposal or the lock filed is answered with the note's.
  • 5d2fd8c: The twin resources are reconciled before the recognition dictionary is built: a document folded into its note no longer enters the dictionary as a second entity of the same title, so the shared title yields no I-TERM-HOMONYM, its occurrences are read at full confidence and the co-occurrence rows of the folded twin count on the merged entity.
  • 0adb9b5: Commands are located by an absolute path, never by a name looked up on the PATH: the build takes git from the system directories of the platform, or from CONCORDANCE_GIT; the linter orders the suffixes of a source by code unit, as every other list.
  • 9599fef: The page fills the viewport and its columns reach the footer: the tree and the panel of an entity page no longer stop above a band of ground, and the footer is a band flush with the columns, the width of the page under a rule, instead of a card floating narrower than them on the ground.

Packages at 0.2.0

@concordance-wiki/checks, @concordance-wiki/cli, @concordance-wiki/concordance, @concordance-wiki/core, @concordance-wiki/i18n, @concordance-wiki/inference, @concordance-wiki/ingest, @concordance-wiki/lint, @concordance-wiki/nlp, @concordance-wiki/plugin-contract-openapi, @concordance-wiki/plugin-contract-wsdl, @concordance-wiki/plugin-convert-libreoffice, @concordance-wiki/plugin-reader-office, @concordance-wiki/plugin-reader-vtt, @concordance-wiki/profile, @concordance-wiki/site, @concordance-wiki/typing, @concordance-wiki/ui

Packages on npm

Container image

concordancewiki/concordance:0.2.0 was not on the registry when these notes were written; the digest is not recorded.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 14 Sep 13:16

v0.1.0

Minor changes

  • b64b730: Shared check registry: a catalogue of every documented check with its default severity, family, description, remediation and documentation URL, five checks computed as pure functions over the model (W-API-NOCONSUMER, W-API-CONSUMER-MISMATCH, W-APP-MISSING, W-DOMAIN-UNCLASSIFIED, I-REL-AMBIGUOUS), and createRegistry which merges plugin contributions, runs the enabled checks, applies the checks: overrides to computed and step findings alike and refuses an unknown identifier.
  • 42b97f5: Gaps between contract and notes: attachOperations reports an operation note that names an API with an imported contract and matches none of its operations as W-OPERATION-UNMATCHED, a warning saying that the operation disappeared from the contract or that the note is ahead of it (a note that names no API, or one taken in an ambiguity, is not reported); the check joins the catalogue as a pipeline step with its documentation page; and the contract section of the api page flags every operation of the contract that no note describes yet, with their count in its heading.
  • 116aca4: Links written in notes: explicitLinks turns every markdown link that resolves to a note into a link at the explicit_link confidence with the file, line, text and anchor as provenance, attaches a non-markdown target as a documents link from the resource, reports a missing target as E-LINK-BROKEN, and resolves <source>:<path> links and relative links climbing into a sibling source only when inference.cross_source_links is set, flagging them as W-LINK-CROSS-SOURCE otherwise; core gains the Link and Provenance types mirroring the model schema, and the checks catalogue registers W-LINK-CROSS-SOURCE.
  • 69cf231: Folder domains: a domain accepts folder: true or folder: <name> and claims every file with a directory of that name on its path in any source, a folder subdomain claims only the files under its parent's folder (anywhere on a path the parent's globs match when the parent is declared by globs), folders and globs combine on the same domain with the same precedence, the origin folder joins frontmatter, glob and unclassified, validate-config rejects a folder name that is not a single path segment, and the minimal corpus declares a quality domain by folder with a determinism folder subdomain.
  • 75add70: Frontmatter references: frontmatterLinks turns every value of a reference-typed attribute that carries a relation in the profile into a link of that relation at the frontmatter_ref confidence, with the attributes the profile declares (accesses in read mode for reads), reversed for inverse attributes and with the attribute name as provenance; resolveReference and indexEntities resolve a value by identifier, by source-relative path, then by exact title; a value that matches nothing, several titles, a note of a type the attribute does not accept or a value that is not a string is reported as W-REF-UNRESOLVED, which the checks catalogue registers.
  • 327897e: Global domains and applications: compileDomains and resolveDomain file every note under the frontmatter domain, else under the deepest domain whose globs match its source-relative path (globs are declared once and evaluated across every source), else under unclassified with W-DOMAIN-UNCLASSIFIED; resolveApplication takes the frontmatter application, else a rule's set.application, else the source's, and reports W-APP-MISSING when none applies; a value the configuration does not declare is kept as written and reported as W-DOMAIN-UNKNOWN or W-APP-UNKNOWN. The typing step is the producer of these findings, so the checks catalogue registers them as step checks and no longer computes W-APP-MISSING and W-DOMAIN-UNCLASSIFIED from the model; it also registers W-TYPE-UNKNOWN and W-ATTRIBUTE-UNKNOWN.
  • 64664a4: Add the contract-openapi plugin: the OpenAPI 3.x contract an api note declares through its contract attribute, as a URL or a path, is read (JSON or YAML) and produces one endpoint entity per operation with its method, path, summary and operation identifier, one exposes link per operation at the contract_import confidence with the contract location and the operation name as provenance, the referenced schemas as candidate objects, and a record of the contract version with its import date; the extracted contract is cached by the SHA-256 of its bytes and an unreachable or unparsable contract yields W-CONTRACT-UNREACHABLE without stopping the build. The core types the source contribution (SourcePayload, PluginContext with fs, clock and an optional fetch, SourceOutput with entities, links, candidates, contracts and findings), records contracts in the build log and in the model schema (build.contracts, candidates.objects); the checks catalogue gains W-CONTRACT-UNREACHABLE; the default profile gains the exposes relation from api to endpoint.
  • d0c0bc5: Operation notes: attachOperations matches every hand-written endpoint note to an operation imported from the contract of its API, on the frontmatter operation_id, then on the method and path pair (or port and title for SOAP), then on the title in comparison form, and merges the pair into the note, which keeps its identifier, markdown and frontmatter, takes the contract attributes it does not set, lists the contract as a representation and names the rung in grouped_by while the exposes link now points at the note; an ambiguous match is a W-OPERATION-AMBIGUOUS finding and attaches nothing. Entity representations gain the optional kind and operation fields.
  • 66d7b33: concordance build runs the whole inference chain and exits 0 with a complete model.json: after ingestion, parsing and typing, the source plugins import their contracts, one recognition dictionary per locale is built, every note is scanned, the written links, frontmatter references, mentions and co-occurrences are produced and combined, the keyword pages are discovered and published, the markdown notes are reconciled as twin resources, the model checks of the registry run and every finding of every step is enriched and written once; packages/cli/src/pipeline/ holds one module per step, the relation typing step calling typeRelations of the inference package. The build prints render: not available in this version instead of stopping with exit code 2, the summary and the log gain the keyword and twin-resource counts, and the model gains build.contracts, candidates.objects and displayed_neighbourhood, sorted by assembleModel. A related link that co-occurrence alone knows no longer raises I-REL-AMBIGUOUS. Keyword discovery leaves out the headings and the section labels a list item opens with (- Reads:): titles, not usage. A frontmatter reference to an existing note of a type the attribute does not accept gives its link, which the relation typing step drops with E-META-REL, instead of W-REF-UNRESOLVED. A CheckLink may carry its provenance: W-API-CONSUMER-MISMATCH counts as citations only the serves links read outside the API note, reads the ## Consumers section as a declaration next to the attribute, and resolves declared consumers relative to the source of the note. A mention keeps the confidence the scan gave it (type prefix bonus, homonym factor) and the combined glossary confidence grows from the strongest occurrence. The default profile gives the decisions attribute of a meeting the documents relation.
  • c995c47: Pseudonymisation is applied by the build: the dictionary of privacy.pseudonymize is read and validated (W-PRIVACY-DICTIONARY when it is missing or malformed, an error that fails the build and withholds every transcript when pseudonymisation is enabled), every transcript is pseudonymised before typing in its cues, its metadata and the file offered for download, which readers write back through a new optional rewrite (implemented for VTT and SRT; W-PRIVACY-WITHHELD for a reader without it), the notes and documents of the scope types are replaced the same way, the real names are rejected from keyword discovery, and transcripts are withheld altogether unless privacy.publish_transcripts is true.
  • 84a3d54: Relation typing: typeRelations names the relation of every combined link from the profile on four rungs (mapped section, typed frontmatter attribute, type pair admitting a single relation, related), drops a relation the profile does not allow between the two types with E-META-REL, marks a pair-named link relation_origin: pair and turns it around when only the reverse pair admits the relation, caps related at the profile cap after the combination and reports one I-REL-AMBIGUOUS per remaining related link on its first provenance; relationLabel reads the display label of a relation, in either direction, from the profile, whose relations gain an optional inverse_label; the explicit link step leaves every link between two notes as related for that step, and I-REL-AMBIGUOUS becomes a step finding of the registry instead of a model check.
  • cc77d53: Create the packages with their entry points and the build toolchain.
  • 223a319: Add the contract-wsdl plugin: the WSDL 1.1 or 2.0 contract an api note declares through its contract attribute produces one endpoint entity per port type or interface operation, titled operation (port), with its port, binding, SOAP action and documentation, one exposes link per operation at the contract_import confidence with the contract location and the operation name as provenance, the XSD elements and complex types its messages reference as candidate objects (inline schemas walked, imported names kept by name), and a contract record; an imported WSDL and an imported OpenAPI produce entities of the same shape. The loading shared by the contract plugins moves to the core (loadContracts with a `Contr...
Read more