Releases: concordance-wiki/concordance
Release list
v0.4.0
v0.4.0
Minor changes
- a851604:
concordance build --timingsprints, 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 mcpserves the questions ofqueryto 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.jsonis 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 jsonfollows the newquery.schema.json. - fddad56:
concordance queryanswers the questions of the whole corpus:--stats,--sources,--domains,--undefined [<expression>]with--min-files,--recentwith--sinceand--source,<expression> --changed-with, and--findingsabout an entity or under--check. - 30da51f:
concordance queryreads one section alone (--occurrences,--links,--related), walks the way to another entity (--path <target>,--max-depth), lists the entities of the model (--listwith--type,--domain,--application,--source,--status,--all), and finds its model throughconcordance.yamlof the working directory or--config, then through the published model ofconcordance-lint.yaml, when--modelnames 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 querynarrows the links of an entity with--direction in|outand--relation <slug>, lists what lies within--radiuslinks 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-onlyand--no-keywordsfilter 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-openapiand@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
cacheVersionof 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 (
collationin 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 thecollationoptions it compares with in place of anIntl.Collator. - b6a5530: A contract path that leaves its source (absolute, or climbing above the root) is refused with a
W-CONTRACT-UNREACHABLEwhose 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.contractPathInandrefusedContractUrlare exported by the core package. - da662fd: The credentials a URL carries never reach a published file:
model.jsonrecords the git URL of a source without them, and the finding of an unreachable source strips them from what git echoed (withoutCredentialsin 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,readBoundedandfetchFailurein 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_NAMESin 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 (
compiledSchemain 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;readSchemareturns the same schema object on every call. - 23d6f77: A document over
conversion.max_size_mbis no longer read and hashed before the converter refuses it: the build checks its size first (sizejoins the file system interface) and reports the sameW-CONV-FAILEDwithout 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-HOMONYMlands 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;DictionarySourcemay carry thepathof the note.
Patch changes
- ea6f439:
W-API-CONSUMER-MISMATCHcounts a consumer as citing the API only when aserveslink 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; theW-TERM-UNDEFINEDpage no longer promises a keyword page the publication thresholds may withhold. - 1131d78: The two consumer checks index the entities and the
serveslinks 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-SOURCEandW-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 buildreaches the network through thefetchof the command io alone, aslintdoes: 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
cacheVersionof 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-UNREACHABLEwhose 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.contractPathInandrefusedContractUrlare exported by the core package. - da662fd: The credentials a URL carries never reach a published file:
model.jsonrecords the git URL of a source without them, and the finding of an unreachable source strips them from what git echoed (withoutCredentialsin the core package). - 641870f:
I-TERM-HOMONYMlands 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;DictionarySourcemay carry thepathof 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 errorvalidate-configand `bu...
v0.3.1
v0.3.1
Patch changes
- 6a4fcf6: The
duplicatesblock ofbuild.log.jsonno longer carriestimeMs, so that nothing in the log depends on the clock but itsatfield; 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 amissingflag 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 throughtextDirectionof 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 theiruriBaseIdof%SRCROOT%, which the forges resolve against their checkout. - 0043442: The reader-office plugin declares its plugin API version through the
PLUGIN_API_VERSIONconstant 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
@concordance-wiki/checks@0.3.1@concordance-wiki/cli@0.3.1@concordance-wiki/concordance@0.3.1@concordance-wiki/core@0.3.1@concordance-wiki/i18n@0.3.1@concordance-wiki/inference@0.3.1@concordance-wiki/ingest@0.3.1@concordance-wiki/lint@0.3.1@concordance-wiki/nlp@0.3.1@concordance-wiki/plugin-contract-openapi@0.3.1@concordance-wiki/plugin-contract-wsdl@0.3.1@concordance-wiki/plugin-convert-libreoffice@0.3.1@concordance-wiki/plugin-reader-office@0.3.1@concordance-wiki/plugin-reader-vtt@0.3.1@concordance-wiki/profile@0.3.1@concordance-wiki/site@0.3.1@concordance-wiki/typing@0.3.1@concordance-wiki/ui@0.3.1
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
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_TIMEOUTgives; 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
pathsource 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
@concordance-wiki/checks@0.3.0@concordance-wiki/cli@0.3.0@concordance-wiki/concordance@0.3.0@concordance-wiki/core@0.3.0@concordance-wiki/i18n@0.3.0@concordance-wiki/inference@0.3.0@concordance-wiki/ingest@0.3.0@concordance-wiki/lint@0.3.0@concordance-wiki/nlp@0.3.0@concordance-wiki/plugin-contract-openapi@0.3.0@concordance-wiki/plugin-contract-wsdl@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@concordance-wiki/profile@0.3.0@concordance-wiki/site@0.3.0@concordance-wiki/typing@0.3.0@concordance-wiki/ui@0.3.0
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
v0.2.0
Minor changes
- 678b2f8: Emergent domains proposed from the neighbourhood:
inference.domainsnames the terms with enough neighbours as pivots and reports every unclassified note within the radius asI-DOMAIN-SUGGESTED, listed in the build log, assigned only underassign; the lock file promotes a proposal underdomains, and every entity records the origin of its domain underdomain_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 takesgitfrom the system directories of the platform, or fromCONCORDANCE_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
@concordance-wiki/checks@0.2.0@concordance-wiki/cli@0.2.0@concordance-wiki/concordance@0.2.0@concordance-wiki/core@0.2.0@concordance-wiki/i18n@0.2.0@concordance-wiki/inference@0.2.0@concordance-wiki/ingest@0.2.0@concordance-wiki/lint@0.2.0@concordance-wiki/nlp@0.2.0@concordance-wiki/plugin-contract-openapi@0.2.0@concordance-wiki/plugin-contract-wsdl@0.2.0@concordance-wiki/plugin-convert-libreoffice@0.2.0@concordance-wiki/plugin-reader-office@0.2.0@concordance-wiki/plugin-reader-vtt@0.2.0@concordance-wiki/profile@0.2.0@concordance-wiki/site@0.2.0@concordance-wiki/typing@0.2.0@concordance-wiki/ui@0.2.0
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
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), andcreateRegistrywhich merges plugin contributions, runs the enabled checks, applies thechecks:overrides to computed and step findings alike and refuses an unknown identifier. - 42b97f5: Gaps between contract and notes:
attachOperationsreports an operation note that names an API with an imported contract and matches none of its operations asW-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 theapipage flags every operation of the contract that no note describes yet, with their count in its heading. - 116aca4: Links written in notes:
explicitLinksturns every markdown link that resolves to a note into a link at theexplicit_linkconfidence with the file, line, text and anchor as provenance, attaches a non-markdown target as adocumentslink from the resource, reports a missing target asE-LINK-BROKEN, and resolves<source>:<path>links and relative links climbing into a sibling source only wheninference.cross_source_linksis set, flagging them asW-LINK-CROSS-SOURCEotherwise; core gains theLinkandProvenancetypes mirroring the model schema, and the checks catalogue registersW-LINK-CROSS-SOURCE. - 69cf231: Folder domains: a domain accepts
folder: trueorfolder: <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 originfolderjoinsfrontmatter,globandunclassified,validate-configrejects a folder name that is not a single path segment, and the minimal corpus declares aqualitydomain by folder with adeterminismfolder subdomain. - 75add70: Frontmatter references:
frontmatterLinksturns every value of a reference-typed attribute that carries a relation in the profile into a link of that relation at thefrontmatter_refconfidence, with the attributes the profile declares (accessesinreadmode forreads), reversed forinverseattributes and with the attribute name as provenance;resolveReferenceandindexEntitiesresolve 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 asW-REF-UNRESOLVED, which the checks catalogue registers. - 327897e: Global domains and applications:
compileDomainsandresolveDomainfile every note under the frontmatterdomain, else under the deepest domain whose globs match its source-relative path (globs are declared once and evaluated across every source), else underunclassifiedwithW-DOMAIN-UNCLASSIFIED;resolveApplicationtakes the frontmatterapplication, else a rule'sset.application, else the source's, and reportsW-APP-MISSINGwhen none applies; a value the configuration does not declare is kept as written and reported asW-DOMAIN-UNKNOWNorW-APP-UNKNOWN. The typing step is the producer of these findings, so the checks catalogue registers them as step checks and no longer computesW-APP-MISSINGandW-DOMAIN-UNCLASSIFIEDfrom the model; it also registersW-TYPE-UNKNOWNandW-ATTRIBUTE-UNKNOWN. - 64664a4: Add the
contract-openapiplugin: the OpenAPI 3.x contract anapinote declares through itscontractattribute, as a URL or a path, is read (JSON or YAML) and produces oneendpointentity per operation with its method, path, summary and operation identifier, oneexposeslink per operation at thecontract_importconfidence 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 yieldsW-CONTRACT-UNREACHABLEwithout stopping the build. The core types the source contribution (SourcePayload,PluginContextwithfs,clockand an optionalfetch,SourceOutputwith entities, links, candidates, contracts and findings), recordscontractsin the build log and in the model schema (build.contracts,candidates.objects); the checks catalogue gainsW-CONTRACT-UNREACHABLE; the default profile gains theexposesrelation fromapitoendpoint. - d0c0bc5: Operation notes:
attachOperationsmatches every hand-writtenendpointnote to an operation imported from the contract of its API, on the frontmatteroperation_id, then on themethodandpathpair (orportand 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 ingrouped_bywhile theexposeslink now points at the note; an ambiguous match is aW-OPERATION-AMBIGUOUSfinding and attaches nothing. Entity representations gain the optionalkindandoperationfields. - 66d7b33:
concordance buildruns the whole inference chain and exits 0 with a completemodel.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 callingtypeRelationsof the inference package. The build printsrender: not available in this versioninstead of stopping with exit code 2, the summary and the log gain the keyword and twin-resource counts, and the model gainsbuild.contracts,candidates.objectsanddisplayed_neighbourhood, sorted byassembleModel. Arelatedlink that co-occurrence alone knows no longer raisesI-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 withE-META-REL, instead ofW-REF-UNRESOLVED. ACheckLinkmay carry its provenance:W-API-CONSUMER-MISMATCHcounts as citations only theserveslinks read outside the API note, reads the## Consumerssection 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 thedecisionsattribute of a meeting thedocumentsrelation. - c995c47: Pseudonymisation is applied by the build: the dictionary of
privacy.pseudonymizeis read and validated (W-PRIVACY-DICTIONARYwhen 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 optionalrewrite(implemented for VTT and SRT;W-PRIVACY-WITHHELDfor 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 unlessprivacy.publish_transcriptsis true. - 84a3d54: Relation typing:
typeRelationsnames 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 withE-META-REL, marks a pair-named linkrelation_origin: pairand turns it around when only the reverse pair admits the relation, capsrelatedat the profile cap after the combination and reports oneI-REL-AMBIGUOUSper remainingrelatedlink on its first provenance;relationLabelreads the display label of a relation, in either direction, from the profile, whose relations gain an optionalinverse_label; the explicit link step leaves every link between two notes asrelatedfor that step, andI-REL-AMBIGUOUSbecomes 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-wsdlplugin: the WSDL 1.1 or 2.0 contract anapinote declares through itscontractattribute produces oneendpointentity per port type or interface operation, titledoperation (port), with its port, binding, SOAP action and documentation, oneexposeslink per operation at thecontract_importconfidence 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 (loadContractswith a `Contr...