Skip to content
Insights · Engineering

Name every host the build calls

List every host the client's production process calls, say what leaves, and stop one host without the person who added it. A license is not a host.

Scroll
EngineeringOct 20, 202611 min readBy Salman Naqvi, Founder & CEO
Name every host the build calls

A client's production process calls other people's machines. Tonight, three proofs, in a system the agency or the client can open. List every external host that process calls, including one nobody typed into a file you were shown. For each host, say what leaves the network, or write that you cannot tell. Stop one host and show that the rest of the product still runs, without the person who added the call. If any of the three is "the partner knows," the list does not exist yet. A sentence you cannot check is not an inventory.

This is the list of machines the running build talks to. It is not the legal text of a dependency. Name the license the build added asks whether a package's license lets a copy leave the building. A dependency can be a license you have read and still place a call the license file does not mention. A host can be absent from the package file and still receive the client's rows at runtime. It is not the hour before a new tool is allowed to read the client's text. Before a tool reads the client's text is that gate: the account, the terms, and an off switch, before the first document is sent. This page is the inventory after something is already calling out, including calls nobody framed as a new tool. It is not the credential. Revoke the key they minted is one secret: list it, revoke it, prove the old value fails. A host can keep receiving traffic on a different secret after you have rotated the one you found. It is not the diff. Read their change before it ships is whether you opened the change. A diff can add a hostname. It cannot show you the hostname a library computes at runtime, unless you run the process.

The catalogue that already treats a missing name as a missing control is an inventory control, not a legal opinion. NIST SP 800-53 Rev. 5, CM-8, tells the organization to develop and document an inventory of system components that "accurately reflects the system," "includes all components within the system," does not include duplicate accounting of components or components assigned to any other system, is at the granularity deemed necessary for tracking and reporting, and includes the information the organization defines as necessary for accountability. The organization reviews and updates that inventory at a frequency it defines (NIST, SP 800-53 Rev. 5, September 2020, updated 10 December 2020, CM-8). The discussion says what accountability information includes: the system name, software owners, software version numbers, hardware inventory specifications, software license information, and, for networked components, "the machine names and network addresses across all implemented protocols," with IPv4 and IPv6 as the examples. License information, in that sentence, is a field on a component. It is not the analysis of whether the license allows you to ship. That analysis is the neighboring article. The field is how you notice the component exists.

The blanks are the point, and they are yours to fill. "Organization-defined" means the agency writes the frequency and the fields. NIST does not name your client's host, and it does not pretend a commercial subcontract is a federal system. What transfers is the shape. An inventory that accurately reflects the system includes the host the process calls, not only the host a diagram drew. A package file is a list of libraries. It becomes an inventory of networked components only where you have also recorded the addresses those libraries contact, or you have written that you watched the process and these were the addresses. CM-8(1) is the update rule that keeps the page from rotting: update the inventory as part of installations, removals, and system updates. A host added in a console at midnight, and never written down, is a component the inventory no longer reflects. Duplicate accounting is the other failure. The same vendor reached by two hostnames is one company if you say so, and two lines if you pretend not to notice. Either way you write the identifier. You do not leave the second name off because the first name felt like enough.

There is a measured version of "the page calls machines you did not think were in the page," and it is old, and it does not agree with itself. Timothy Libert, International Journal of Communication, 2015, crawled the homepages of the Alexa list in May 2014. The list he downloaded had 990,022 websites. 950,489 were successfully analyzed, which he prints as 96%, and 4% failed to load. The prose then says the number of pages that initiated requests to third parties was 832,349, "representing 88% of the total." Table 1, row "All," prints N = 950,489 and 86.9 in the column "percent with third-party element." 832,349 divided by 950,489 is not 88, and it is not 86.9. This article does not decide which of those presentations is the one the paper would stand behind, and it does not invent a third percentage to split the difference. Quote the prose for the 832,349. Quote the table for the 86.9. Do not multiply either into a count of agency repositories.

The average has the same problem, one column over. The prose says sites that do make third-party requests "contact 9.47 distinct domains on average." Table 1 prints 9.47 on the All row, whose N is 950,489, a row that also contains sites with no third-party element. If 9.47 is only among sites that made such a request, the table header does not say so. If 9.47 is among all analyzed sites, the prose's "sites that do make requests" is a different denominator. Do not cite 9.47 as both. The cells that do match across prose and table are the ones to use when you need a cell: 62.9% of sites spawn a third-party cookie, and 82.99% include third-party JavaScript. Those are shares of sites in that crawl. A different cut, of the top requested element types, says JavaScript was 36% of those elements. 36% is not 82.99%. One is a share of element requests in a categorized top slice. The other is a share of sites. The most requested image, a one-pixel Google Analytics file, is on 46.02% of sites. The paper says Alexa's toolbar is not a random sample of internet users, and that using the list is a common practice in the absence of a better one. The population is homepages of a popularity list, in May 2014, loaded once. It is not a SaaS backend, not a production log from this year, and not a probability that the next pull request adds a host (Libert, Exposing the Hidden Web).

What you are allowed to copy is the method, not the rate. He loaded the page and recorded the requests the page actually made, including requests to domains the first-party HTML did not look like it contained. A privacy policy and a package file are the HTML in that metaphor. The production log is the crawl. 88% and 86.9 are two presentations of a 2014 homepage crawl. Neither is the share of your client's outbound calls that a human has named. The Web Almanac's later counts of third parties on the public web are a different study, on a different corpus, and they are not a second measurement of this table. Do not average a 2014 crawl with a 2024 one and call the result your inventory.

Walk the three proofs against the process that is actually running, not against the diagram. Open a login the agency or the client administers. Capture the outbound calls for a path a real user can hit: sign-in, the question the product answers, the webhook it sends, the error it reports. Write the host, the port if it is not the obvious one, and the field that left — an email, a document, a token, a stack trace. Include the host a dependency contacts that nobody typed, which you will only see by running it. Include the host that appears only in production configuration and not in the repository. If two names resolve to one company, say so, and keep both names, because CM-8's duplicate-accounting warning is about not knowing which system a component belongs to, not about hiding the second string. If you cannot tell what a host receives, the line is "we cannot say," and that host does not stay on a list you are willing to hand the client as complete. Ambiguous is a result.

Then stop one host without stopping the product, and without the person who added it. A configuration flag, a block on that name, a credential you can revoke for that vendor only. Run the path again. The call you blocked does not leave. A different path, one that should not have depended on that host, still works. If the only way to stop the host is to unplug the feature the client is paying for, you do not have a switch. You have a coupling, and the inventory's job is to make that coupling visible before the client discovers it in an outage. What access to give a subcontractor is who may hold the login that can perform this stop. The host list is the page that login is used to produce. A partner who can edit the list and cannot be removed from the account that enforces it has not given you CM-8. They have given you a document they can revise after you look away.

What you refuse, even when the call looks harmless. A hostname that appears only in a slide. A "temporary" request to a personal tunnel, left in the production environment after the demo. An analytics host justified by a marketing pixel, receiving the same identifier the support tool uses, with no line for what else that identifier unlocks. A model endpoint in a region or on an account you cannot open, recorded as "the AI" rather than as a name. The account you already decided to keep, and the keys inside it, are a different article. The license of the library that happens to make the call is a different article. Tonight's object is the address. If the address is missing, the license and the key do not fill the blank.

What a host you can re-open looks like is a name that survives the person who typed it. Inflectiv Helios is a multi-assistant platform we built under our own name, with prompt monitoring on a dashboard and a services layer that reaches Google Calendar and Meet. It is not a white-label engagement, and it is not a host inventory. Nothing in that description is a headcount, a duration, or a result figure. The shape is the point: a product that calls another company's API has an address you can write down after the editor is closed. Engagements of the agency kind sit under the same non-disclosure we would sign with you, so they are not on this site as case studies. A partner willing to leave a client's traffic pointed at a laptop tunnel in order to hit a date will leave the next client's traffic there too.

There is a version of the request where hiring a review is the wrong purchase. The work is not sold, so there is no client's process to watch. That is a sales question. The client has asked to meet the people who would add the call. That is a disclosure decision, and it is not a reason to skip the log or to pretend the host is yours. The room only has a slide. There is no process to capture, and a review of a picture is a meeting. The buyer only wants a template of an inventory, with no system behind it. A blank form is not CM-8. Or the buyer wants a legal opinion on whether the call is a transfer, a sale, or a processor relationship. The proofs here are a list, a sentence about what leaves, and a stop. They are not that opinion.

Before you tell the client you know where their data goes, read the log. Write every external host the production process calls. Write what leaves, or write that you cannot tell. Stop one host without the author and without the rest of the product. A white label software development partner that expects this will put the capture in an account you hold, and will update the page when a host is added or removed, because that is the same work as knowing what you shipped. Where the next slice is a single capability, an AI integration sprint can include the host list as the definition of done, next to the acceptance sentence. The result you will later be asked to stand behind, if a host changes what the system returns, is the same discipline as AI evaluation and observability: a case you can re-run after the call is connected, on inputs you froze before anyone could tune to the new address. 86.9 and 88 are two presentations of one 2014 crawl. 9.47 is an average whose denominator the prose and the table do not state the same way. None of them is the number of hosts in this build, and none of them belongs in the client's security answer unless you also attach the list you actually captured.

Find this useful? Tell Google to show you more of it.

Let's put AI to work in your business.

A 30-minute call. You bring the workflow or the roadmap — we'll tell you what's feasible, what it costs, and what we'd build first.

Book a call→