Turning on “block suggestions matching public code” is a real control and a weak assurance. It compares generated text against one index, above a length threshold, at the moment of suggestion. Everything that decides your exposure happens outside that comparison — in the dependency the assistant recommended, in the edit that made a blocked pattern pass, and in the question that arrives three years later asking what you can show.
The sentence that turns a contract into a control. Microsoft’s Customer Copyright Commitment documentation states that on tendering a claim “the customer will be required to demonstrate compliance with all relevant requirements”. An indemnity you cannot evidence is an indemnity you may not have.
Plain-English explainer · ISO/IEC 42001:2023 AIMS · Vendor terms as documented August 2026 — verify current terms
A public-code filter protects against one thing: your developers unknowingly accepting a block of text that already exists, near-identically, in the public code the vendor indexes. It does not establish that your codebase is clean, because it matches text rather than derivation, sees one corpus rather than all code, and evaluates the suggestion rather than the merged result. The exposure it leaves behind is not exotic. It is the package the assistant told you to install, the attribution obligation nobody discharged at release, and — the one that costs the most time — the absence of any record of which code was AI-assisted, under which tool, at which configuration, on which date. That last gap is a governance problem rather than a technical one, and it surfaces years later in acquisition diligence, in a customer audit clause, or in a demand letter, where the burden is on you to describe your own history. What follows is what the filter does and does not do, the exposures ranked against the controls that actually move them, a provenance record model you can operate without instrumenting a single keystroke, how to read the indemnity you think you have, and how this is treated as an ISO/IEC 42001 risk with a documented treatment rather than a policy sentence.
Key Takeaways
- A public-code filter is three design choices — the corpus it indexes, the match length it treats as significant, and what it does on a hit. The numbers move between releases, but the three questions are the durable way to assess any vendor’s implementation.
- The licensing exposure that actually bites is usually the dependency the assistant recommends rather than the function body it writes: one import line can attach copyleft or attribution obligations to an entire product.
- Provenance is a records question, not a detection question. When a licensing challenge arrives, nobody asks whether your filter was good — they ask what you can show about how the code came to exist, and an absent record makes you prove a negative.
- You can record provenance at decision boundaries — tool and tier, configuration state with dates, repository scope, commit markers, review approvals, build-time bill of materials — without keystroke capture, which is disproportionate as well as unhelpful.
- Vendor indemnities are real and conditional. Read the covered tiers, the required mitigations, the cap, the notice obligations and the demonstration burden — and diarise a review, because required-mitigation lists are amended by publication rather than by negotiation.
- ISO/IEC 42001 gives this a home as an assessed AI risk with a documented treatment, and ISO/IEC 27001 supplies the intellectual-property and secure-development controls. SOC 2 reaches it only through change management, vendor management and your own system description — there is no trust services criterion for licensing.
What the filter actually does
Strip away the branding and every public-code filter is the same three decisions. What corpus does it index? Typically the public repositories on the vendor’s own platform, which is a large and non-exhaustive sample of the world’s code. What counts as a match? A length threshold, so that ordinary idiom does not trip it — as documented at the time of writing, GitHub’s duplication detection compares a suggestion together with its surrounding code and acts on matches at a length of roughly 150 characters, and you should verify the current figure and scope in vendor documentation rather than quoting this page. What happens on a hit? Either the suggestion is suppressed, or it is shown with references to the matching repositories and their licence types.
That third choice is the one with governance consequences, and it is usually made by whoever set the tenant up. Blocking mode removes the decision from the developer. Annotate or reference mode keeps the suggestion and hands them a licence obligation, on screen, in the middle of a task — which is a reasonable design if somebody is going to record and discharge the obligation, and a liability if nobody is. The published required-mitigation terms for one major platform make this explicit for code generation: the protected-material code model must be configured in either filtering or annotating mode, and where annotating is chosen, complying with the cited licence becomes the customer’s own obligation. The contract is not ambiguous about who owns that.
Two practical notes. The setting almost always exists at both user and organisation level, and only the organisation-level policy is a control you can evidence — a per-user toggle is a preference. And the setting is a point-in-time state, so a new organisation, a migrated repository or an acquired team inherits platform defaults rather than your policy. Most of the gaps we find in readiness work are not policy failures. They are scope failures, in a console nobody knew existed.
Risk against control, and what is left over
The fourth column is the one to read twice. A control that reduces an exposure is not the same as a control that removes it, and the difference is what you carry as accepted risk and disclose honestly when asked.
| Exposure | What actually creates it | Control that moves it | Residual risk |
|---|---|---|---|
| Verbatim reproduction of licensed public code | A model emits a distinctive block that exists, character for character, in a public repository under a licence you have not complied with. | Enable the public-code filter in blocking mode at organisation level rather than per user, and record the setting state at intervals from the platform audit log. | The filter only knows the corpus it indexes. Code that was never public on that platform, or public elsewhere, is invisible to it. |
| Novel-but-derivative output | Output that reproduces the structure, sequence and organisation of a protected work without matching its text. A rename, a reformat or an intervening edit is enough to clear a similarity threshold. | Human review at the pull request, with reviewers competent to recognise a recognisable implementation, and a record of who reviewed what. | Substantial. This is a legal question about derivation, not a string-matching question, and no tool in your pipeline decides it. |
| A dependency the assistant recommends | The import line. One suggested package can attach copyleft or attribution obligations to a whole product in a way twelve generated lines rarely do. | A dependency licence policy enforced in CI — an allow list, a deny list and a documented exception route — plus a build-time bill of materials. | Transitive dependencies and dual-licensed packages still need a human decision. The scanner reports, but it does not interpret your distribution model. |
| A package name that does not exist | Models invent plausible package names, and the same prompt tends to invent the same name repeatedly — which is what makes pre-registering it attractive to an attacker. | Registry allow-listing, install-time verification against a curated internal proxy, and a rule that no dependency is added without appearing in a resolved lockfile a human approved. | Rates differ sharply by model and have moved as models improved. The rate is not zero, so the control has to be structural rather than a habit of checking. |
| Unmet attribution under permissive licences | MIT, BSD and Apache-2.0 do not forbid reuse, but they require notice. Accepting a matched suggestion in annotate mode creates an obligation that nobody discharges at release time. | A notices file generated at build from the same manifest that produces the bill of materials, and a rule that annotate-mode acceptances are logged as exceptions. | Snippets accepted outside the dependency graph never reach the notices file. This is the most commonly breached obligation and the least commonly tracked. |
| Copyleft reaching proprietary code | Almost always through a dependency rather than a snippet, and the trigger is usually distribution or network use rather than mere internal use. | Licence policy differentiated by how the artefact is delivered — container, on-premises binary, hosted service — because the same package carries different obligations in each. | Delivery models change faster than licence policies. A hosted-only product that ships one on-premises appliance has changed its obligations without changing its code. |
| Your own IP position | Material generated without sufficient human authorship may not attract copyright protection, which affects what you can assert and what you must disclose when registering. | A provenance record that lets you describe the human contribution accurately, rather than reconstructing it from memory years later. | Doctrine is moving. Guidance issued in this area has already been superseded once, so the record needs a review date attached to it. |
| Supplier-generated code | An outsourced development partner used an assistant under terms you never saw, and delivered under a contract promising the work is original and free of third-party claims. | Flow-down clauses that name AI assistance explicitly, require the supplier to hold equivalent controls, and require disclosure on request. | Enforcement depends on the supplier being able to evidence its own position. Most cannot yet, which is a diligence finding rather than a breach. |
| The indemnity you assumed you had | Coverage is conditioned on product tier, on configuration state at generation time, and on your ability to demonstrate both when you tender the claim. | A dated record of the covered products, the conditions in force, and the evidence that they were met — reviewed whenever the vendor amends its terms. | Terms are amended unilaterally. A commitment you verified eighteen months ago is a commitment you have not verified. |
Read the rows in order of what has actually cost organisations money and it reorders itself. Snippet-level reproduction is the exposure everyone discusses and the one the tooling handles best. The dependency rows are where obligations attach at product scale. And the last row is the one that converts a manageable problem into an unmanageable one, because it is the only exposure whose control is a record you either kept or did not.
Provenance is a records question
The scenario that costs organisations weeks is not a lawsuit. It is a question. An acquirer’s counsel, a customer exercising an audit clause, or an open-source compliance team writes to ask which parts of a codebase were produced with AI assistance, under what tool, with what settings, over what period. The code is years old. The engineers who wrote it have moved on. The tool has been through four releases and two contract revisions. There is no artefact anywhere in the estate that answers the question, and the burden of answering sits with you.
This is what makes provenance a governance problem rather than a technical one. Nothing about the difficulty is unsolved: the records are trivially cheap to generate at the moment the code is written and effectively impossible to reconstruct afterwards. The failure is one of anticipation. Teams instrument what they are measured on this quarter, and nobody is measured on being able to describe 2025 in 2027.
There is a second, quieter reason to keep the record, and it points the other way — towards what you own rather than what you owe. The United States Copyright Office’s registration guidance on works containing AI-generated material, published in the Federal Register in March 2023 and reinforced by its 2025 report on copyrightability, holds that material generated without sufficient human authorship is not protectable, that only the human contribution to a mixed work is in play, and that an applicant must disclose AI-generated material that is more than de minimis and describe the human contribution. That is a disclosure obligation resting on a factual claim about how a work was made. The organisation that kept a record can make it. The organisation that did not is guessing on a government form.
Framed that way, provenance stops being defensive paperwork. It is the same artefact that answers a buyer’s questionnaire, supports a registration, satisfies an indemnity condition and lets you scope a remediation to the four repositories it affects rather than the whole estate. It belongs beside your AI system inventory, not in a separate initiative.
What to capture, without keystroke logging
The instinct on hearing “provenance” is to reach for telemetry — capture every suggestion, every acceptance, every edit. Resist it. Keystroke-level capture is disproportionate to the risk, creates employee-monitoring and works-council exposure in several jurisdictions, and produces a corpus so large that nobody can answer a question from it. Record at decision boundaries instead: the points where a human or a policy already makes a choice, and where a durable artefact already exists.
| Record field | The question it answers years later | Where it comes from | What it is not |
|---|---|---|---|
| Tool and tier | Which product generated assistance in this repository, on which commercial tier, under whose contract. Tier is the field that decides whether any indemnity exists at all. | Licence assignment records from the vendor admin console, reconciled to your identity provider group membership. | Not a per-suggestion record. One row per tool per scope per period is enough. |
| Configuration state, with dates | Whether the public-code filter was in blocking or annotate mode when the code was written, and whether it was ever switched off. | The organisation policy setting, exported on a stated cadence, plus the platform audit log of changes to that setting. | Not a screenshot taken today. Today tells you about today. The question will be about a period that has closed. |
| Scope: which repositories | Where assistance was permitted and where it was not — including repositories deliberately excluded because of customer commitments. | A repository inventory with an AI-assistance attribute, held next to the rest of your asset register. | Not an assumption that the estate is uniform. New organisations and forks inherit defaults, and defaults are rarely your policy. |
| Commit-level marker | Which changes were materially AI-assisted, as declared by the author at the moment they knew the answer. | A commit trailer convention, checked by CI on the branches that matter. Any consistent key works. Consistency is the whole value. | Not a measure of how much of the diff a model wrote. It is a flag for later retrieval, not a percentage. |
| Human review record | Who read the change before it merged, and whether they were somebody other than the author. | Pull-request approval metadata and the branch protection rule that made approval non-optional. | Not an assertion that review catches derivation. It records that a competent human accepted the change. |
| Component manifest at build | What third-party code is actually in the shipped artefact and under what licences. | A bill of materials generated during the build, in SPDX or CycloneDX, retained with the release. | Not a record of AI assistance. No SBOM minimum element captures whether a component was written with a model. |
| Exception record | Every occasion somebody accepted a suggestion the filter had flagged, and what licence obligation was accepted with it. | A ticket raised at the moment of acceptance, referencing the matched repository and licence the tool reported. | Not optional if you run annotate mode. In annotate mode the obligation to comply with the cited licence is yours. |
| Retention and custody | Whether the records still exist when the question is asked, which is usually years after the commit. | Your own storage, not the vendor default. Platform audit-log retention is a plan setting and is routinely shorter than a diligence horizon. | Not the tool vendor’s responsibility. If retention lapses, the record is gone and the burden is yours. |
Two of these deserve emphasis because they are the ones teams skip. The configuration state with dates is the field that converts a vendor commitment into something you can rely on, and it is the field that expires: platform audit-log retention is a plan setting, commonly ninety days, while the question you will be asked arrives at a diligence horizon measured in years. Export it on a cadence into storage you control. And the commit-level marker is worth having precisely because it is cheap and declarative — a trailer the author adds at the moment they are the only person who knows the answer. It is not a percentage, it will not be perfectly applied, and it is still the difference between scoping a review to eighty commits and scoping it to a codebase.
What the record deliberately omits is as important as what it holds. It does not attempt to measure how much of a diff a model produced, because that number is unstable, unverifiable and would invite exactly the surveillance instrumentation this design avoids. It records that assistance was used, under which conditions, and that a human accepted the result.
Read the indemnity, do not assume it
Several vendors have published named commitments to defend customers against intellectual-property claims arising from generated output — Microsoft’s Customer Copyright Commitment, GitHub’s Copilot IP indemnity, Google Cloud’s generative AI indemnification and OpenAI’s Copyright Shield among them. They are genuine, materially different from one another, and amended more often than most customers notice. Seven questions decide whether yours means anything.
| The question | Why it bites | Where to look |
|---|---|---|
| Which products and tiers are covered? | Coverage attaches to defined products, usually paid business or enterprise tiers. A developer using a personal subscription on a work laptop is outside the definition entirely, whatever your policy says. | The product terms definition of covered products, and your own licence assignment records. |
| Is training data covered, output, or both? | These are different claims. Some commitments cover only claims arising from the output delivered to you, while others also address claims about the data the model was trained on. The gap is where surprise lives. | The scope clause, then compare it against the claim you are actually worried about. |
| What are the required mitigations? | Coverage is typically conditioned on configuration. One published example requires a protected-material code filter to be configured in either filtering or annotating mode — and where annotating is chosen, makes compliance with the cited licence the customer’s own obligation. | The vendor’s required-mitigations documentation, which is a live page and not part of the signed contract. |
| Can you demonstrate the conditions were met? | The obligation is evidentiary. If you tender a claim, you are expected to show the required mitigations were in place at the time the output was generated — a configuration record, not a recollection. | Your own provenance record. Nothing in the vendor console is retained on your behalf for this purpose. |
| Is the commitment capped? | Caps tied to fees paid in a preceding period are common. A cap measured against twelve months of seat licences is not proportionate to litigation, and that asymmetry belongs in the risk assessment rather than in a footnote. | The limitation-of-liability clause, and whether the indemnity sits inside or outside the general cap. |
| Who controls the defence? | Most commitments require prompt written notice and give the vendor conduct of the defence. Settling or admitting anything on your own initiative can extinguish the coverage you were relying on. | The notice, cooperation and settlement provisions — and make sure legal, not engineering, holds that runbook. |
| How can the terms change? | Required mitigations are amended by publication. One vendor gives customers six months from publication to implement newly required mitigations. The same page has also removed a requirement that many teams still believe is mandatory. | The amendment mechanics, plus a diarised review so you learn about changes on your schedule rather than during a claim. |
A worked illustration of why the review date matters more than the summary. Microsoft publishes its required mitigations on a documentation page rather than in the signed terms. At the time of writing that page carries universal mitigations effective from December 2023 that expressly do not apply to GitHub or Copilot Studio, code-generation mitigations specific to Azure OpenAI, a six-month window from publication to implement any newly required mitigation — and a line stating that for GitHub offerings, as of 3 April 2026, there are no additional required mitigations and use of the duplicate detection filter is no longer required for coverage. A team that turned the filter on for indemnity reasons in 2024 and never looked again holds a belief about its contract that is two revisions old. That is not an argument for switching the filter off. It is an argument for a dated register and a diarised review.
One more limit worth stating plainly, because it is where expectations diverge most from drafting. An indemnity is generally a promise about defence costs and money damages. It is not a licence to keep shipping the code, it does not indemnify the engineering cost of removing and replacing it, and it does not resolve the commitment you separately made to your own customer. Treat it as recovery, and treat the controls above as the thing that prevents you needing it.
Availability, enforcement, dependencies, SBOM
Model and tool availability governance comes first because it is the only control that operates before anything is generated. Decide which tools may be used for code at all, on which commercial tier, and enforce it where software is actually acquired — identity provider groups, device management, and the expense policy that quietly funds the alternative. A personal subscription used on a work machine sits outside every contractual protection you hold, which is the practical link between this page and shadow AI: the licensing exposure created by a personal account is not merely unmanaged, it is uninsured.
Filter enforcement is second, and the word doing the work is enforcement. Set the policy at organisation level so it cannot be overridden per user, apply it to every organisation rather than the main one, alert on changes to the setting, and export its state on a cadence. The pattern is the same one that makes any configuration control testable: capture the setting at more than one point in the period and keep the audit log that proves it was not relaxed in between.
Dependency provenance is third and pays best. Publish a licence policy as code — permitted, prohibited, requires review — differentiated by how you deliver the artefact, then enforce it in CI so a non-compliant dependency fails the build rather than generating a report. Resolve installs through an internal proxy so a hallucinated or newly registered package cannot be pulled from a public registry on first use. Research presented at USENIX Security in 2025 found that a substantial minority of package names suggested by models did not exist at all, with rates varying widely by model and the same fabricated names recurring across attempts — recurrence being precisely what makes pre-registration worth an attacker’s time. The rate will keep moving. The control should not depend on the rate.
A bill of materials is fourth, and it is worth being precise about what it does. Generate an SBOM at build in SPDX or CycloneDX and retain it with the release. It answers the dependency question completely and the authorship question not at all: the recognised minimum elements — supplier, component, version, unique identifiers, dependency relationships, the author of the SBOM data and a timestamp — contain no field for whether a component was written with model assistance. Related work exists on describing AI systems themselves, including the AI and dataset profiles added in SPDX 3.0, but that documents models and datasets as components rather than recording that a human used an assistant to write a function. Give the SBOM for the dependency question and the provenance record for the authorship question.
The review gate is last on this list and first in importance, because it is the only control that engages with derivation. Branch protection requiring an approving review from somebody other than the author is already your change-management control. Nothing about AI assistance requires a second, parallel process. What changes is throughput and reviewer attention, which is a separate discipline covered under agent governance — and the honest position is that a reviewer will catch a recognisable implementation only if they happen to recognise it.
A question in March 2027 about a commit from 2025
An illustrative composite, not a client. Read the middle column first — the distance between the second row and the fourth is the entire lesson.
| Rollout | 4 February 2025 | A forty-engineer B2B SaaS company enables an AI coding assistant across its main GitHub organisation on a business tier, with the public-code filter set to block. The setting is switched on once. Nobody exports it, and nobody writes down that it exists. |
| The drift | 12 June – 1 July 2025 | A second GitHub organisation is created for a spun-out data project. It inherits default settings, so blocking is off for nineteen days across roughly four hundred commits. Nobody notices, because the policy lived in one console and the new organisation was a different console. |
| A partial fix | September 2025 | Dependency licence scanning is added to CI with an allow list after a customer questionnaire asks about copyleft. Three packages are replaced. The snippet-level question is not addressed, because nobody has asked it yet. |
| The question | 11 March 2027 | In acquisition diligence, buyer’s counsel asks three things: (1) which repositories contain AI-assisted code and over what period, (2) which tool and configuration produced it, evidenced, and (3) what licence obligations attach to the shipped artefact and how they are discharged. |
| The reconstruction | March – April 2027 | Question three is answered in a day from build artefacts. Questions one and two take three weeks: the audit log retained ninety days, so 2025 configuration state cannot be evidenced at all, and the nineteen-day gap is found by an engineer reading organisation creation dates. The finding lands as a holdback, not a deal-breaker. |
| The two changes | May 2027 | A quarterly export of every organisation’s policy state into the evidence store, and a CI check requiring an assistance trailer on the protected branches. Both take under a week. Neither would have been of any use applied in March 2027, which is the whole point. |
Nothing in this sequence is a failure of judgement. The company enabled the right setting on the right day, added dependency scanning before a customer forced it, and had a review gate throughout. It still could not answer two of three questions, for one reason: every artefact that would have answered them was held in a system that retained ninety days, while the question arrived at twenty-five months.
The nineteen-day gap is the second lesson, and it is the more common one. It was not caused by anyone disabling a control. It was caused by a new scope appearing — a second organisation, created for a legitimate reason, inheriting platform defaults rather than company policy. Any control expressed as a setting has this property. The countermeasure is not vigilance but a periodic reconciliation: list every organisation, every repository and every seat, and compare the actual setting against the policy on a stated cadence.
The control you can evidence is the retention window, not the setting. A setting you cannot prove was on is a setting the record says nothing about.
What an assessor actually requests
Two different assessors reach this subject from two directions. A licensed CPA firm performing a SOC 2 examination under AT-C 205 encounters AI-assisted development inside your change-management and vendor controls, and inside the system description it evaluates against the description criteria in DC section 200. A certification body auditor assessing an ISO/IEC 42001 management system encounters it as an assessed risk with a treatment you claimed in your Statement of Applicability. Both open the same way — with a population, not a screenshot.
| The request | What satisfies it | What gets rejected |
|---|---|---|
| Define the population of repositories in scope | A system-generated inventory of every repository in the organisation, with the AI-assistance attribute, the tool permitted, and the date the attribute was set — produced before any sample is drawn. | A hand-maintained list. An inventory that omits forks, archived repositories and organisations created for a single project, which is exactly where inherited defaults live. |
| Show the configuration held for the whole period | The organisation policy export at two or more dates inside the period, plus the platform audit log of changes to that policy showing it was not relaxed in between. | A screenshot of the current setting. A dashboard describing today’s posture offered as evidence about a period that closed months ago. |
| Produce the policy and its approval | A dated, approved policy naming permitted tools, permitted tiers, required settings, prohibited repositories and the exception route, with an owner and a review date inside the period. | A wiki page with no approver and no date. A policy that prohibits something the platform is currently configured to allow — your own document becomes the finding. |
| Sample commit-level provenance | For each selection, the commit with its trailer, the pull request showing an approver distinct from the author, and the CI run that enforced the check. | A merge with no reviewer. A trailer applied retrospectively across a range of commits, which is visible in the metadata and turns a records gap into a credibility problem. |
| Evidence the dependency licence control | The licence policy as code, the CI job that enforces it, the build-time bill of materials for a released version, and the exception register with approvals. | A scanner report with no policy behind it. An exception list with entries but no approver, or approvals granted by the engineer who raised them. |
| Evidence the supplier flow-down | The contract clause naming AI assistance, the supplier’s completed due-diligence response, and at least one instance of the disclosure right being exercised. | A generic warranty of originality with no AI-specific question asked. A questionnaire sent but never returned, filed as though it were an answer. |
| Evidence the indemnity conditions record | A dated register of covered products, conditions in force, the evidence held that each was met, and the date the vendor terms were last reviewed. | A link to a vendor marketing page. A statement that the company is covered, with nothing behind it that survives being asked twice. |
The vocabulary is worth borrowing from the SOC 2 side even if a SOC 2 is not what you are pursuing. Anything you export is information produced by the entity, and its completeness and accuracy is established before it is used — which is why an auditor wants the query, the filter, the date range and the record count visible rather than the tidy result alone. The same discipline applied to a repository inventory turns it from a claim into evidence, and the habits transfer directly from SOC 2 evidence collection.
One trap specific to this subject. Where your system description or your management assertion says something about how software is developed, and AI assistance is part of how software is developed, the description has to be accurate. A description written before assistants were adopted and never revised is not merely stale — it is a statement by management that no longer matches the system, which is a materially different problem from a missing control.
An ISO 42001-style treatment for IP risk
ISO/IEC 42001:2023 is an AI management system standard, certifiable by an accredited certification body. Its value here is not that it contains a control about code provenance — it does not. Its value is the shape it imposes: an identified risk, an assessment under clause 6.1.2, a treatment decision under 6.1.3, applicable controls justified in a Statement of Applicability, and monitoring under clause 9. Written that way, “we turned the filter on” becomes a treatment with an owner, a residual risk, a review date and evidence, which is what an auditor and an acquirer are both actually asking for.
The Annex A controls that carry it are the life-cycle and accountability ones rather than anything IP-specific: an AI policy aligned with your other policies, AI roles and responsibilities, requirements and specification for AI systems, technical documentation, recording of event logs, processes for responsible use and intended use, and — for the supplier dimension — the allocation of responsibilities across third parties and the controls for suppliers. Annex A does contain a data provenance control at A.7.5, but read it for what it is: it governs the provenance of data used in AI systems, not the provenance of code an assistant helped a human write. Borrow the discipline, but do not claim the control.
The intellectual-property controls themselves sit in ISO/IEC 27001:2022, which is one reason an integrated AIMS and ISMS is the efficient shape. Annex A 5.32 requires appropriate procedures to protect intellectual property rights, and the standard’s treatment of the term expressly contemplates source-code licences and software copyright. A 8.28 covers secure coding and A 8.30 covers outsourced development, where the guidance already points at licensing agreements addressing code ownership. If you hold ISO 27001, you have a control that already obliges you to do most of this. What is new is the mechanism creating the risk, not the obligation.
Two boundaries to keep straight. On the EU AI Act, the copyright obligation in Article 53 — a policy to comply with Union copyright law including the reservation of rights under the text-and-data-mining provisions, and a sufficiently detailed public summary of training content — sits on providers of general-purpose AI models, applicable from 2 August 2025. It is not an obligation on you as a deployer. What it gives you is a due-diligence question with a documented answer behind it: ask for the training-content summary and the copyright policy, and keep the response. And on SOC 2, there is no trust services criterion for intellectual property. It reaches the examination only through change management, through vendor and business-partner controls where the assistant is the vendor, and through the accuracy of your own description. Saying so plainly is more credible than implying a SOC 2 report answers a licensing question.
A note on roles, since this page touches both regimes. Tranquility Cybersecurity advises, implements and coordinates: risk assessments, control design, policy and evidence, readiness. ISO 42001 certificates are issued by accredited certification bodies and SOC reports by licensed CPA firms. The firm that designs or operates your controls cannot be the one that examines them.
The edge cases that generate the questions
The map above covers the common eighty per cent. These are the situations that produce genuine disagreement between an engineering organisation, its counsel and its customers.
The model reproduces your own code
A suggestion that echoes a distinctive internal implementation is not a licensing problem — it is a confidentiality one, and it belongs to a different control set. The governance question is whether your inputs are retained or used for training on the tier you hold, which is a contract term to confirm in current vendor documentation rather than an assumption to carry. Where the answer matters commercially, it is worth the procurement cycle to get it in writing on the tier you actually bought, not the tier on the pricing page.
Permissive licences are the ones you breach
Teams brace for copyleft and get caught by attribution. MIT, BSD and Apache-2.0 permit almost everything and require notice, so the breach is not that you used the code but that you shipped it without preserving the licence text. A blocked suggestion is a non-event. An accepted match under annotate mode creates an obligation that only reaches your notices file if somebody records it deliberately, because the snippet never enters the dependency graph the notices file is generated from.
Contributing back out
Where your engineers contribute upstream, most projects require a Developer Certificate of Origin sign-off or a contributor licence agreement. Both ask an individual to certify something about the origin of the contribution. A developer who cannot say what produced the change is being asked to certify a thing they do not know. This is one of the few places where a per-commit record has an operational use rather than an evidentiary one, and it is worth telling contributors what your convention is before they sign.
"No AI-generated code" clauses
These are appearing in enterprise and public-sector agreements, sometimes drafted broadly enough to catch autocomplete. Before negotiating the clause, establish whether you could answer it: an absolute prohibition you cannot evidence is worse than a disclosure obligation you can. The usual landing zone is a commitment about specific repositories, specific configuration and disclosure on request — which is only negotiable if the repository-level scope record already exists.
Self-hosted and open-weights models
Running a model on your own infrastructure removes the data-egress question and changes nothing about provenance. The training corpus is still not yours to inspect, the licence attached to the weights may restrict fields of use or downstream distribution, and vendor indemnities generally do not follow a model you host yourself. Read the model licence with the same attention as the service terms. It is frequently the more restrictive of the two.
Patents and inventorship
If AI-assisted work reaches something you want to patent, inventorship requires a significant contribution by a natural person. This is live doctrine rather than settled ground — inventorship guidance for AI-assisted inventions has already been issued and superseded in the United States, which is precisely why the record you keep should carry a date and a review owner rather than a conclusion.
The retrospective question
Almost every organisation adopting assistants now has a period behind it with no records. Backfilling is not available and inventing it is worse than admitting the gap. The defensible position is a stated start date for the control, an honest description of the preceding period, and a dependency-level answer for the whole estate — since the bill of materials can be generated retrospectively from build artefacts even where the commit-level record cannot.
What buyers ask and the answer
These arrive in security questionnaires, in diligence and increasingly in contract negotiation. The difference between a good answer and a defensive one is, as always, specificity.
"Do you use AI to write code?"
Answer with scope rather than yes or no, because the unqualified yes invites four follow-ups and the unqualified no is usually untrue. The useful answer names which tools are permitted, on which commercial tier, with which settings enforced at organisation level, in which repositories, and what review gate every change passes regardless of origin. A buyer who receives that generally moves on to the review gate, which is the question they actually care about.
"Your filter is on, so the code is clean."
This one usually comes from your own side of the table, and it is worth correcting internally before a buyer does it for you. A public-code filter compares generated text against one index above a length threshold at the moment of suggestion. It cannot see code outside that index, it does not evaluate derivation that is not literal, and it says nothing about what happened to the suggestion after it was accepted. It reduces one specific exposure well. It is not an assurance about the codebase.
"Show us an SBOM that covers AI-generated code."
A bill of materials records third-party components — supplier, component, version, identifiers, dependency relationships, who produced the document and when. None of the recognised minimum elements record whether a component was written with model assistance, because an SBOM answers a different question. Say so plainly, provide the SBOM for the dependency question, and provide the repository-level provenance record for the authorship question. Two artefacts, two questions. Conflating them produces a document that satisfies neither.
"Who owns the code the model wrote?"
Two separate questions live inside that one. Between you and the vendor, output ownership is a contract term and enterprise terms commonly assign whatever rights the vendor has to the customer — confirm the tier you hold. Under copyright law, material generated without sufficient human authorship may attract no protection at all, which is a limit on what you can assert rather than a claim someone else has. Where a work mixes human and generated material, only the human contribution is in play, and registration in the United States carries a disclosure obligation once the generated portion is more than de minimis.
"Your vendor indemnifies you, so we are covered."
No. A vendor commitment runs to the customer that holds the contract, not down the chain to that customer’s customers. Your exposure to your buyer is governed entirely by your agreement with them, and the vendor commitment is a recovery you may or may not have behind it. This distinction is worth making explicitly during negotiation, because a buyer relying on a mistaken flow-through has not priced the risk they are actually holding.
"What happens if the litigation goes the other way?"
The honest answer is that the outcome is not knowable and that your position should not depend on it. The material dispute in this area has narrowed to contract-based open-source licence claims, with an appellate question outstanding on whether a copyright-management-information claim requires identical copying. What changes with the ruling is the size of the surface. What does not change is that an organisation able to describe its estate, its configuration history and its dependency obligations can answer a demand letter in days, and an organisation that cannot will spend weeks establishing facts about itself.
"We require that no AI-generated code enters our deliverables."
Ask what the clause is protecting against, because the drafting is often broader than the intent — several drafts we have seen would prohibit autocomplete. If the concern is third-party code, the answerable commitment is about filter configuration, dependency licence policy and review. If the concern is quality, it is about the review gate. If the concern is genuinely categorical, establish whether you can evidence compliance before you agree to it. An unevidenced absolute is a breach waiting to be discovered by someone else.
Frequently Asked Questions
What does "block suggestions matching public code" actually do?
Does turning the filter on mean our code is free of licensing risk?
Why is the recommended dependency a bigger risk than the generated snippet?
How do we record provenance without monitoring developers?
Are vendor IP indemnities worth relying on?
Does an SBOM cover AI-generated code?
Who owns code generated by an AI assistant?
How does this map to ISO 42001?
Is AI-assisted development a SOC 2 issue?
What should we do about the period before we had any of this?
Related Reading
Governing Coding Agents
Claude Code, Cursor and Copilot assessed by capability graph rather than product label.
Read moreReviewing AI-Generated Code
Same security outcome, different failure modes — and the review gate that has to stay meaningful at volume.
Read moreShould a Coding Agent Deploy to Production?
Separating code-generation rights from deployment authority, even when one human holds both.
Read moreThe Ten Questions That Govern Any AI Agent
Scope, ownership, data, capability, identity, oversight, failure detection, evidence, reassessment and how to stop it.
Read moreISO 42001 Knowledge Hub
AIMS controls, EU AI Act mapping, risk assessment and guides.
Read moreISO 42001 (AI Management)
The world's first AI management system standard, for AI builders.
Read more