Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d978994b27 | ||
|
|
7e89ebfaba | ||
|
|
f5dcb8f10a | ||
|
|
a9d6f0951e | ||
|
|
3fb7fafd02 |
+42
-3
@@ -2,13 +2,52 @@
|
|||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
Sandwich Hime follows semantic versioning after final v1. Compiler and nested
|
Sandwich Hime follows semantic versioning from v1.0.0. Compiler and nested
|
||||||
runtime releases are versioned independently and listed together when they form
|
runtime releases are versioned independently and listed together when they form
|
||||||
one coordinated release.
|
one coordinated release.
|
||||||
|
|
||||||
## Unreleased
|
## v1.0.0 — 2026-09-09
|
||||||
|
|
||||||
No changes have been accepted after the first v1 release candidate.
|
The coordinated compiler `v1.0.0` and runtime `sando/v1.0.0` release retains
|
||||||
|
runtime ABI `sando.v1`. Canonical Gitea tags and release announcements establish
|
||||||
|
version and artifact availability.
|
||||||
|
|
||||||
|
### Stable release contract
|
||||||
|
|
||||||
|
- Apply the v1 compatibility policy to the source syntax, generated public API,
|
||||||
|
runtime API, CLI, diagnostics, and schemas on the maintained Linux/amd64 and
|
||||||
|
Apple Silicon macOS/arm64 targets.
|
||||||
|
- Promote runtime-first installation instructions to the exact final versions.
|
||||||
|
- Retain best-effort security fixes for the latest stable v1 patch, without an
|
||||||
|
SLA, independent-audit claim, or expanded platform support promise.
|
||||||
|
|
||||||
|
### Publication tooling
|
||||||
|
|
||||||
|
- Reject references to excluded operator documentation in exported Markdown,
|
||||||
|
with positive and negative regression fixtures.
|
||||||
|
- Keep operator/archive continuity out of the public roadmap and clarify
|
||||||
|
stable public publication history, immutable version tags and separate
|
||||||
|
private development storage.
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- Finalize the version 1.0 prospective individual CLA with recorded-license
|
||||||
|
grants, contributor safeguards, reciprocal stewardship commitments, and
|
||||||
|
explicit paired contributor/Steward acceptance for future contributions.
|
||||||
|
This does not assert that any contributor has signed, apply retroactively,
|
||||||
|
assign copyright, or require signatures to use or learn from the project.
|
||||||
|
Document commercial freedom and the compiler/runtime/application boundary
|
||||||
|
without changing the software licenses.
|
||||||
|
- Clarify Sandwich Hime as the primary identity and Hime-san as its tool name.
|
||||||
|
- Retain DCO sign-off and existing output-permission records alongside the
|
||||||
|
prospective CLA process; preserve prior contributions under their recorded
|
||||||
|
terms.
|
||||||
|
- Record the maintainer's explicit v1.0.0 deferral of offline restoration and
|
||||||
|
independent second-person recovery without representing those drills as done.
|
||||||
|
|
||||||
|
- Give the installable `himesan` command its own Go package overview covering
|
||||||
|
installation, generation, read-only checking, local development, editor
|
||||||
|
integration, and machine-readable operational contracts.
|
||||||
|
|
||||||
## v1.0.0-rc.1 — 2026-08-24
|
## v1.0.0-rc.1 — 2026-08-24
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,212 @@
|
|||||||
<!-- SPDX-License-Identifier: AGPL-3.0-only -->
|
<!-- SPDX-License-Identifier: AGPL-3.0-only -->
|
||||||
|
|
||||||
# Individual contribution agreement — counsel-review draft
|
# Individual contribution and stewardship agreement
|
||||||
|
|
||||||
**This draft is not active, is not offered for signature, and creates no rights or obligations. Public pre-1.0 contributions use DCO 1.1 instead.**
|
**Version 1.0 — prospective contribution terms.** This version takes effect for
|
||||||
|
new contribution intake when first published in the canonical public repository.
|
||||||
|
An individual agreement is formed only through the explicit contributor and
|
||||||
|
Steward acceptance in section 9. Existing contributions remain under their
|
||||||
|
recorded licenses, DCO sign-offs and output permissions; publication does not
|
||||||
|
create retroactive acceptance. Nobody must sign this agreement to learn, install,
|
||||||
|
use or build applications with Sandwich Hime.
|
||||||
|
|
||||||
The intended agreement preserves contributor ownership. For each contribution, the contributor represents that they have the right to submit it and grants the project and recipients a perpetual, worldwide, non-exclusive, royalty-free copyright license to use, reproduce, modify, distribute, publicly perform, publicly display, and sublicense the contribution under the license identified by the contributed file.
|
Purpose: keep the shared project available for lawful use, study, improvement
|
||||||
|
and commercial work, without collecting contributors' ownership or giving
|
||||||
|
official stewards a private route around the project's copyleft. The practical
|
||||||
|
scope and practical limits are in
|
||||||
|
[Licensing intent](docs/LICENSING_INTENT.md).
|
||||||
|
|
||||||
The intended patent grant covers patent claims the contributor can license that are necessarily infringed by their contribution alone or in combination with the project as submitted. Patent litigation over the contribution terminates the patent grant to the extent counsel determines lawful and appropriate.
|
## 1. Parties and contribution scope
|
||||||
|
|
||||||
The intended agreement requires no copyright assignment. For AGPL-covered compiler contributions, it is not intended to grant a separate general right to proprietary-relicense contributor code; this does not restrict permissions already granted by a file's license, including Apache-2.0 or 0BSD. Emitted compiler scaffolding would need the narrow additional permission recorded in `OUTPUT_EXCEPTION.md`. The agreement does not promise that a contribution will be accepted or retained.
|
The parties are the individual identified in the acceptance record ("you") and
|
||||||
|
Cole Speelman, acting in his individual capacity as maintainer of Sandwich
|
||||||
|
Hime ("the Steward"). Sandwich Hime is the project name, not a separate legal
|
||||||
|
entity. An organization does not become a party merely because you work for it.
|
||||||
|
|
||||||
The contributor represents that disclosed material AI assistance was reviewed by a responsible human, that the human can make the same provenance and rights representations, and that no AI system is presented as the legal contributor.
|
A "Contribution" is material you intentionally submit for inclusion in this
|
||||||
|
repository after accepting this agreement, identified by a patch, commit or
|
||||||
|
pull request in the contribution record. Ordinary discussion, support requests,
|
||||||
|
confidential security reports, and material marked "not a contribution" are
|
||||||
|
not submissions under this agreement. Earlier work requires a separate,
|
||||||
|
explicit identification and acceptance; nothing applies retroactively by default.
|
||||||
|
|
||||||
If the project later considers activating a contribution agreement, qualified counsel review should address parties, definitions, governing law, notice, entity contributions, employer authorization, moral-rights treatment, patent language, and signature mechanics. Any active agreement would be announced prospectively. Until then, repository DCO sign-off is the operative contribution certification and does not activate this draft.
|
The "Recorded License" is the file license and any explicit additional
|
||||||
|
permission identified for that Contribution at submission, with the applicable
|
||||||
|
repository revision retained. The current map is [LICENSES.md](LICENSES.md):
|
||||||
|
AGPL-3.0-only for compiler/project material and Apache-2.0 for the nested
|
||||||
|
runtime. Existing third-party material keeps its own terms. A later edit to
|
||||||
|
the map does not change a Contribution's Recorded License.
|
||||||
|
|
||||||
|
## 2. Your ownership and the public grant
|
||||||
|
|
||||||
|
You retain ownership of rights you hold. You license your Contribution to the
|
||||||
|
Steward and recipients under its Recorded License, including that license's
|
||||||
|
copyright and patent provisions, conditions, duration, termination and cure
|
||||||
|
rules. No copyright assignment, exclusive license or agency is created.
|
||||||
|
|
||||||
|
There is no additional general grant to sublicense or relicense your work
|
||||||
|
under arbitrary terms. AGPL recipients obtain their rights under the AGPL;
|
||||||
|
this agreement is not an alternate proprietary license. Permissions already
|
||||||
|
granted by Apache-2.0 or another Recorded License are not narrowed here.
|
||||||
|
|
||||||
|
You remain free to use or license rights you actually own elsewhere. You may
|
||||||
|
stop making future contributions at any time. That does not withdraw rights
|
||||||
|
already granted to recipients who comply with the applicable license. No
|
||||||
|
contribution fee, royalty, revenue share or exclusivity is required.
|
||||||
|
|
||||||
|
## 3. Generated-output permission is specific
|
||||||
|
|
||||||
|
Contributor-owned scaffolding intended to be emitted into generated output
|
||||||
|
requires your explicit `Himesan-Output-Permission: v1.0` trailer on the signed-off
|
||||||
|
submission, as described in [OUTPUT_EXCEPTION.md](OUTPUT_EXCEPTION.md). That
|
||||||
|
record identifies the affected material and retains the exact permission text
|
||||||
|
and version. This is an additional copyright permission, not an additional
|
||||||
|
patent grant.
|
||||||
|
|
||||||
|
General CLA acceptance and DCO sign-off do not supply this separate grant.
|
||||||
|
Without it, the Steward must reject or redesign the contribution so that your
|
||||||
|
unpermitted material is not emitted. The grant does not license the compiler
|
||||||
|
as a whole permissively or give rights in material you do not own.
|
||||||
|
|
||||||
|
## 4. Authority, provenance and patents
|
||||||
|
|
||||||
|
You represent that you own, or have sufficient authorization to submit and
|
||||||
|
license, the Contribution under its Recorded License. Where an employer or
|
||||||
|
another rights holder has an interest, obtain the necessary permission before
|
||||||
|
submission. If that authority is uncertain, disclose the issue and withhold
|
||||||
|
the affected material; your signature cannot grant someone else's rights.
|
||||||
|
|
||||||
|
Identify incorporated third-party material, its source and known restrictions.
|
||||||
|
Disclose material AI assistance under the revision of
|
||||||
|
[AI_CONTRIBUTIONS.md](AI_CONTRIBUTIONS.md) identified in your acceptance record;
|
||||||
|
a responsible human must review the submission and make the representations.
|
||||||
|
Later policy edits do not amend these contractual representations without
|
||||||
|
express agreement under section 8.
|
||||||
|
Do not send confidential prompts, personal data or secrets as provenance.
|
||||||
|
Notify the Steward if you later learn a material representation was inaccurate.
|
||||||
|
|
||||||
|
The patent grant is the one in the Recorded License, including AGPL section 11
|
||||||
|
or Apache-2.0 section 3 as applicable. This agreement adds no patent assignment,
|
||||||
|
new retaliation trigger, or guarantee that no third party holds a patent. It
|
||||||
|
does not purport to license claims outside your authority.
|
||||||
|
|
||||||
|
## 5. Steward commitments: preserve the common project
|
||||||
|
|
||||||
|
In accepting Contributions under this agreement, the Steward undertakes to:
|
||||||
|
|
||||||
|
- Publish accepted material included in an official public release under its
|
||||||
|
Recorded License, with source available as that license requires. The
|
||||||
|
agreement does not promise immediate publication of every submitted patch.
|
||||||
|
- Preserve contributor copyright notices, required attribution, license and
|
||||||
|
permission records. Public squashes must not misrepresent authorship; keep
|
||||||
|
the original signed contribution record without publishing private intake data.
|
||||||
|
- Not use this agreement to remove copyleft from contributor-owned AGPL code,
|
||||||
|
issue an exclusive or proprietary license for that code, or sell a paid
|
||||||
|
exception to its source-sharing duties. The expressly recorded output
|
||||||
|
permission remains the narrow exception already described above.
|
||||||
|
- Not seek a private side agreement to evade that official stewardship
|
||||||
|
commitment. This is a promise about the Steward's official use of accepted
|
||||||
|
material, not a restriction on a contributor's independent use of their work.
|
||||||
|
- Give no sponsor, purchaser or voting majority authority through this
|
||||||
|
agreement to acquire contributor ownership or override existing grants.
|
||||||
|
- Before voluntarily transferring official stewardship, obtain the successor's
|
||||||
|
written assumption of these stewardship obligations. Delegating maintenance
|
||||||
|
does not itself release the Steward from contractual obligations or transfer
|
||||||
|
contributor copyrights.
|
||||||
|
|
||||||
|
These are commitments by the contracting Steward, not new downstream license
|
||||||
|
conditions. They do not bind unrelated forks or non-signing third parties,
|
||||||
|
restrict permissive-license freedoms, or confer authority over rights that
|
||||||
|
another person owns. Retained public licenses remain available independently
|
||||||
|
of changes in maintainers, sponsorship or repository ownership.
|
||||||
|
|
||||||
|
## 6. Contributor and maintainer safeguards
|
||||||
|
|
||||||
|
Contributions are voluntary. Neither party promises that a patch will be
|
||||||
|
accepted, merged unchanged, maintained indefinitely or kept in every future
|
||||||
|
version. Removing a feature does not revoke licenses already granted.
|
||||||
|
|
||||||
|
No employment, partnership, governance seat, support obligation, indemnity or
|
||||||
|
obligation to fund litigation is created. Warranty disclaimers and liability
|
||||||
|
limits remain those in the Recorded License, subject to mandatory law. You
|
||||||
|
are not asked to certify worldwide freedom from infringement or waive all
|
||||||
|
claims against the Steward.
|
||||||
|
|
||||||
|
No blanket moral-rights waiver is requested. To the extent law permits, you
|
||||||
|
consent to ordinary licensed editing, combination, compilation and distribution
|
||||||
|
of the Contribution, while retaining protection against false attribution or
|
||||||
|
endorsement. Neither party may use the other's name to imply an endorsement
|
||||||
|
that was not given. This is not a power to forbid lawful criticism or forks.
|
||||||
|
|
||||||
|
The Steward may coordinate compliance reports but receives no assignment,
|
||||||
|
power of attorney or assumed standing to litigate another owner's copyright.
|
||||||
|
Separate authority may be necessary for particular enforcement action.
|
||||||
|
|
||||||
|
## 7. Commercial freedom and license limits
|
||||||
|
|
||||||
|
Users may charge for lawful services, support, distribution and applications
|
||||||
|
subject to the relevant software licenses. A complying commercial competitor
|
||||||
|
or independently branded fork does not breach this agreement merely by being
|
||||||
|
successful, and upstream contribution is not mandatory.
|
||||||
|
|
||||||
|
No customer must sign this CLA to use the software. A blanket SaaS prohibition,
|
||||||
|
competition veto, moral-use test or mandatory payment to the project is not
|
||||||
|
added to the AGPL. Network-source duties come from the applicable license;
|
||||||
|
they do not automatically reach applications built with the compiler.
|
||||||
|
|
||||||
|
## 8. Changes, disputes and succession
|
||||||
|
|
||||||
|
Changing this document or the governance policy does not amend an accepted
|
||||||
|
agreement. Any amendment requires the affected parties' express agreement to
|
||||||
|
identified new terms; continued use of the software is not acceptance.
|
||||||
|
Contract disputes do not retract lawful downstream grants or add license
|
||||||
|
termination grounds beyond the relevant software license.
|
||||||
|
|
||||||
|
The proposed governing law is Ontario law and applicable federal Canadian law,
|
||||||
|
without excluding non-waivable rights or remedies available under applicable
|
||||||
|
law. The parties should first try good-faith written resolution where practical;
|
||||||
|
no mandatory arbitration, class-action waiver or bar to urgent relief is added.
|
||||||
|
This agreement makes no guarantee about a particular court's interpretation.
|
||||||
|
|
||||||
|
## 9. Acceptance and minimal records
|
||||||
|
|
||||||
|
Identify version 1.0 using an immutable canonical commit containing this text
|
||||||
|
and the incorporated AI policy, not a moving branch link. The contributor sends
|
||||||
|
the statement below with their name, date and identified contribution through
|
||||||
|
their canonical Gitea account. A public pull-request comment is sufficient if
|
||||||
|
the contributor chooses to make it public. For private acceptance, request a
|
||||||
|
private contact channel from the maintainer before sending personal details.
|
||||||
|
Do not post employer documents, private contact details or identity documents.
|
||||||
|
|
||||||
|
> I agree to the Sandwich Hime Individual contribution and stewardship agreement
|
||||||
|
> version 1.0 and its incorporated AI policy at canonical commit [full commit],
|
||||||
|
> for contribution [pull request or commit]. I intend this statement, sent from
|
||||||
|
> my account and signed with my name and date, as my electronic acceptance.
|
||||||
|
|
||||||
|
The Steward must reply with explicit matching acceptance of the identified
|
||||||
|
agreement and contribution before merging it. Retain both statements, their
|
||||||
|
dates/account identifiers, the exact agreement and policy texts with SHA-256
|
||||||
|
digests, and the contribution's Recorded License and source identifiers.
|
||||||
|
Neither a DCO sign-off, a merge, nor silence substitutes for this exchange.
|
||||||
|
Later contributions need their own acceptance unless both parties expressly
|
||||||
|
include future intentional submissions under that exact agreement version.
|
||||||
|
Every commit still requires DCO sign-off; affected output scaffolding still
|
||||||
|
requires its separate explicit permission.
|
||||||
|
|
||||||
|
Keep private acceptance and any necessary authority records in restricted
|
||||||
|
maintainer storage, not in the public source snapshot. Do not request a home
|
||||||
|
address, government identification or unrelated employer/customer records.
|
||||||
|
The public attribution and sign-offs the contributor intentionally submits are
|
||||||
|
distinct from private intake records. The Steward uses retained records only
|
||||||
|
to administer contributions, document rights and handle related disputes, and
|
||||||
|
does not sell them or repurpose contacts for marketing.
|
||||||
|
|
||||||
|
A contributor may request access, correction or deletion through the same
|
||||||
|
private channel. Retain only records reasonably necessary to substantiate grants
|
||||||
|
still relied upon or meet applicable legal obligations; delete unnecessary
|
||||||
|
copies and explain any retention needed when responding to a request.
|
||||||
|
Withdrawing from future participation does not revoke valid existing grants.
|
||||||
|
If an individual's authority does not cover employer-owned material, do not
|
||||||
|
accept it until the rights holder's authorization is recorded. A separate
|
||||||
|
entity agreement may be needed; this document does not bind an employer by
|
||||||
|
assumption.
|
||||||
|
|||||||
+15
-3
@@ -8,7 +8,19 @@ Repository maintainers may temporarily disable issue or patch intake during the
|
|||||||
pre-1.0 period; do not route around a closed intake channel by sending
|
pre-1.0 period; do not route around a closed intake channel by sending
|
||||||
unsolicited private patches.
|
unsolicited private patches.
|
||||||
|
|
||||||
Public pre-1.0 contributions use Developer Certificate of Origin 1.1 sign-off. The proposed `CLA.md` is an inactive draft, is not a condition of contribution, and creates no contributor or project obligations. If a contribution agreement is ever activated after legal review, the project will announce its prospective terms rather than silently applying the draft.
|
New public contributions use DCO 1.1 sign-off and the prospective
|
||||||
|
[Individual contribution and stewardship agreement, version 1.0](CLA.md).
|
||||||
|
The agreement starts with this version's first canonical publication and binds
|
||||||
|
only people who expressly accept it; no earlier contribution is retroactively
|
||||||
|
covered. [Section 9](CLA.md#9-acceptance-and-minimal-records) gives the short
|
||||||
|
contributor statement and matching maintainer acceptance. A public Gitea
|
||||||
|
pull-request comment can record it, or contributors can request a private
|
||||||
|
channel first. Never post private identity or employer documents.
|
||||||
|
|
||||||
|
The agreement preserves ownership, the existing public licenses and reciprocal
|
||||||
|
official-steward duties. See [Licensing intent](docs/LICENSING_INTENT.md).
|
||||||
|
Learning, downloading, using Hime, and building private or commercial applications
|
||||||
|
require no contribution agreement. Ask ordinary usage questions without signing.
|
||||||
|
|
||||||
For local work:
|
For local work:
|
||||||
|
|
||||||
@@ -20,7 +32,7 @@ go vet ./...
|
|||||||
./scripts/check-licenses.sh
|
./scripts/check-licenses.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Changes require focused tests, stable diagnostics, formatted generated goldens when applicable, documentation for public behavior, and a signed-off commit (`git commit -s`). The sign-off certifies the [DCO](DCO.txt); it is not a copyright assignment or acceptance of the inactive CLA. Do not commit production data, private application fixtures, secrets, build candidates, or developer cache files.
|
Changes require focused tests, stable diagnostics, formatted generated goldens when applicable, documentation for public behavior, and a signed-off commit (`git commit -s`). The sign-off certifies the [DCO](DCO.txt); it is not a copyright assignment or a substitute for the separate agreement acceptance. Do not commit production data, private application fixtures, secrets, build candidates, or developer cache files.
|
||||||
|
|
||||||
The project requires no copyright assignment. Ownership remains determined by applicable law and any employer or other agreement. Contributors submit each file under the license identified for that repository area, and the DCO records their certification that they have the right to do so. Material AI assistance must follow [AI_CONTRIBUTIONS.md](AI_CONTRIBUTIONS.md). Review considers provenance, safety, maintenance cost, compatibility, and fit—not just whether code passes tests.
|
The project requires no copyright assignment. Ownership remains determined by applicable law and any employer or other agreement. Contributors submit each file under the license identified for that repository area, and the DCO records their certification that they have the right to do so. Material AI assistance must follow [AI_CONTRIBUTIONS.md](AI_CONTRIBUTIONS.md). Review considers provenance, safety, maintenance cost, compatibility, and fit—not just whether code passes tests.
|
||||||
|
|
||||||
@@ -30,6 +42,6 @@ If a compiler contribution adds or changes contributor-owned scaffolding that Hi
|
|||||||
Himesan-Output-Permission: v1.0
|
Himesan-Output-Permission: v1.0
|
||||||
```
|
```
|
||||||
|
|
||||||
That trailer records the contributor's grant of the additional permission in [OUTPUT_EXCEPTION.md](OUTPUT_EXCEPTION.md) for the affected contribution. DCO sign-off does not supply that separate grant. Maintainers must preserve the signed grant in the private contribution record even when a sanitized public snapshot uses fresh history. A patch without it must not cause contributor-owned text to be emitted; maintainers must reject or redesign such a patch rather than assume permission.
|
That trailer records the contributor's grant of the additional permission in [OUTPUT_EXCEPTION.md](OUTPUT_EXCEPTION.md) for the affected contribution. DCO sign-off does not supply that separate grant. Maintainers must preserve the signed grant in the private contribution record even when development commits are squashed into a public publication commit. Public attribution must remain accurate; squashing does not transfer ownership. A patch without it must not cause contributor-owned text to be emitted; maintainers must reject or redesign such a patch rather than assume permission.
|
||||||
|
|
||||||
Potential vulnerabilities follow [SECURITY.md](SECURITY.md), not the ordinary contribution channel. Do not place confidential vulnerability details in an issue or patch description.
|
Potential vulnerabilities follow [SECURITY.md](SECURITY.md), not the ordinary contribution channel. Do not place confidential vulnerability details in an issue or patch description.
|
||||||
|
|||||||
+28
-2
@@ -4,10 +4,36 @@
|
|||||||
|
|
||||||
Sandwich Hime is founder-led. Cole Speelman is lead maintainer and has final authority over product direction, merges, releases, project identity, and security coordination. Authority is exercised through reviewable public releases, written rationale for material public decisions, and the published compatibility and release policies. Publishing a prerelease creates only the support commitment stated for that version; it does not transfer stewardship.
|
Sandwich Hime is founder-led. Cole Speelman is lead maintainer and has final authority over product direction, merges, releases, project identity, and security coordination. Authority is exercised through reviewable public releases, written rationale for material public decisions, and the published compatibility and release policies. Publishing a prerelease creates only the support commitment stated for that version; it does not transfer stewardship.
|
||||||
|
|
||||||
Pre-1.0 contributions use the DCO process described in `CONTRIBUTING.md`; the CLA draft is inactive. Acceptance is never guaranteed. Maintainers may close work that expands the product beyond an HTML-first, ahead-of-time Go template engine, weakens fail-closed safety, couples the runtime to a framework, or imposes unsustainable maintenance.
|
New contributions use the DCO and prospective versioned agreement process in
|
||||||
|
`CONTRIBUTING.md`. Acceptance is never guaranteed. Maintainers may close work
|
||||||
|
that expands the product beyond an HTML-first, ahead-of-time Go template engine,
|
||||||
|
weakens fail-closed safety, couples the runtime to a framework, or imposes
|
||||||
|
unsustainable maintenance.
|
||||||
|
|
||||||
Maintainers disclose relevant employment or financial conflicts and recuse when a conflict would compromise review. If the project reaches three maintainers, no single employer may control a majority of seats.
|
Maintainers disclose relevant employment or financial conflicts and recuse when a conflict would compromise review. If the project reaches three maintainers, no single employer may control a majority of seats.
|
||||||
|
|
||||||
Repository ownership, domain control, package namespace, release signing, and security recovery must not depend on a sponsor account. Before a supported v1.0.0 release, at least two independent humans must hold documented recovery capability. Succession may transfer official stewardship to a person or mission-aligned organization committed to the license map, public source releases, and trademark policy.
|
Repository ownership, domain control, package namespace, release signing, and security recovery must not depend on a sponsor account. Independent recovery capability remains a governance aim; the maintainer explicitly deferred offline restoration and second-person recovery/verification for v1.0.0. They remain unproven assurance follow-ups in `ROADMAP.md`, not a claim of resilient stewardship. Succession may transfer official stewardship to a person or mission-aligned organization committed to the license map, public source releases, and trademark policy.
|
||||||
|
|
||||||
The project does not accept copyright assignment as a condition of contribution. It will not represent that it can proprietary-relicense contributor-owned code unless it has permission from every rights holder whose permission is required. This governance statement does not alter rights already granted by an applicable file license.
|
The project does not accept copyright assignment as a condition of contribution. It will not represent that it can proprietary-relicense contributor-owned code unless it has permission from every rights holder whose permission is required. This governance statement does not alter rights already granted by an applicable file license.
|
||||||
|
|
||||||
|
## Shared value and independent stewardship
|
||||||
|
|
||||||
|
Official stewardship preserves the compiler's open, reciprocal licensing.
|
||||||
|
Commercial users, paid services and compliant independent forks are welcome;
|
||||||
|
funding does not purchase ownership, a governance seat, a veto, or authority to
|
||||||
|
erase attribution. Maintainers must not use a contribution agreement or private
|
||||||
|
side deal to remove copyleft from accepted contributor-owned AGPL work. The
|
||||||
|
existing runtime and output permissions remain deliberate separate boundaries.
|
||||||
|
|
||||||
|
Material licensing, governance and stewardship transfers require a public
|
||||||
|
rationale and respect for recorded rights; a vote or repository transfer cannot
|
||||||
|
supply someone else's copyright permission. A successor to a contribution
|
||||||
|
agreement must expressly assume its steward obligations. Preserve accessible
|
||||||
|
released source and provenance so lawful community continuation remains possible
|
||||||
|
without ownership of official domains, release accounts or marks. This is not a
|
||||||
|
promise of perpetual free hosting or a restriction on independent fork rights.
|
||||||
|
|
||||||
|
The reciprocal agreement requires explicit contributor and Steward acceptance.
|
||||||
|
Publication alone does not bind a contributor, an earlier submission or an
|
||||||
|
unrelated third party. No agreement is required to learn or use the software.
|
||||||
|
See [Licensing intent](docs/LICENSING_INTENT.md) for the distinctions and limits.
|
||||||
|
|||||||
+5
-1
@@ -36,4 +36,8 @@ SPDX identifiers state the applicable license for comment-capable source and doc
|
|||||||
|
|
||||||
The snapshot exporter's `PUBLIC-SNAPSHOT.json` and `PUBLIC-SNAPSHOT.sha256` are generated factual provenance records and intentionally carry no inline SPDX comment. They do not change the license of any listed file.
|
The snapshot exporter's `PUBLIC-SNAPSHOT.json` and `PUBLIC-SNAPSHOT.sha256` are generated factual provenance records and intentionally carry no inline SPDX comment. They do not change the license of any listed file.
|
||||||
|
|
||||||
These are practical project licensing terms, not legal advice or a prediction of how every jurisdiction will classify a particular work. The inactive CLA draft and pre-registration trademark policy say so explicitly. Qualified legal review remains prudent before changing these terms, activating a CLA, registering marks, or making a fact-specific licensing decision; it is not represented as a prerequisite to publishing the current narrowly scoped public beta.
|
These are practical project licensing terms, not a prediction of how every
|
||||||
|
jurisdiction will classify a particular work. The prospective contribution
|
||||||
|
agreement and pre-registration trademark policy preserve that distinction.
|
||||||
|
Professional advice may help with a specific dispute or change in circumstances;
|
||||||
|
it is not a prerequisite to this release and is not claimed to have occurred.
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"schema_version":2,"project":"sandwich-hime","export_policy":"exact-allowlist-v1","export_mode":"release","file_count":125,"allowlist_sha256":"b320a95ca85f48941ee956fde1eda46e0d9bc664da21d13c5f65a8f623063ed5","manifest_sha256":"6f9f21ff9ff641de9765f0491edd7e9f173d718454fe68f32c6379f5331d9c13"}
|
{"schema_version":2,"project":"sandwich-hime","export_policy":"exact-allowlist-v1","export_mode":"release","file_count":128,"allowlist_sha256":"4f067a37de73082f3534ebfeb5a73b53b37ace9e4c6b21956405e2fefacbeb38","manifest_sha256":"90192f06c4ae7182834e5c1bc6890568698635b71530cb9593fb946ea2e6b3f4"}
|
||||||
|
|||||||
+26
-23
@@ -2,25 +2,26 @@
|
|||||||
658ba4b4645426f8c3249337f47669074ae9249a31703dcd9ea4c1afec45e20b ./.gitattributes
|
658ba4b4645426f8c3249337f47669074ae9249a31703dcd9ea4c1afec45e20b ./.gitattributes
|
||||||
d5ae411fb422b2388cac220f9655900eecbc49ece961b2bb2a6610347733b756 ./.gitignore
|
d5ae411fb422b2388cac220f9655900eecbc49ece961b2bb2a6610347733b756 ./.gitignore
|
||||||
98f663ab0f376b4550094465ec2e06192d1e0b0707604ec6794f20b0d10952c1 ./AI_CONTRIBUTIONS.md
|
98f663ab0f376b4550094465ec2e06192d1e0b0707604ec6794f20b0d10952c1 ./AI_CONTRIBUTIONS.md
|
||||||
954fb577484d5ca95f3fedb80d967ec6012ed4ed24fb7d999174f1b163697c80 ./CHANGELOG.md
|
1b8da729e4311d8839683177ae917927d6c9e28b5e82f5d9778031b737bb7d88 ./CHANGELOG.md
|
||||||
b696cab3cf482ff5737501371cca749369b119351383e698ced42bcdbcbfc8ae ./CLA.md
|
9f0d4fd40cb2e789a6007d29fe31e00391c687b6cfd4941f3b69cbb2c5e14b03 ./CLA.md
|
||||||
797e884105738fc931b585b695424f43ec5f296d8ab9bba5191b096e87a9e2c2 ./CONTRIBUTING.md
|
018d21c429ef5a94b2bc5b5535086bba0b2b3849d45c5cfff3e758622a76c722 ./CONTRIBUTING.md
|
||||||
86d7e49d5d90e0f98a4ad0f14b5d8b9f11ed09a1e29ecdf27388316b28e195e8 ./COPYRIGHT
|
86d7e49d5d90e0f98a4ad0f14b5d8b9f11ed09a1e29ecdf27388316b28e195e8 ./COPYRIGHT
|
||||||
f7ac75b443f4ca16b503241344b41aeff9503b0c30bedc2b119551d83cb0fa90 ./DCO.txt
|
f7ac75b443f4ca16b503241344b41aeff9503b0c30bedc2b119551d83cb0fa90 ./DCO.txt
|
||||||
8ac46ef4e559f0bb43a8acb8cf6013052e09d41aa591a25c5e6fd462179eb067 ./GENERATED_CODE.md
|
8ac46ef4e559f0bb43a8acb8cf6013052e09d41aa591a25c5e6fd462179eb067 ./GENERATED_CODE.md
|
||||||
a4570d054f072d33b8f17b0c8b162a6ee0ca37d7df2b1aee7e4b728ab350a892 ./GOVERNANCE.md
|
2c206b42bf864ff6b2e52fa83d536f209601601c272753f4c09d1e8f44b9c8f9 ./GOVERNANCE.md
|
||||||
0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0 ./LICENSE
|
0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0 ./LICENSE
|
||||||
9957e4aea02effb4d4b8012a3cc0e2d6ee1ce8be3761555c2c3e8aee27a5ee08 ./LICENSES.md
|
4db1cfa504d3c80e06a3b3fde2854b3d01fbd2e5498d5f28d257297cd79b88c2 ./LICENSES.md
|
||||||
b6aa08e5ccaec3c5dccdc19d7cd7f54a70adae4d57966263c7aa353c7ba70e08 ./MAINTAINERS.md
|
b6aa08e5ccaec3c5dccdc19d7cd7f54a70adae4d57966263c7aa353c7ba70e08 ./MAINTAINERS.md
|
||||||
6638db2f1fba831c79de835ce95c847a5b36c5b5c693b99a28655b2d096cc440 ./OUTPUT_EXCEPTION.md
|
6638db2f1fba831c79de835ce95c847a5b36c5b5c693b99a28655b2d096cc440 ./OUTPUT_EXCEPTION.md
|
||||||
80de7a9ede0fbe2f364456e72b08c5a4b965ea656eaab63f3e1d246abeb9c01e ./README.md
|
007ffcafd32b50ed6ba4241ced90ef2e22a79cc7ad10f768e9e1f9560453b41f ./README.md
|
||||||
14fbed2a6de1496d7ad3783bac1b79f3f340de72545fe0dcf39de829622d7d32 ./RELEASE.md
|
fd2f45bb683d804afc127414e88e6b8ab75754af0596efe58fcb4ca3f4a55b9f ./RELEASE.md
|
||||||
d4ae7927633d42851581d2bcbc94777aef9853b4880883cc50bfc94ce0c78842 ./ROADMAP.md
|
953e226cb5179c17b1b2ce091653cbdaf83e92dd4913cc3b34a3cc893843496f ./ROADMAP.md
|
||||||
b9ee0e394494a66ba6291a8e06a14fd159ba9fb3f46997e1b2de03e1cc2ef77c ./SECURITY.md
|
44a895f8a738d21121379a5a417445ecc953f2ebfb64a7e575543769f642d1b6 ./SECURITY.md
|
||||||
d566b8b27777cb33209602df81d654a94072ad875440c089ac41764a349b6c17 ./SPEC.md
|
d566b8b27777cb33209602df81d654a94072ad875440c089ac41764a349b6c17 ./SPEC.md
|
||||||
3d9e680cdfe147df7cc9ff29ecf1d3e566e9cd559ae84db4880e559b9c7c7205 ./TRADEMARKS.md
|
8906258cc7aaadf03bd7e84b69efc3be6a01d1c392b0711fbcee9abf4863b25b ./TRADEMARKS.md
|
||||||
e2ce8cbc43e4575984839b61332207f7c90e2848fa270d4c68dbc5fc394f28e7 ./cmd/himesan-release/main.go
|
e2ce8cbc43e4575984839b61332207f7c90e2848fa270d4c68dbc5fc394f28e7 ./cmd/himesan-release/main.go
|
||||||
9dda7402f76b38d417981f9e7658880b592c282c00163a3fdbfb0ab55e1edcba ./cmd/himesan/contract_test.go
|
9dda7402f76b38d417981f9e7658880b592c282c00163a3fdbfb0ab55e1edcba ./cmd/himesan/contract_test.go
|
||||||
|
d53548ffa05a386bd869cf6b70d1ebe3397eb49bf0c05d9dc48ed94ed85a052c ./cmd/himesan/doc.go
|
||||||
8cd8db68e1300f9b78cc7235855853cbc7aeb499a921419e23a22e4d22826fcb ./cmd/himesan/main.go
|
8cd8db68e1300f9b78cc7235855853cbc7aeb499a921419e23a22e4d22826fcb ./cmd/himesan/main.go
|
||||||
8c53127437cd8a77676fdbcdf62f6dd9346e533665bf7d5ac32f103839a24974 ./cmd/himesan/main_test.go
|
8c53127437cd8a77676fdbcdf62f6dd9346e533665bf7d5ac32f103839a24974 ./cmd/himesan/main_test.go
|
||||||
de004164324a640555256a91ca21a02be163bd3d231b38f08f8539c9a77ef665 ./contracts/diagnostic-codes-v1.txt
|
de004164324a640555256a91ca21a02be163bd3d231b38f08f8539c9a77ef665 ./contracts/diagnostic-codes-v1.txt
|
||||||
@@ -30,15 +31,17 @@ e6fb36b274bf44143497b2af454e9ee0fabe6122f935cbf97e785a003277e211 ./contracts/hi
|
|||||||
09e574ed55e3a48fa117936465d3de887686cf3f2a5c4231cf598ff30e4b1a75 ./contracts/himesan-operation-output-v1.schema.json
|
09e574ed55e3a48fa117936465d3de887686cf3f2a5c4231cf598ff30e4b1a75 ./contracts/himesan-operation-output-v1.schema.json
|
||||||
7679c9908266811a4336be9698982e58ffedecedf2c340b082bf5dcdef1554dd ./contracts/himesan-version-output-v1.schema.json
|
7679c9908266811a4336be9698982e58ffedecedf2c340b082bf5dcdef1554dd ./contracts/himesan-version-output-v1.schema.json
|
||||||
1ecbba46f8b1b2d548a01d7e98afae17b2dd17a814338ff1f88db885655d1c07 ./docs/ARCHITECTURE.md
|
1ecbba46f8b1b2d548a01d7e98afae17b2dd17a814338ff1f88db885655d1c07 ./docs/ARCHITECTURE.md
|
||||||
9e4f5a80afbffe51dda3e7f9fa5221e3ef4ca516c4b7f7ca33b61ac97ff213bb ./docs/BENCHMARKS.md
|
c26f1f2030f0661aaf3bab963efc132aa63e8fae61be05ff18b4c9c8bc35cb0d ./docs/BENCHMARKS.md
|
||||||
5c3a62fed80ca28d56558b8c75e8b5be8ba7d2554127adf4609d96da314e85b0 ./docs/BRAND.md
|
015e15c7b00edd0f5d3d4906745f0a6def526cb66422aa27eb8b5c6a935d9e3d ./docs/BENCHMARK_RESULTS.md
|
||||||
60f0c1257cfce8388a252a105042be57c2978820d37ef81e46c6d3a49474fde3 ./docs/COMPATIBILITY.md
|
ae6043d4687708ce583e15e064c3baec2d9735b499a0f7c56a166d4bac5b18da ./docs/BRAND.md
|
||||||
|
4e9085e89db89427849509ab36a59e0e06243e65c65cb948da8f577a9d043411 ./docs/COMPATIBILITY.md
|
||||||
d1b4ef192e02b59a9d8d0eb3b1072392e633116433fa308f6ca9bbe17b75e213 ./docs/DEVELOPMENT_SERVER.md
|
d1b4ef192e02b59a9d8d0eb3b1072392e633116433fa308f6ca9bbe17b75e213 ./docs/DEVELOPMENT_SERVER.md
|
||||||
4d92dc88ef33d4f7d952de039f842e54a3f3bfb4dbe56debf7ddb6e6c4a428f6 ./docs/DIAGNOSTICS.md
|
4d92dc88ef33d4f7d952de039f842e54a3f3bfb4dbe56debf7ddb6e6c4a428f6 ./docs/DIAGNOSTICS.md
|
||||||
a62cc7174f3c92d8ef77e4bd9607fbf5d4b80bc514ff05bd433c02a9b0578f18 ./docs/LANGUAGE_SERVER.md
|
a62cc7174f3c92d8ef77e4bd9607fbf5d4b80bc514ff05bd433c02a9b0578f18 ./docs/LANGUAGE_SERVER.md
|
||||||
32253dbe59d9b0da40354b48c2e54feb8c38d441b41efba046125571d3dabb50 ./docs/SECURITY_EVIDENCE.md
|
f66134e7a45a378e09fda4098d4fc706a280bb4ffdafe42a38a875f6ff82b3bb ./docs/LICENSING_INTENT.md
|
||||||
|
c80d0ee5d2b467c696f45bac26fedc5cce04cc69148d42a3d5a103f8760da515 ./docs/SECURITY_EVIDENCE.md
|
||||||
e600caf17a87997de330ca787bfc5f16c1b20e07f467f8d1ad450e96e2421910 ./docs/THREAT_MODEL.md
|
e600caf17a87997de330ca787bfc5f16c1b20e07f467f8d1ad450e96e2421910 ./docs/THREAT_MODEL.md
|
||||||
978c6fdb8ed82aa2b118bbfb3d6217adf8edf425370ecdffdfc96ac24a9cbdce ./docs/V1_RELEASE_PLAN.md
|
96c5be9c958c6005c7d1fcea3843a71f501b10b5d12b545906ae1cfdd9a771db ./docs/V1_RELEASE_PLAN.md
|
||||||
f27c46ca63707bb8cc570eab1ea521824e94bc59b1d153998a5e91c2c7340d16 ./go.mod
|
f27c46ca63707bb8cc570eab1ea521824e94bc59b1d153998a5e91c2c7340d16 ./go.mod
|
||||||
ca0bf5051d356d2602f46201fb1637ce48b629ad42161877eec13f743f215dc5 ./internal/compiler/abi_test.go
|
ca0bf5051d356d2602f46201fb1637ce48b629ad42161877eec13f743f215dc5 ./internal/compiler/abi_test.go
|
||||||
d891b9b075617050471b2ca34de73d926aaebde4ec638a5039b0d5001d3172f4 ./internal/compiler/analysis.go
|
d891b9b075617050471b2ca34de73d926aaebde4ec638a5039b0d5001d3172f4 ./internal/compiler/analysis.go
|
||||||
@@ -49,7 +52,7 @@ dbba23e360bd6dd1e8f42953a49a7cfcc241aa3ac76f5ce505ec8f8558833c84 ./internal/com
|
|||||||
1e0f83c3e9eea34a23e8d62f8da36bb697268531e8edd9d76a1f3752abfeb563 ./internal/compiler/contract_test.go
|
1e0f83c3e9eea34a23e8d62f8da36bb697268531e8edd9d76a1f3752abfeb563 ./internal/compiler/contract_test.go
|
||||||
b2a96ef1ad572ad9cd0e9247328ca261de6f9f3689da41e3f3e111d405a6dee6 ./internal/compiler/diagnostic.go
|
b2a96ef1ad572ad9cd0e9247328ca261de6f9f3689da41e3f3e111d405a6dee6 ./internal/compiler/diagnostic.go
|
||||||
6a3dccd0c7caf92fe2690b350f1db6f34037609b1fff6d3e68e0e229241950e5 ./internal/compiler/discover.go
|
6a3dccd0c7caf92fe2690b350f1db6f34037609b1fff6d3e68e0e229241950e5 ./internal/compiler/discover.go
|
||||||
13fb6843b4e43fa766f8fbb7dc7f04fa7328edf159d40c5a51cd87b1a0b2dc6c ./internal/compiler/e2e_test.go
|
e2843949f626c15dd6116af357588e2b471e6b03300f14f8ea76f31c1a91a2e8 ./internal/compiler/e2e_test.go
|
||||||
3cf1b6c26b2551ad2e8f1e06e45adfdf8b72e6f9ce7f9baf6b73209b7d788022 ./internal/compiler/fuzz_test.go
|
3cf1b6c26b2551ad2e8f1e06e45adfdf8b72e6f9ce7f9baf6b73209b7d788022 ./internal/compiler/fuzz_test.go
|
||||||
440580fcd844b2c80b1f4dddc4d83db82974e203cca298387a190e53e6a524f3 ./internal/compiler/model.go
|
440580fcd844b2c80b1f4dddc4d83db82974e203cca298387a190e53e6a524f3 ./internal/compiler/model.go
|
||||||
01516c0330b14a1970019690d8efcc9004d2dcfa59e82fef1b67f98005b67532 ./internal/compiler/operation.go
|
01516c0330b14a1970019690d8efcc9004d2dcfa59e82fef1b67f98005b67532 ./internal/compiler/operation.go
|
||||||
@@ -96,7 +99,7 @@ d8c6f37c94ef426fc2d95c82331265f7d700d2e2a23100ad78c92849280ff6d8 ./internal/ver
|
|||||||
a1ee0ec44dc45f01a3357cf93e13a81587af7f061497c25df374e2a88231f3b7 ./internal/version/version_test.go
|
a1ee0ec44dc45f01a3357cf93e13a81587af7f061497c25df374e2a88231f3b7 ./internal/version/version_test.go
|
||||||
e8a3026ec920d7312f843e2001e50ae4e34fd1ba5f9b2ae25a6113de1fa88385 ./sando/COPYRIGHT
|
e8a3026ec920d7312f843e2001e50ae4e34fd1ba5f9b2ae25a6113de1fa88385 ./sando/COPYRIGHT
|
||||||
c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./sando/LICENSE
|
c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./sando/LICENSE
|
||||||
9b9b09b595658cf65aef8f7ace9cc955f026cdd71ece0f79671bfada8bd9c260 ./sando/README.md
|
e66858232f401e112bd5f072943bc286e9a8564ad77558cdf115c023940ef318 ./sando/README.md
|
||||||
acfbbc860417aeabba486ca4fea530e711c3e488bc3f5f6588db102b8a58bec2 ./sando/api_contract_test.go
|
acfbbc860417aeabba486ca4fea530e711c3e488bc3f5f6588db102b8a58bec2 ./sando/api_contract_test.go
|
||||||
7e862661f19fc9fcd694ef64e65fda898186c51836335c27c21397e8dcf09c05 ./sando/benchmark_test.go
|
7e862661f19fc9fcd694ef64e65fda898186c51836335c27c21397e8dcf09c05 ./sando/benchmark_test.go
|
||||||
7ec3fe73755a385e0950b9fbf833dd4b6a753a769ab743e97b9d94e77370a32c ./sando/component.go
|
7ec3fe73755a385e0950b9fbf833dd4b6a753a769ab743e97b9d94e77370a32c ./sando/component.go
|
||||||
@@ -108,17 +111,17 @@ ed2b8d8040689c608623d30085a55678ae3c9d70a8a40a42435e04bff47a31ab ./sando/testda
|
|||||||
85621a44c730582f4410ac2c70418b739fb55e916f7e6b73a1a619982c459572 ./sando/write.go
|
85621a44c730582f4410ac2c70418b739fb55e916f7e6b73a1a619982c459572 ./sando/write.go
|
||||||
b188917e258890e6b6e4840a6fd946fc9a77cabc2068da3764f221e4a6a5df97 ./sando/write_test.go
|
b188917e258890e6b6e4840a6fd946fc9a77cabc2068da3764f221e4a6a5df97 ./sando/write_test.go
|
||||||
6ea995e9d7d22e09a13065a6e340df4efa0f1860b0b42409f84835c93f29962c ./scripts/PUBLIC_SNAPSHOT.md
|
6ea995e9d7d22e09a13065a6e340df4efa0f1860b0b42409f84835c93f29962c ./scripts/PUBLIC_SNAPSHOT.md
|
||||||
2d152851bc77f6eb5ca842a8021cde386a3cae91db819cd99cedc31b3b62518f ./scripts/README.md
|
0482438a902e1f5368af3707c1348007dc0c2efeb854be85bf4f410e6d2f4a1f ./scripts/README.md
|
||||||
81ab4c10a436bc9b345828a55c2fe446f297fa6cfd1debfe95e1082b6e28c969 ./scripts/check-licenses.sh
|
81ab4c10a436bc9b345828a55c2fe446f297fa6cfd1debfe95e1082b6e28c969 ./scripts/check-licenses.sh
|
||||||
3adba1428df83d6180d4fa3c683f0604dc7cdc0c4358f3dae7595189cc40f949 ./scripts/export-public-snapshot.sh
|
3adba1428df83d6180d4fa3c683f0604dc7cdc0c4358f3dae7595189cc40f949 ./scripts/export-public-snapshot.sh
|
||||||
47dceef111d1da4345b473ff9092df7fcdab655fa1ec660e58012f75c5135d83 ./scripts/native-gate.sh
|
f391ac912cdeb6b139d4feaec29a992cb53faea0fc4bbe805fd380450b238f7c ./scripts/native-gate.sh
|
||||||
a038a002f0c895fef38a7265bcb7df01efdda57de5c4d36d0dc7c8e377798a95 ./scripts/package-macos.sh
|
a038a002f0c895fef38a7265bcb7df01efdda57de5c4d36d0dc7c8e377798a95 ./scripts/package-macos.sh
|
||||||
7d1e3606f3159e0d5d222bb5b02171ad90bb2c42b0e041042dcf8e6b7692c40a ./scripts/package-native.sh
|
7d1e3606f3159e0d5d222bb5b02171ad90bb2c42b0e041042dcf8e6b7692c40a ./scripts/package-native.sh
|
||||||
1fddbdf81e86f4310a603cedd0f24a39d6c62d810c7e1e2e6c5f7bff1d1d4198 ./scripts/public-snapshot-lib.sh
|
ed17f6225971af8ca9ba88dc53f307f46dcc6cb5d9f3b08d42c466ac4d0e4214 ./scripts/public-snapshot-lib.sh
|
||||||
b320a95ca85f48941ee956fde1eda46e0d9bc664da21d13c5f65a8f623063ed5 ./scripts/public-snapshot.allow
|
4f067a37de73082f3534ebfeb5a73b53b37ace9e4c6b21956405e2fefacbeb38 ./scripts/public-snapshot.allow
|
||||||
183b76febe506a8e0dfaa70ddf6269749ab2c475e6c345c8adfb2ad6e7e1019b ./scripts/release-check.sh
|
8fa4ee6c6ae80c261a8f5c1ff18a89185b4ce6472ccb577e1daf61afaa146e14 ./scripts/release-check.sh
|
||||||
494cf5573cc6a891d4243ec01a98c43263de75090cb3b55c9c398e545b1ec1a8 ./scripts/sign-notarize-macos.sh
|
494cf5573cc6a891d4243ec01a98c43263de75090cb3b55c9c398e545b1ec1a8 ./scripts/sign-notarize-macos.sh
|
||||||
7c65325664e95df1a63262bc440a599fb799b36123a68c5cc26cfb81ddd08efa ./scripts/test-public-snapshot.sh
|
485f2eb4bba187e22dae820e75b4fa4ee807a1e526f21de08108c3e987390bcb ./scripts/test-public-snapshot.sh
|
||||||
39a80708b1c1a64c837032c6570e77dea28b2c6e6058eea40efac63ad5827431 ./scripts/verify-consumer.sh
|
39a80708b1c1a64c837032c6570e77dea28b2c6e6058eea40efac63ad5827431 ./scripts/verify-consumer.sh
|
||||||
ddcb5602a51a515ee6649e26f27d919addb0590abdcc095c374c90f5b0c2f8a3 ./scripts/verify-public-install.sh
|
ddcb5602a51a515ee6649e26f27d919addb0590abdcc095c374c90f5b0c2f8a3 ./scripts/verify-public-install.sh
|
||||||
1673257efa50b906363ccab45f4ebcf7cb377185861a1c37221c98292c2c7cf6 ./scripts/verify-real-browser.sh
|
1673257efa50b906363ccab45f4ebcf7cb377185861a1c37221c98292c2c7cf6 ./scripts/verify-real-browser.sh
|
||||||
|
|||||||
@@ -42,12 +42,15 @@ request object, or production server.
|
|||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
`v1.0.0-rc.1` is the current release candidate for both the compiler and the
|
This is the source and documentation for compiler `v1.0.0` and independently
|
||||||
independently tagged runtime. The intended v1 source syntax, generated API,
|
tagged runtime `sando/v1.0.0`. The v1 source syntax, generated API, runtime
|
||||||
runtime API, CLI, diagnostics, and schemas are frozen except for
|
API, CLI, diagnostics, and schemas follow the
|
||||||
release-blocking corrections. It remains a semantic-version prerelease while
|
[v1 compatibility policy](docs/COMPATIBILITY.md). Corrections receive new
|
||||||
the project completes its public observation period; a finding is fixed in a
|
immutable versions rather than moving a published tag.
|
||||||
new RC rather than by moving either tag.
|
|
||||||
|
The commands below target that final pair. Canonical Gitea tags and release
|
||||||
|
announcements establish version and artifact availability; check them before
|
||||||
|
installing a newly announced version.
|
||||||
|
|
||||||
Linux/amd64 and Apple Silicon macOS/arm64 are the maintained v1 execution and
|
Linux/amd64 and Apple Silicon macOS/arm64 are the maintained v1 execution and
|
||||||
release targets. Native release evidence runs with pinned Go 1.26.7 and Go
|
release targets. Native release evidence runs with pinned Go 1.26.7 and Go
|
||||||
@@ -64,13 +67,13 @@ decisions on both supported native targets.
|
|||||||
Inside an application module, add the small runtime first:
|
Inside an application module, add the small runtime first:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
go get gamertan.com/sandwich-hime/sando@v1.0.0-rc.1
|
go get gamertan.com/sandwich-hime/sando@v1.0.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Then install the matching release-candidate compiler:
|
Then install the matching compiler:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
go install gamertan.com/sandwich-hime/cmd/himesan@v1.0.0-rc.1
|
go install gamertan.com/sandwich-hime/cmd/himesan@v1.0.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Keep that runtime-first order. It avoids path-selection ambiguity between the
|
Keep that runtime-first order. It avoids path-selection ambiguity between the
|
||||||
@@ -81,19 +84,19 @@ does not contain `sando`, seed the exact nested module without clearing the
|
|||||||
global cache, then retry:
|
global cache, then retry:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
go mod download gamertan.com/sandwich-hime/sando@v1.0.0-rc.1
|
go mod download gamertan.com/sandwich-hime/sando@v1.0.0
|
||||||
go get gamertan.com/sandwich-hime/sando@v1.0.0-rc.1
|
go get gamertan.com/sandwich-hime/sando@v1.0.0
|
||||||
```
|
```
|
||||||
|
|
||||||
For a reproducible one-off or classroom invocation that does not depend on the
|
For a reproducible one-off or classroom invocation that does not depend on the
|
||||||
learner's `PATH`:
|
learner's `PATH`:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
go run gamertan.com/sandwich-hime/cmd/himesan@v1.0.0-rc.1 --help
|
go run gamertan.com/sandwich-hime/cmd/himesan@v1.0.0 --help
|
||||||
```
|
```
|
||||||
|
|
||||||
The runtime implementation retains ABI `sando.v1` and zero third-party module
|
The runtime implementation retains ABI `sando.v1` and zero third-party module
|
||||||
requirements. The coordinated RC tags make the intended v1 pair explicit even
|
requirements. The coordinated v1 tags make the release pair explicit even
|
||||||
though compiler and runtime versions remain independently addressable. Signed
|
though compiler and runtime versions remain independently addressable. Signed
|
||||||
tags, direct fetching, the public Go proxy, and the checksum database are
|
tags, direct fetching, the public Go proxy, and the checksum database are
|
||||||
verified after publication. A newly announced version may still need a short
|
verified after publication. A newly announced version may still need a short
|
||||||
@@ -123,9 +126,8 @@ or starts the dev supervisor. See
|
|||||||
Skill and VS Code preview live in the separate
|
Skill and VS Code preview live in the separate
|
||||||
[tooling repository](https://gitea.speelman.ca/gamertan/sandwich-hime-tooling).
|
[tooling repository](https://gitea.speelman.ca/gamertan/sandwich-hime-tooling).
|
||||||
|
|
||||||
Final-v1 installs will use the same paths with `@v1.0.0`. A version is
|
A version is advertised as available only after its immutable tags,
|
||||||
advertised as available only after its immutable tags, `gamertan.com`
|
`gamertan.com` metadata, and clean direct-fetch installation have been verified.
|
||||||
metadata, and clean direct-fetch installation have been verified.
|
|
||||||
|
|
||||||
## The contract
|
## The contract
|
||||||
|
|
||||||
|
|||||||
+13
-3
@@ -29,8 +29,10 @@ portability input but are not v1 release blockers or maintained promises.
|
|||||||
Beta tags are signed, annotated, and immutable. Beta 1 is a source/module
|
Beta tags are signed, annotated, and immutable. Beta 1 is a source/module
|
||||||
release installed through the Go toolchain; it does not promise downloadable
|
release installed through the Go toolchain; it does not promise downloadable
|
||||||
prebuilt binaries. Signed binary artifacts, checksums, SBOMs, reproducible
|
prebuilt binaries. Signed binary artifacts, checksums, SBOMs, reproducible
|
||||||
archives, and key-recovery rehearsal are mandatory for release candidates and
|
archives are mandatory for release candidates and final v1. Offline signing-key
|
||||||
final v1.
|
restoration and independent second-person recovery/verification were explicitly
|
||||||
|
deferred by the maintainer for v1.0.0. Record that assurance gap in the release
|
||||||
|
review; retain the drills as follow-up work rather than claiming they passed.
|
||||||
|
|
||||||
### Release candidate
|
### Release candidate
|
||||||
|
|
||||||
@@ -48,6 +50,12 @@ published assurance gap, and the documented RC observation period. A
|
|||||||
deployment, example, classroom project, or case study in another repository is
|
deployment, example, classroom project, or case study in another repository is
|
||||||
neither imported nor required as release evidence.
|
neither imported nor required as release evidence.
|
||||||
|
|
||||||
|
For v1.0.0 the maintainer explicitly accepted the missing timed dogfooding-note
|
||||||
|
gap and deferred independent Mac installation to available alternate hardware.
|
||||||
|
Keep those dispositions visible in `ROADMAP.md`; do not recreate historical
|
||||||
|
reviews, call the install tested, or require another local profile as a
|
||||||
|
substitute. A reproduced product defect remains distinct from missing notes.
|
||||||
|
|
||||||
## Beta 1 publication gates (historical)
|
## Beta 1 publication gates (historical)
|
||||||
|
|
||||||
The first beta used a broader one-time platform campaign. The completed items
|
The first beta used a broader one-time platform campaign. The completed items
|
||||||
@@ -166,7 +174,9 @@ being mistaken for the reviewed native receipt set.
|
|||||||
## Public source and artifacts
|
## Public source and artifacts
|
||||||
|
|
||||||
Gitea is the only canonical public forge. Public source is exported into a
|
Gitea is the only canonical public forge. Public source is exported into a
|
||||||
separate, sanitized Gitea repository with fresh reviewed history. A sanitized
|
separate, sanitized Gitea repository with its own reviewed history. Append
|
||||||
|
reviewed publication commits to the existing public main; do not create a new
|
||||||
|
orphan history per version or push private development branches into it. A sanitized
|
||||||
GitHub discovery snapshot may copy reviewed public source, but it is not an
|
GitHub discovery snapshot may copy reviewed public source, but it is not an
|
||||||
issue, contribution, release, or module origin and must never receive private
|
issue, contribution, release, or module origin and must never receive private
|
||||||
development refs or an indiscriminate Git mirror. Release binaries and
|
development refs or an indiscriminate Git mirror. Release binaries and
|
||||||
|
|||||||
+45
-7
@@ -66,13 +66,51 @@ it is not a production-stability promise.
|
|||||||
|
|
||||||
## Final public launch
|
## Final public launch
|
||||||
|
|
||||||
- [ ] Complete final human review of ownership notices, output permission, DCO
|
Final-release preparation is active. Preserve the existing reviewed public
|
||||||
contribution process, and pre-registration trademark terms.
|
history and append allowlisted updates; keep operator and archival records
|
||||||
- [ ] Complete name clearance, security-mailbox recovery, release signing, and
|
outside the public snapshot. Completed native and signing evidence remains
|
||||||
two-person credential recovery.
|
bound to its exact candidate, not automatically to a later documentation or
|
||||||
- [ ] Verify `gamertan.com` vanity metadata and documented RC installs from clean
|
export-tool update. Final tags and artifacts have not been published.
|
||||||
machines.
|
|
||||||
|
Use [RELEASE.md](RELEASE.md) for the remaining final-publication requirements.
|
||||||
|
Passing CI is evidence for that review, not an automatic publication decision.
|
||||||
|
|
||||||
|
- [x] Finalize the maintainer-approved individual [contribution agreement](CLA.md)
|
||||||
|
version 1.0 and explicit prospective acceptance process. Preserve the AGPL
|
||||||
|
compiler, Apache runtime, chosen application license and existing DCO/output
|
||||||
|
grants. Publication is not contributor acceptance or retroactive assent.
|
||||||
|
The maintainer chose to proceed without an outside legal-review prerequisite;
|
||||||
|
see [the rationale](docs/LICENSING_INTENT.md).
|
||||||
|
- [x] Record the maintainer's approval to proceed with ownership notices, output
|
||||||
|
permission, reciprocal contribution terms and pre-registration naming scope.
|
||||||
|
This is not a statement of external legal review or guaranteed enforceability.
|
||||||
|
- [x] Record the maintainer's decision to proceed with Sandwich Hime as the
|
||||||
|
primary project identity and Hime-san as its tool name. This is acceptance of
|
||||||
|
the documented name-review limitations, not formal trademark clearance,
|
||||||
|
completed similarity analysis or a registration requirement.
|
||||||
|
- [ ] Complete final security/signing readiness review. Distinguish successful
|
||||||
|
signing from the explicitly deferred recovery drills below.
|
||||||
|
- [x] Verify `gamertan.com` vanity metadata and documented RC installs using clean
|
||||||
|
direct-fetch and public-proxy caches. Final-version installs remain post-tag
|
||||||
|
checks; an independent Mac installation is an accepted follow-up below.
|
||||||
- [ ] Confirm the sanitized public Gitea source contains no private paths,
|
- [ ] Confirm the sanitized public Gitea source contains no private paths,
|
||||||
identifiers, history, or unsupported claims.
|
identifiers, history, or unsupported claims.
|
||||||
- [ ] Publish and observe signed RC artifacts on Linux/amd64 and Darwin/arm64.
|
- [x] Publish signed RC.1 artifacts on Linux/amd64 and Darwin/arm64.
|
||||||
|
- [x] Record the maintainer's v1 acceptance of existing live dogfooding despite
|
||||||
|
missing timed checkpoint notes. This is an explicit assurance-gap acceptance,
|
||||||
|
not reconstructed reviews or a claim of measured error-free operation. Missing
|
||||||
|
notes alone do not restart the observation period or block release.
|
||||||
- [ ] Publish `sando/v1.0.0`, then `v1.0.0`, without moving either tag.
|
- [ ] Publish `sando/v1.0.0`, then `v1.0.0`, without moving either tag.
|
||||||
|
|
||||||
|
## Accepted assurance follow-ups
|
||||||
|
|
||||||
|
- [ ] Exercise the published Mac download/install and CLI on independent Apple
|
||||||
|
Silicon hardware when available. The maintainer accepted this gap for v1 and
|
||||||
|
prefers an independent machine over another profile on the development Mac.
|
||||||
|
Record the result in documentation; fix any reproduced defect in an appropriate
|
||||||
|
patch release. This is not a current launch blocker or completed install test.
|
||||||
|
- [ ] Exercise offline signing-key restoration and independent second-person
|
||||||
|
credential recovery/verification. The maintainer explicitly deferred these
|
||||||
|
for v1.0.0; they are not launch blockers or completed recovery evidence. Loss
|
||||||
|
of the current credentials or operator access remains an incident-response
|
||||||
|
risk until these drills and independent access are proven.
|
||||||
|
|||||||
+18
-16
@@ -2,13 +2,12 @@
|
|||||||
|
|
||||||
# Security policy
|
# Security policy
|
||||||
|
|
||||||
Sandwich Hime compiler `v1.0.0-rc.1` and runtime
|
This policy covers Sandwich Hime compiler `v1.0.0` and runtime `sando/v1.0.0`
|
||||||
`sando/v1.0.0-rc.1` are the current release-candidate pair. The intended v1
|
under the [v1 compatibility policy](docs/COMPATIBILITY.md). The latest published
|
||||||
interfaces are frozen except for release-blocking corrections while the RC
|
stable v1 patch receives best-effort maintainer security assessment and fixes.
|
||||||
completes its public observation period. Security reports are welcome and
|
Canonical Gitea tags and release announcements establish availability. The
|
||||||
receive best-effort maintainer assessment and fixes while this pair is current.
|
published RC.1 pair remains covered until final v1 supersedes it. This policy is
|
||||||
This is not an SLA, certification, fitness guarantee, or final-v1 support
|
not an SLA, certification, or fitness guarantee.
|
||||||
promise.
|
|
||||||
|
|
||||||
The community is invited to help find portability gaps outside the maintained
|
The community is invited to help find portability gaps outside the maintained
|
||||||
Linux/amd64 and Darwin/arm64 targets, but those reports do not create a support
|
Linux/amd64 and Darwin/arm64 targets, but those reports do not create a support
|
||||||
@@ -21,12 +20,14 @@ advisories, and release decisions.
|
|||||||
|
|
||||||
| Version | Security status |
|
| Version | Security status |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `v1.0.0-rc.1` compiler and `sando/v1.0.0-rc.1` runtime | Current release-candidate pair; intended v1 interfaces frozen except for release-blocking corrections; best-effort security assessment and fixes during the RC observation period |
|
| `v1.0.0` compiler and `sando/v1.0.0` runtime | Stable v1 line; latest published v1 patch receives best-effort security assessment and fixes |
|
||||||
|
| `v1.0.0-rc.1` compiler and `sando/v1.0.0-rc.1` runtime | Published release-candidate pair; covered until final v1 supersedes it |
|
||||||
| `v1.0.0-beta.2` compiler and `sando/v1.0.0-beta.1` runtime | Superseded evaluation/classroom pair after RC publication |
|
| `v1.0.0-beta.2` compiler and `sando/v1.0.0-beta.1` runtime | Superseded evaluation/classroom pair after RC publication |
|
||||||
| Public `main` | Development source; reports welcome, but no compatibility or production-support promise |
|
| Public `main` | Development source; reports welcome, but no compatibility or production-support promise |
|
||||||
| Older prereleases | Superseded when a newer prerelease or final version is published; reports are still triaged to determine affected versions |
|
| Older prereleases | Superseded when a newer prerelease or final version is published; reports are still triaged to determine affected versions |
|
||||||
|
|
||||||
Prerelease support lasts until it is superseded or explicitly withdrawn in the
|
The latest stable v1 patch and current prerelease receive fixes. Prerelease
|
||||||
|
support lasts until it is superseded or explicitly withdrawn in the
|
||||||
supported-version table and release notes. Published tags are immutable. A
|
supported-version table and release notes. Published tags are immutable. A
|
||||||
security fix is issued as a new version, never by silently replacing a tag.
|
security fix is issued as a new version, never by silently replacing a tag.
|
||||||
|
|
||||||
@@ -59,8 +60,8 @@ ownership, backup, and recovery procedure have been tested.
|
|||||||
## What to expect
|
## What to expect
|
||||||
|
|
||||||
These are best-effort targets for a founder-maintained project, not an SLA.
|
These are best-effort targets for a founder-maintained project, not an SLA.
|
||||||
They describe maintainer responsibilities; asking the community to test a beta
|
They describe maintainer responsibilities; inviting community testing
|
||||||
does not ask reporters to investigate or remediate it:
|
does not make reporters responsible for investigation or remediation:
|
||||||
|
|
||||||
- acknowledge a report within 7 calendar days;
|
- acknowledge a report within 7 calendar days;
|
||||||
- provide an initial severity/scope assessment within 14 calendar days when a
|
- provide an initial severity/scope assessment within 14 calendar days when a
|
||||||
@@ -166,10 +167,11 @@ unsaved overlays, workspace re-indexing, and no generated writes. Source review
|
|||||||
forbids process execution and network-client imports inside the server. Editor
|
forbids process execution and network-client imports inside the server. Editor
|
||||||
workspace trust and executable resolution remain editor-client responsibilities.
|
workspace trust and executable resolution remain editor-client responsibilities.
|
||||||
|
|
||||||
Beta 1 uses signed annotated source tags but predates the complete artifact
|
Beta 1 used signed annotated source tags but predates the complete artifact
|
||||||
system. The RC adds signed or checksummed binaries, SPDX SBOMs, reproducible
|
system. RC.1 introduced signed or checksummed binaries, SPDX SBOMs, reproducible
|
||||||
archives, and source/build provenance. Those controls establish artifact
|
archives, and source/build provenance; final-v1 artifacts retain that release
|
||||||
identity and provenance; they do not constitute an independent security audit
|
boundary and require their own exact-version verification. Those controls
|
||||||
or prove the absence of vulnerabilities.
|
establish artifact identity and provenance; they do not constitute an
|
||||||
|
independent security audit or prove the absence of vulnerabilities.
|
||||||
|
|
||||||
This policy is practical project guidance, not legal advice.
|
This policy is practical project guidance, not legal advice.
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
|
|
||||||
“Sandwich Hime,” “Hime-san,” the Sandwich Hime flag, mascot, and official project artwork identify the project stewarded by Cole Speelman. Code licenses do not grant trademark rights, and this policy does not limit anyone's rights to use the code under those licenses.
|
“Sandwich Hime,” “Hime-san,” the Sandwich Hime flag, mascot, and official project artwork identify the project stewarded by Cole Speelman. Code licenses do not grant trademark rights, and this policy does not limit anyone's rights to use the code under those licenses.
|
||||||
|
|
||||||
|
Sandwich Hime is the primary project identity. Hime-san names the tool within
|
||||||
|
that project, not a separate framework brand. The project does not claim the
|
||||||
|
word “Hime” in general. This naming scope is not a statement of registration
|
||||||
|
or a conclusion about confusing similarity in any jurisdiction.
|
||||||
|
|
||||||
Truthful, non-confusing statements such as “Built with Sandwich Hime,” “compatible with Sandwich Hime,” and unmodified community badges are welcome. They must not imply sponsorship, certification, or official status.
|
Truthful, non-confusing statements such as “Built with Sandwich Hime,” “compatible with Sandwich Hime,” and unmodified community badges are welcome. They must not imply sponsorship, certification, or official status.
|
||||||
|
|
||||||
If a modified distribution uses these project marks, it should use a distinct primary product name, clearly identify its changes, and avoid official artwork or presentation that could confuse users about origin. A fork that does not use the project marks is not restricted by this policy. Either kind of fork may truthfully describe compatibility.
|
If a modified distribution uses these project marks, it should use a distinct primary product name, clearly identify its changes, and avoid official artwork or presentation that could confuse users about origin. A fork that does not use the project marks is not restricted by this policy. Either kind of fork may truthfully describe compatibility.
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
// Command himesan is the development-time compiler and tooling entry point for
|
||||||
|
// Sandwich Hime's HTML-first, ahead-of-time .sando templates.
|
||||||
|
//
|
||||||
|
// Hime-san generates deterministic, formatted .sando.go files beside their
|
||||||
|
// sources. Applications commit those generated files and deploy their ordinary
|
||||||
|
// Go program with the small Apache-2.0 sando runtime. The compiler, language
|
||||||
|
// server, and development supervisor are not production dependencies.
|
||||||
|
//
|
||||||
|
// # Install
|
||||||
|
//
|
||||||
|
// Install the current compiler release with the Go toolchain:
|
||||||
|
//
|
||||||
|
// go install gamertan.com/sandwich-hime/cmd/himesan@latest
|
||||||
|
//
|
||||||
|
// The compiler and runtime have independent tags. For a consuming module, add
|
||||||
|
// the exact sando runtime release first, then install and pin the exact compiler
|
||||||
|
// version selected by that project's documentation. The module README records
|
||||||
|
// current release versions and the runtime-first installation sequence.
|
||||||
|
//
|
||||||
|
// # Generate and check
|
||||||
|
//
|
||||||
|
// Generate adjacent Go files for templates below the current module:
|
||||||
|
//
|
||||||
|
// himesan generate ./...
|
||||||
|
//
|
||||||
|
// Check committed output without writing files:
|
||||||
|
//
|
||||||
|
// himesan check ./...
|
||||||
|
//
|
||||||
|
// The shorter "gen" command aliases generate. The friendly "bless" command is
|
||||||
|
// a read-only alias for check. Both generate and check accept --json for one
|
||||||
|
// bounded machine-readable result.
|
||||||
|
//
|
||||||
|
// Generation is deterministic and replaces only compiler-owned output
|
||||||
|
// atomically. It does not edit handwritten Go files or go.mod. Check reports
|
||||||
|
// stale, missing, invalid, and orphaned generated output through the same
|
||||||
|
// compiler diagnostics used by generation.
|
||||||
|
//
|
||||||
|
// # Local development
|
||||||
|
//
|
||||||
|
// The optional development supervisor regenerates templates, builds the
|
||||||
|
// application's own net/http program, health-checks a new loopback candidate,
|
||||||
|
// and preserves the last healthy process when a candidate fails:
|
||||||
|
//
|
||||||
|
// himesan dev [flags] [package] [-- app-args...]
|
||||||
|
//
|
||||||
|
// Its stable local proxy and browser diagnostics are development conveniences,
|
||||||
|
// not an application framework or production server. Projects may configure
|
||||||
|
// the supervisor with himesan.json or use generate, check, and ordinary Go
|
||||||
|
// tooling directly.
|
||||||
|
//
|
||||||
|
// # Editor integration
|
||||||
|
//
|
||||||
|
// The editor-neutral language server runs over standard input and output:
|
||||||
|
//
|
||||||
|
// himesan lsp --stdio
|
||||||
|
//
|
||||||
|
// It analyzes saved sources and unsaved document overlays with the compiler's
|
||||||
|
// parser and context model. It does not generate files, execute project code,
|
||||||
|
// invoke Go, fetch modules, access the network, or start the development
|
||||||
|
// supervisor.
|
||||||
|
//
|
||||||
|
// # Operational contracts
|
||||||
|
//
|
||||||
|
// Use "himesan version --json" for compiler, runtime ABI, Go, and feature
|
||||||
|
// identity. The repository freezes the command surface, exit meanings,
|
||||||
|
// diagnostic codes, JSON schemas, and configuration schema in its contracts
|
||||||
|
// directory. Language syntax and contextual-safety rules are specified in
|
||||||
|
// SPEC.md and docs/THREAT_MODEL.md at the canonical repository.
|
||||||
|
package main
|
||||||
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
# Benchmark policy
|
# Benchmark policy
|
||||||
|
|
||||||
|
The [RC1 measurement report](BENCHMARK_RESULTS.md) records the observed values,
|
||||||
|
hardware, scope and original samples. Historical RC results must not be relabelled
|
||||||
|
as measurements of a later release candidate.
|
||||||
|
|
||||||
Benchmarks compare equivalent typed views and output against Go's `html/template` baseline. Reports include hardware, operating system, Go version, repository commit, dataset identity, exact commands, warmup/run counts, `ns/op`, bytes and allocations per operation, end-to-end response latency where relevant, output size, and statistical method.
|
Benchmarks compare equivalent typed views and output against Go's `html/template` baseline. Reports include hardware, operating system, Go version, repository commit, dataset identity, exact commands, warmup/run counts, `ns/op`, bytes and allocations per operation, end-to-end response latency where relevant, output size, and statistical method.
|
||||||
|
|
||||||
The v1 gate is no material regression against equivalent repository-owned
|
The v1 gate is no material regression against equivalent repository-owned
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
<!-- SPDX-License-Identifier: AGPL-3.0-only -->
|
||||||
|
|
||||||
|
# RC1 renderer measurements
|
||||||
|
|
||||||
|
These are historical, maintainer-run measurements of the **RC1 runtime**, not
|
||||||
|
new measurements of a final v1 artifact and not an independent performance audit.
|
||||||
|
They were collected on August 24, 2026 from public commit
|
||||||
|
`e730dd1b56061501881818c7000364a55cd49e35`, tree
|
||||||
|
`931023c7d42591b5280ff81d64ce86d2ebba85b7`.
|
||||||
|
|
||||||
|
## What was measured
|
||||||
|
|
||||||
|
The committed `sando/benchmark_test.go` corpus renders one synthetic typed view
|
||||||
|
to `io.Discard` during timing. `TestBenchmarkCorpusEquivalent` first requires
|
||||||
|
identical buffered output.
|
||||||
|
`BenchmarkV1CorpusSandwichHime` mirrors generated runtime writer calls;
|
||||||
|
`BenchmarkV1CorpusHTMLTemplate` executes a pre-parsed Go standard-library template.
|
||||||
|
Both include the measured render allocations. Template parsing is not charged to
|
||||||
|
the baseline. Compiler execution, HTTP, routing, databases and deployment are
|
||||||
|
outside this measurement.
|
||||||
|
|
||||||
|
Each renderer has ten samples, with two seconds requested per sample. The result
|
||||||
|
is the median of the ten `ns/op` values, not the fastest sample. There was no
|
||||||
|
separately recorded application warmup phase; Go's benchmark harness performs
|
||||||
|
its normal iteration calibration. See the [predeclared policy](BENCHMARKS.md).
|
||||||
|
|
||||||
|
| Host | Go | Hime median ns/op | html/template median ns/op | Hime/baseline time |
|
||||||
|
| --- | --- | ---: | ---: | ---: |
|
||||||
|
| Apple M1, Darwin/arm64, 8 logical CPUs | 1.26.7 | 1,161.0 | 4,958.0 | 23.4% |
|
||||||
|
| Apple M1, Darwin/arm64, 8 logical CPUs | 1.27.0 | 1,149.5 | 4,800.5 | 23.9% |
|
||||||
|
| Xeon E5-2620 v2, Linux/amd64, 4-CPU container limit | 1.26.7 | 4,362.5 | 22,837.5 | 19.1% |
|
||||||
|
| Xeon E5-2620 v2, Linux/amd64, 4-CPU container limit | 1.27.0 | 3,877.5 | 22,003.5 | 17.6% |
|
||||||
|
|
||||||
|
All samples recorded **688 B/op and 21 allocations/op** for Sandwich Hime,
|
||||||
|
versus **1,600 B/op and 58 allocations/op** for `html/template`. Linux ran
|
||||||
|
natively in a read-only, network-disabled,
|
||||||
|
capability-dropped container limited to 4 GiB and 512 processes. macOS ran
|
||||||
|
natively. Exact OS patch/kernel versions were not captured in these benchmark
|
||||||
|
logs; do not infer them from the toolchain versions.
|
||||||
|
|
||||||
|
The baseline took approximately **4.2–5.7 times as long** on these lanes.
|
||||||
|
This does not establish whole-site speed, request throughput, a comparison
|
||||||
|
against every Go template engine, or a universal result on other workloads.
|
||||||
|
The samples are sequential, not a statistical study of concurrent application
|
||||||
|
load. No confidence interval or causal claim about the difference between the
|
||||||
|
two machines is implied. We do not claim to be the fastest engine.
|
||||||
|
|
||||||
|
### September 9 repeat check
|
||||||
|
|
||||||
|
A local repeat on Apple M1, Darwin/arm64, Go 1.27.0 used the same command and
|
||||||
|
runtime source unchanged from the public RC1 commit above. Output equivalence
|
||||||
|
passed. Median times were **1,034.5 ns/op**
|
||||||
|
for Hime and **4,044.0 ns/op** for the baseline (25.6%, approximately 3.9 times
|
||||||
|
as long for the baseline). Allocation counts and bytes remained 21/688 and
|
||||||
|
58/1,600 respectively. This is a local repeat, not a final-release artifact gate.
|
||||||
|
|
||||||
|
- Hime: `1028, 1021, 1028, 1031, 1033, 1097, 1063, 1065, 1041, 1036`
|
||||||
|
- Baseline: `4024, 4218, 4053, 4035, 4156, 4098, 4022, 3993, 4133, 3980`
|
||||||
|
|
||||||
|
The changed timing ratio is a useful reminder to rerun the workload on the
|
||||||
|
deployment hardware rather than treating a historical speedup as a guarantee.
|
||||||
|
|
||||||
|
## Reproduce
|
||||||
|
|
||||||
|
Check out the public commit above, select one of the recorded Go versions and,
|
||||||
|
from its `sando` directory, run:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
GOWORK=off go test -run '^TestBenchmarkCorpusEquivalent$' \
|
||||||
|
-bench '^BenchmarkV1Corpus' -benchmem -benchtime=2s -count=10
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `GOMAXPROCS=8` for the recorded Darwin lane or `GOMAXPROCS=4` for the Linux
|
||||||
|
lane, and document the actual hardware/resource limits. Compare within a host;
|
||||||
|
do not treat absolute times from different hardware as a controlled comparison.
|
||||||
|
|
||||||
|
## Recorded samples
|
||||||
|
|
||||||
|
Values below are `ns/op` in original sample order. Each vector contains ten
|
||||||
|
measurements. Raw-log digests identify the retained original evidence; these
|
||||||
|
vectors expose the measurements without publishing private runner metadata.
|
||||||
|
|
||||||
|
### Darwin/arm64, Go 1.26.7
|
||||||
|
|
||||||
|
- Hime: `1168, 1163, 1159, 1159, 1164, 1171, 1159, 1160, 1159, 1162`
|
||||||
|
- Baseline: `4771, 4802, 5117, 4846, 4885, 4928, 5017, 4988, 5036, 5105`
|
||||||
|
- Raw-log SHA-256: `7b68a643d685168dbd77cf3df617e8de59aa8063f6728de6c2d664173b0b05bd`
|
||||||
|
|
||||||
|
### Darwin/arm64, Go 1.27.0
|
||||||
|
|
||||||
|
- Hime: `1102, 1107, 1120, 1125, 1144, 1155, 1167, 1169, 1167, 1180`
|
||||||
|
- Baseline: `4686, 4924, 5132, 4750, 4822, 4741, 4791, 4787, 4810, 4822`
|
||||||
|
- Raw-log SHA-256: `b85481317da41bc63ad8afc317da2fd1075184405e7704a69714f42453d7dd4c`
|
||||||
|
|
||||||
|
### Linux/amd64, Go 1.26.7
|
||||||
|
|
||||||
|
- Hime: `4291, 4496, 4112, 4357, 4400, 3984, 4368, 4511, 4145, 4375`
|
||||||
|
- Baseline: `23663, 22300, 22364, 22946, 22863, 22812, 22078, 24476, 23041, 20900`
|
||||||
|
- Raw-log SHA-256: `277eee8f2488b0aa0b752584a46d3737df87defd311fd0bcf722aea81612a960`
|
||||||
|
|
||||||
|
### Linux/amd64, Go 1.27.0
|
||||||
|
|
||||||
|
- Hime: `4314, 3939, 3950, 3861, 3797, 3821, 3756, 3651, 3894, 4170`
|
||||||
|
- Baseline: `21346, 21015, 22272, 22066, 22198, 21059, 22473, 21318, 21941, 22447`
|
||||||
|
- Raw-log SHA-256: `a5d760c0fb76012b5923376dfcd80a1f1f44bf0043145f4352e4ec820aa475b3`
|
||||||
+4
-1
@@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
# Brand vocabulary
|
# Brand vocabulary
|
||||||
|
|
||||||
Use **Sandwich Hime** for the project and **Hime-san** as its friendly short form. Use `himesan` for the command, `.sando` for source, `.sando.go` for generated Go, and `sando` for the runtime.
|
Use **Sandwich Hime** as the primary project identity and **Hime-san** for its
|
||||||
|
compiler/tool personality within that project, not as a separate framework
|
||||||
|
brand. Use `himesan` for the command, `.sando` for source, `.sando.go` for
|
||||||
|
generated Go, and `sando` for the runtime.
|
||||||
|
|
||||||
Never call the project bare “Hime,” which can be confused with an existing Go framework. Never use `.san`; it belongs exclusively to the separate San language project. “Sando” evokes a sandwich and keeps both projects unmistakable in editors, tooling, and search results.
|
Never call the project bare “Hime,” which can be confused with an existing Go framework. Never use `.san`; it belongs exclusively to the separate San language project. “Sando” evokes a sandwich and keeps both projects unmistakable in editors, tooling, and search results.
|
||||||
|
|
||||||
|
|||||||
+11
-13
@@ -2,22 +2,20 @@
|
|||||||
|
|
||||||
# Compatibility policy
|
# Compatibility policy
|
||||||
|
|
||||||
## Current release-candidate contract
|
## v1 release contract
|
||||||
|
|
||||||
Compiler `v1.0.0-rc.1` and runtime `sando/v1.0.0-rc.1` are the current
|
This document defines the compatibility contract for compiler `v1.0.0` and
|
||||||
semantic-version prereleases. The intended v1 source syntax, generated API,
|
runtime `sando/v1.0.0`. Canonical Gitea tags and release announcements establish
|
||||||
runtime API, CLI behavior, diagnostics, and configuration schemas are frozen
|
version and artifact availability. Every correction receives a new immutable
|
||||||
except for release-blocking corrections. Every correction receives a new
|
version, documentation, and deterministic generation evidence.
|
||||||
immutable RC, documentation, and deterministic generation evidence.
|
|
||||||
|
|
||||||
The RC is not yet the final-v1 support commitment. Maintainers accept and
|
Maintainers accept and triage security reports within the boundary described in
|
||||||
triage security reports within the boundary described in
|
|
||||||
[SECURITY.md](../SECURITY.md). A security correction may intentionally fail
|
[SECURITY.md](../SECURITY.md). A security correction may intentionally fail
|
||||||
closed when retaining behavior would contradict a published safety guarantee.
|
closed when retaining behavior would contradict a published safety guarantee.
|
||||||
|
|
||||||
## Final-v1 contract
|
## v1 compatibility contract
|
||||||
|
|
||||||
At final v1, semantic versions apply independently to the compiler and
|
For v1, semantic versions apply independently to the compiler and
|
||||||
`sando` runtime. Generated files record the exact compiler version and
|
`sando` runtime. Generated files record the exact compiler version and
|
||||||
required runtime ABI. Patch releases do not intentionally change accepted
|
required runtime ABI. Patch releases do not intentionally change accepted
|
||||||
source semantics or generated public signatures. Minor releases may add
|
source semantics or generated public signatures. Minor releases may add
|
||||||
@@ -35,7 +33,7 @@ codes, `himesan.json`, and generated provenance. English diagnostic wording,
|
|||||||
internal packages, temporary paths, and compiler implementation details are not
|
internal packages, temporary paths, and compiler implementation details are not
|
||||||
stable API.
|
stable API.
|
||||||
|
|
||||||
An API deprecated after final v1 remains available for the rest of the v1
|
An API deprecated during v1 remains available for the rest of the v1
|
||||||
major line and may be removed in v2. A security correction may fail closed in
|
major line and may be removed in v2. A security correction may fail closed in
|
||||||
a patch release when retaining old behavior would contradict a published safety
|
a patch release when retaining old behavior would contradict a published safety
|
||||||
guarantee; that exception receives an advisory and migration note rather than a
|
guarantee; that exception receives an advisory and migration note rather than a
|
||||||
@@ -58,7 +56,7 @@ support change is announced in release notes before it takes effect.
|
|||||||
The following table is retained because the tests genuinely ran. It records a
|
The following table is retained because the tests genuinely ran. It records a
|
||||||
point-in-time Beta 1 campaign and does not define the current support matrix.
|
point-in-time Beta 1 campaign and does not define the current support matrix.
|
||||||
|
|
||||||
The current public evidence is the exact Beta 1 source at commit
|
The historical Beta 1 evidence is bound to source commit
|
||||||
`b7a84054d755e42285e50298e41e47f06a8325a5` (tree
|
`b7a84054d755e42285e50298e41e47f06a8325a5` (tree
|
||||||
`be9e118e38dfebed19f60403ededdadabe07d2aa`):
|
`be9e118e38dfebed19f60403ededdadabe07d2aa`):
|
||||||
|
|
||||||
@@ -80,7 +78,7 @@ module-cache path-selection ambiguity observed in the reverse order.
|
|||||||
|
|
||||||
## Portability feedback
|
## Portability feedback
|
||||||
|
|
||||||
Developers may try the beta on an unsupported target and report useful gaps. A
|
Developers may try Hime-san on an unsupported target and report useful gaps. A
|
||||||
good report includes the operating system and architecture, `go version`, the
|
good report includes the operating system and architecture, `go version`, the
|
||||||
exact command, and a minimal reproduction or diagnostic output. Ordinary
|
exact command, and a minimal reproduction or diagnostic output. Ordinary
|
||||||
portability reports belong on the canonical Gitea project. Suspected
|
portability reports belong on the canonical Gitea project. Suspected
|
||||||
|
|||||||
@@ -0,0 +1,115 @@
|
|||||||
|
<!-- SPDX-License-Identifier: AGPL-3.0-only -->
|
||||||
|
|
||||||
|
# Shared tools, commercial freedom
|
||||||
|
|
||||||
|
The design principle is **earn from useful work; preserve the shared freedoms
|
||||||
|
that made the work possible**. Commercial users are welcome. Sponsorship is
|
||||||
|
appreciated, not a license fee or a claim to project control. The intended users
|
||||||
|
are software developers and maintainers; v1 is a maintained compatibility
|
||||||
|
commitment, not a declaration that development has ended.
|
||||||
|
|
||||||
|
This document explains the [contribution agreement](../CLA.md) and official governance.
|
||||||
|
It is not a new software license, a downstream contract or a claim that every
|
||||||
|
future use or derivative of every component must be open source.
|
||||||
|
|
||||||
|
## Four different jobs
|
||||||
|
|
||||||
|
- The software license supplies recipients' permissions and obligations.
|
||||||
|
- The CLA records the rights for submitted contributions and reciprocal
|
||||||
|
promises by the named official steward; it is not a contract with every user.
|
||||||
|
- Governance determines official decisions, repository access and succession.
|
||||||
|
- The trademark policy addresses origin and endorsement, not ownership of
|
||||||
|
ideas or a veto on honest independent development.
|
||||||
|
|
||||||
|
Open-source commercial freedoms include competition. A subjective ban on
|
||||||
|
"greed," commercial hosting or businesses the maintainer dislikes would not
|
||||||
|
preserve those freedoms. We instead use concrete source-sharing, attribution,
|
||||||
|
no-hidden-relicensing and stewardship commitments. See the
|
||||||
|
[Open Source Definition](https://opensource.org/osd).
|
||||||
|
|
||||||
|
## The deliberate compiler/application boundary
|
||||||
|
|
||||||
|
The current [license map](../LICENSES.md) remains unchanged:
|
||||||
|
|
||||||
|
- Compiler/project material is AGPL-3.0-only. Distribution and covered modified
|
||||||
|
network use have source obligations under that license.
|
||||||
|
- The `sando` runtime is Apache-2.0. That is permissive, not network copyleft;
|
||||||
|
compliant closed-source derivatives are possible.
|
||||||
|
- User templates and generated applications may use their authors' chosen
|
||||||
|
terms, subject to input/dependency rights and the explicit output permission.
|
||||||
|
A proprietary paid website built with Hime is deliberately possible.
|
||||||
|
|
||||||
|
This protects the compiler's shared code without requiring its developers'
|
||||||
|
applications to become AGPL. Private production adoption is intentional: the
|
||||||
|
maintainer has confirmed this split for the release. The runtime's rendering,
|
||||||
|
escaping and URL-safety helpers are valuable implementation work; permissive
|
||||||
|
embedding makes them useful without imposing compiler licensing on applications.
|
||||||
|
It does not deliver "every part always open." Neither a later CLA nor a changed
|
||||||
|
README retracts existing recipients' licenses. No license conversion is proposed.
|
||||||
|
|
||||||
|
## Concrete cases
|
||||||
|
|
||||||
|
- A consultant sells a website built with Hime: allowed under the existing
|
||||||
|
application boundary; no mandatory payment, public badge or CLA for the client.
|
||||||
|
- A business distributes a modified compiler: it must follow the AGPL's
|
||||||
|
applicable source, licensing and notice requirements.
|
||||||
|
- A business operates a modified AGPL compiler with remote user interaction:
|
||||||
|
section 13 requires an offer of that version's Corresponding Source to those
|
||||||
|
interacting users. This is not necessarily every unrelated part of its service.
|
||||||
|
- A business merely hosts an unmodified program: hosting alone does not meet
|
||||||
|
section 13's modification condition. Wrappers and combined works require
|
||||||
|
fact-specific analysis, not an assumed universal SaaS prohibition.
|
||||||
|
- A company publishes a complying, independently branded fork: permitted,
|
||||||
|
even if it competes successfully and submits no changes upstream.
|
||||||
|
- A sponsor wants official control or private permission to close contributor
|
||||||
|
AGPL work: sponsorship grants neither; the steward covenant rejects
|
||||||
|
that official relicensing route. A fork cannot claim official endorsement.
|
||||||
|
|
||||||
|
These examples summarize boundaries, not legal opinions on a specific service.
|
||||||
|
The [AGPL text](https://opensource.org/license/agpl-3.0), including sections 2,
|
||||||
|
7, 10 and 13, controls actual covered uses. The
|
||||||
|
[Apache license](https://www.apache.org/licenses/LICENSE-2.0) controls the runtime.
|
||||||
|
The AGPL permits removing additional permissions from a redistributed copy;
|
||||||
|
do not promise that every independent fork must keep our output exception.
|
||||||
|
|
||||||
|
## What the contribution agreement adds
|
||||||
|
|
||||||
|
An identified contributor keeps ownership and grants only the recorded public
|
||||||
|
license plus an expressly authorized output permission. No alternate broad
|
||||||
|
sublicensing grant, copyright assignment, forced upstream labor, contributor
|
||||||
|
indemnity or proprietary buyout permission is collected. Patent rights and
|
||||||
|
termination follow the relevant established license.
|
||||||
|
|
||||||
|
The named Steward promises accurate attribution, preservation of contribution
|
||||||
|
records, public licensing of accepted material in official releases, no official
|
||||||
|
side deal to remove contributor copyleft, and written assumption of those duties
|
||||||
|
before a voluntary transfer of official stewardship. Those contractual promises
|
||||||
|
are not appended to downstream AGPL licenses. They cannot guarantee that a
|
||||||
|
project will never be abandoned, that a competitor will never outperform it,
|
||||||
|
or that every later actor is bound without agreement. Copyright enforcement
|
||||||
|
for contributor-owned work may require separate cooperation or authority.
|
||||||
|
|
||||||
|
Contributors remain free to license their own work elsewhere. This is reciprocal
|
||||||
|
stewardship rather than acquiring all rights from contributors. Existing public
|
||||||
|
licenses, usable source and the ability to fork preserve continuity if official
|
||||||
|
stewardship fails; governance and operational recovery still require real people.
|
||||||
|
|
||||||
|
## Deliberate adoption, without a barrier to learning
|
||||||
|
|
||||||
|
The AGPL compiler, Apache runtime and chosen application-license boundary is
|
||||||
|
settled. Version 1.0 of the contribution agreement is prospective: explicit
|
||||||
|
contributor and Steward acceptance is necessary, and no earlier contribution
|
||||||
|
is silently covered. The small recordkeeping process is in its section 9.
|
||||||
|
Nobody signs it merely to learn, download or build a private paid application.
|
||||||
|
|
||||||
|
The maintainer chose to proceed with this reviewed project-specific wording
|
||||||
|
without making outside legal review a release prerequisite. It is not an
|
||||||
|
ASF-approved agreement, a claim that counsel reviewed it, or a guaranteed
|
||||||
|
takeover shield. The [ASF ICLA](https://www.apache.org/licenses/icla.pdf) is a
|
||||||
|
useful comparison for contribution scope, authority and explicit acceptance;
|
||||||
|
its broader licensing grant is not imported into this agreement. Specific
|
||||||
|
future disputes or changes in jurisdiction may warrant professional advice.
|
||||||
|
|
||||||
|
The principle may inform other Gamertan projects, but each license, dependency
|
||||||
|
and contributor history needs its own decision. This document does not change
|
||||||
|
other repositories or turn "Canadian license" into a new license family.
|
||||||
@@ -216,7 +216,13 @@ resolution and the public Go proxy after normal proxy propagation. Future
|
|||||||
release decisions require fresh evidence for the maintained Linux/amd64 and
|
release decisions require fresh evidence for the maintained Linux/amd64 and
|
||||||
Darwin/arm64 targets rather than reusing this historical campaign.
|
Darwin/arm64 targets rather than reusing this historical campaign.
|
||||||
|
|
||||||
## Open assurance gaps
|
## Historical pre-RC assurance gaps
|
||||||
|
|
||||||
|
The list below preserves the pre-RC assessment, not current completion status.
|
||||||
|
RC.1 native verification and artifact publication are recorded in
|
||||||
|
`../CHANGELOG.md`; the final-release queue is `../ROADMAP.md`. The v1
|
||||||
|
dispositions below distinguish required exact-candidate evidence from explicitly
|
||||||
|
accepted recovery deferrals.
|
||||||
|
|
||||||
- delivery to `security@sandwichhime.com` is owner-confirmed through a
|
- delivery to `security@sandwichhime.com` is owner-confirmed through a
|
||||||
controlled domain catch-all; encrypted reporting, documented backup, and
|
controlled domain catch-all; encrypted reporting, documented backup, and
|
||||||
@@ -250,8 +256,8 @@ subject to exact-public-candidate review:
|
|||||||
|
|
||||||
| Gap | v1 disposition |
|
| Gap | v1 disposition |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Security mailbox delivery, backup, and recovery | Release blocker. Complete the delivery/reply and recovery drill before RC publication. Encrypted reporting may remain optional if the supported confidential channel and its limit are stated accurately. |
|
| Security mailbox delivery, backup, and recovery | Delivery/reply remains required and is maintainer-confirmed. Offline restoration and independent second-person recovery/verification are explicitly deferred assurance work for v1.0.0, not completed drills. Encrypted reporting may remain optional if the supported confidential channel and its limit are stated accurately. |
|
||||||
| Artifact signing, provenance, and key recovery | Release blocker. Complete deterministic native artifacts, Developer ID notarization, signed-tag rehearsal, and recovery evidence. |
|
| Artifact signing, provenance, and key recovery | Deterministic native artifacts, Developer ID notarization and signed-tag evidence remain required for the exact release candidate. Offline signing-key restoration and independent second-person recovery/verification are explicitly deferred for v1.0.0; successful signing does not prove recovery. |
|
||||||
| Maintained native matrix | Release blocker for Linux/amd64 and Darwin/arm64 only. Other architectures and operating systems are explicitly unsupported, not silently untested promises. |
|
| Maintained native matrix | Release blocker for Linux/amd64 and Darwin/arm64 only. Other architectures and operating systems are explicitly unsupported, not silently untested promises. |
|
||||||
| Real-browser parser and supervisor evidence | Release blocker. The repository-owned gate covers a generated typed document, parsed structure, hostile-value inertness, and supervisor behavior. Execute it against the exact public candidate on both maintained hosts before publication. |
|
| Real-browser parser and supervisor evidence | Release blocker. The repository-owned gate covers a generated typed document, parsed structure, hostile-value inertness, and supervisor behavior. Execute it against the exact public candidate on both maintained hosts before publication. |
|
||||||
| Compiler resource budgets | Accepted v1 boundary. The compiler is a trusted local build tool; operating-system and runner limits own CPU, memory, and input quotas. No hostile-input resource guarantee is made. |
|
| Compiler resource budgets | Accepted v1 boundary. The compiler is a trusted local build tool; operating-system and runner limits own CPU, memory, and input quotas. No hostile-input resource guarantee is made. |
|
||||||
|
|||||||
+26
-10
@@ -16,13 +16,23 @@ releases originate only from the reviewed canonical public tree.
|
|||||||
| Surface | Purpose | History and tags |
|
| Surface | Purpose | History and tags |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| Private development storage | Working branches, private review records, and historical context | identities and history are not exported; no public release tags |
|
| Private development storage | Working branches, private review records, and historical context | identities and history are not exported; no public release tags |
|
||||||
| Public Gitea `sandwich-hime` | Canonical sanitized source, contribution venue, module origin, and releases | fresh reviewed history; authoritative immutable `sando/vX.Y.Z` and `vX.Y.Z` tags |
|
| Public Gitea `sandwich-hime` | Canonical sanitized source, contribution venue, module origin, and releases | stable reviewed public history; authoritative immutable `sando/vX.Y.Z` and `vX.Y.Z` tags |
|
||||||
| GitHub `gamertan/sandwich-hime` | Discoverability and a convenient sanitized source snapshot | no private refs, force-mirrors, workflows, contribution authority, release artifacts, or semver tags |
|
| GitHub `gamertan/sandwich-hime` | Discoverability and a convenient sanitized source snapshot | no private refs, force-mirrors, workflows, contribution authority, release artifacts, or semver tags |
|
||||||
|
|
||||||
Each public update is exported through the exact committed allowlist, inspected,
|
Each public update is exported through the exact committed allowlist, inspected,
|
||||||
committed as a fresh public snapshot, and compared byte-for-byte with the
|
appended as a meaningful publication commit to the existing public `main`, and
|
||||||
reviewed export. GitHub receives that public tree only. It never receives
|
compared byte-for-byte with the reviewed export. Development commits may be
|
||||||
private history or an indiscriminate Git mirror.
|
squashed for publication; do not reset public ancestry for each version, merge
|
||||||
|
private history into public branches, or force-push existing releases. Versions
|
||||||
|
are immutable tags on that public history, not separate orphan branches.
|
||||||
|
Preserve contributor attribution, sign-offs and any output-permission grants
|
||||||
|
as required by [CONTRIBUTING.md](../CONTRIBUTING.md).
|
||||||
|
|
||||||
|
GitHub receives the reviewed public tree only. It never receives private
|
||||||
|
branches, private notes or an indiscriminate Git mirror. Branch names and
|
||||||
|
protected branches are not privacy boundaries: private development remains in
|
||||||
|
a separate access-controlled repository. The tutorial, tooling and website
|
||||||
|
remain independent projects, not archival branches of the compiler.
|
||||||
|
|
||||||
## Current readiness
|
## Current readiness
|
||||||
|
|
||||||
@@ -65,9 +75,11 @@ Other demonstrated controls include:
|
|||||||
- byte-identical generated output and independently reproduced release
|
- byte-identical generated output and independently reproduced release
|
||||||
archives across the maintained native evidence lanes.
|
archives across the maintained native evidence lanes.
|
||||||
|
|
||||||
The final immutable tags, clean direct/proxy installation, credential-recovery
|
The final immutable tags, clean direct/proxy installation and public observation
|
||||||
drills, and public observation period remain publication or post-publication
|
review remain publication or post-publication gates rather than properties
|
||||||
gates rather than properties that source code can prove by itself.
|
that source code can prove by itself. Offline restoration and second-person
|
||||||
|
recovery/verification are explicitly deferred assurance work for v1.0.0, as
|
||||||
|
recorded in [ROADMAP.md](../ROADMAP.md).
|
||||||
|
|
||||||
## Beta 1 publication lane
|
## Beta 1 publication lane
|
||||||
|
|
||||||
@@ -143,8 +155,9 @@ Required before security/native release-candidate work is declared complete:
|
|||||||
committed outputs are current under that exact binary.
|
committed outputs are current under that exact binary.
|
||||||
- [x] Produce deterministic archives/binaries, checksums, SBOMs, signatures,
|
- [x] Produce deterministic archives/binaries, checksums, SBOMs, signatures,
|
||||||
and source/build provenance from a clean sanitized canonical checkout.
|
and source/build provenance from a clean sanitized canonical checkout.
|
||||||
- [ ] Test release-key backup and two-person recovery for Gitea, domains,
|
- [x] Record the explicit v1.0.0 deferral of offline release-key restoration and
|
||||||
signing material, and publication instructions.
|
independent second-person recovery; retain the drills as assurance follow-ups
|
||||||
|
in [ROADMAP.md](../ROADMAP.md), without claiming they passed.
|
||||||
- [x] Make evidence gates validate content and commit identity rather than only
|
- [x] Make evidence gates validate content and commit identity rather than only
|
||||||
the presence of non-empty files.
|
the presence of non-empty files.
|
||||||
- [ ] Rehearse runtime-first publication and rollback without creating public
|
- [ ] Rehearse runtime-first publication and rollback without creating public
|
||||||
@@ -162,7 +175,10 @@ Required before security/native release-candidate work is declared complete:
|
|||||||
5. Operate the official Sandwich Hime website on the RC runtime for a 14-day
|
5. Operate the official Sandwich Hime website on the RC runtime for a 14-day
|
||||||
observation period with no unresolved Hime render, security, accessibility,
|
observation period with no unresolved Hime render, security, accessibility,
|
||||||
or rollback regression. This is product dogfooding, not a dependency on
|
or rollback regression. This is product dogfooding, not a dependency on
|
||||||
another application's private repository.
|
another application's private repository. For v1.0.0 the maintainer accepted
|
||||||
|
the existing live-use experience despite missing timed checkpoint notes;
|
||||||
|
see [ROADMAP.md](../ROADMAP.md). This does not assert the missing reviews
|
||||||
|
occurred or waive a reproduced Hime defect.
|
||||||
6. Fix findings in a new RC; restart the observation period when the affected
|
6. Fix findings in a new RC; restart the observation period when the affected
|
||||||
boundary warrants it.
|
boundary warrants it.
|
||||||
7. Finalize the changelog, supported-version table, migration notes, release
|
7. Finalize the changelog, supported-version table, migration notes, release
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ func buildHimesanBinary(t *testing.T, repositoryRoot, name, linkerFlags string)
|
|||||||
name += ".exe"
|
name += ".exe"
|
||||||
}
|
}
|
||||||
path := filepath.Join(t.TempDir(), name)
|
path := filepath.Join(t.TempDir(), name)
|
||||||
arguments := []string{"build", "-trimpath"}
|
arguments := []string{"build", "-buildvcs=false", "-trimpath"}
|
||||||
if linkerFlags != "" {
|
if linkerFlags != "" {
|
||||||
arguments = append(arguments, "-ldflags", linkerFlags)
|
arguments = append(arguments, "-ldflags", linkerFlags)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,24 @@
|
|||||||
|
|
||||||
`gamertan.com/sandwich-hime/sando` is the independent Apache-2.0 runtime ABI for Go generated by Sandwich Hime. It contains no compiler, router, HTTP server, middleware, reflection registry, project discovery, or development supervisor.
|
`gamertan.com/sandwich-hime/sando` is the independent Apache-2.0 runtime ABI for Go generated by Sandwich Hime. It contains no compiler, router, HTTP server, middleware, reflection registry, project discovery, or development supervisor.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
This is the source and documentation for runtime `sando/v1.0.0`, paired with
|
||||||
|
compiler `v1.0.0` without changing runtime ABI `sando.v1`. Canonical Gitea tags
|
||||||
|
and release announcements establish availability. In an application module,
|
||||||
|
add the runtime first, then install the compiler:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
go get gamertan.com/sandwich-hime/sando@v1.0.0
|
||||||
|
go install gamertan.com/sandwich-hime/cmd/himesan@v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
The runtime-first order avoids parent/nested-module path-selection ambiguity.
|
||||||
|
The compiler is a development tool and is not a runtime dependency of the
|
||||||
|
generated application. Compiler and runtime remain independently versioned.
|
||||||
|
|
||||||
|
## API and licensing
|
||||||
|
|
||||||
The stable surface is:
|
The stable surface is:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|||||||
@@ -16,6 +16,11 @@ Linux/amd64 and macOS/arm64.
|
|||||||
- `sign-notarize-macos.sh` is a deliberately manual boundary. It requires the explicitly approved unsigned archive digest, uses Cole's Developer ID and Keychain-held notary profile, regenerates provenance and checksums for the changed signed Mach-O bytes, and produces a signed, notarized, and stapled DMG. The native runner receives neither credential.
|
- `sign-notarize-macos.sh` is a deliberately manual boundary. It requires the explicitly approved unsigned archive digest, uses Cole's Developer ID and Keychain-held notary profile, regenerates provenance and checksums for the changed signed Mach-O bytes, and produces a signed, notarized, and stapled DMG. The native runner receives neither credential.
|
||||||
- `verify-real-browser.sh` is opt-in release evidence. It runs the development client in an actual reviewed Chrome/Chromium binary, exercising CSP-restricted execution, SSE diagnostics, reload, and fragment/API exclusions, then reruns the process cleanup integration cases. Chrome is not a normal build or consumer dependency.
|
- `verify-real-browser.sh` is opt-in release evidence. It runs the development client in an actual reviewed Chrome/Chromium binary, exercising CSP-restricted execution, SSE diagnostics, reload, and fragment/API exclusions, then reruns the process cleanup integration cases. Chrome is not a normal build or consumer dependency.
|
||||||
|
|
||||||
|
The export scanner also rejects Markdown references to known excluded operator
|
||||||
|
documentation roots. It is a bounded publication check, not a complete Markdown
|
||||||
|
link checker or a substitute for inspecting the exported diff. Source-code
|
||||||
|
fixtures can still describe the scanner's rejected paths.
|
||||||
|
|
||||||
The canonical Linux and macOS CI gates run the contract and public-snapshot
|
The canonical Linux and macOS CI gates run the contract and public-snapshot
|
||||||
checks plus bounded fuzz sessions for the parser/context compiler, Go-aware
|
checks plus bounded fuzz sessions for the parser/context compiler, Go-aware
|
||||||
delimiter scanner, URL policy, and LSP boundaries. The compiler target also
|
delimiter scanner, URL policy, and LSP boundaries. The compiler target also
|
||||||
|
|||||||
+11
-6
@@ -38,13 +38,18 @@ mkdir -p -- "$output"
|
|||||||
./scripts/check-licenses.sh
|
./scripts/check-licenses.sh
|
||||||
./scripts/test-public-snapshot.sh
|
./scripts/test-public-snapshot.sh
|
||||||
HIMESAN_RACE=1 ./scripts/verify.sh
|
HIMESAN_RACE=1 ./scripts/verify.sh
|
||||||
go test ./internal/compiler -run '^$' -fuzz '^FuzzCompileNeverPanics$' -fuzztime=15s
|
|
||||||
go test ./internal/compiler -run '^$' -fuzz '^FuzzGoDelimiterNeverPanics$' -fuzztime=15s
|
|
||||||
go test ./internal/lsp -run '^$' -fuzz '^FuzzFrameReaderNeverPanics$' -fuzztime=15s
|
|
||||||
go test ./internal/lsp -run '^$' -fuzz '^FuzzDocumentPositionNeverPanics$' -fuzztime=15s
|
|
||||||
(
|
(
|
||||||
cd sando
|
fuzz_cache=$(mktemp -d "${TMPDIR:-/tmp}/himesan-fuzz-cache.XXXXXXXX")
|
||||||
go test -run '^$' -fuzz '^FuzzWriteURLPolicy$' -fuzztime=15s
|
trap 'rm -rf -- "$fuzz_cache"' EXIT HUP INT TERM
|
||||||
|
export GOCACHE="$fuzz_cache"
|
||||||
|
go test ./internal/compiler -run '^$' -fuzz '^FuzzCompileNeverPanics$' -fuzztime=15s -parallel=1
|
||||||
|
go test ./internal/compiler -run '^$' -fuzz '^FuzzGoDelimiterNeverPanics$' -fuzztime=15s -parallel=1
|
||||||
|
go test ./internal/lsp -run '^$' -fuzz '^FuzzFrameReaderNeverPanics$' -fuzztime=15s -parallel=1
|
||||||
|
go test ./internal/lsp -run '^$' -fuzz '^FuzzDocumentPositionNeverPanics$' -fuzztime=15s -parallel=1
|
||||||
|
(
|
||||||
|
cd sando
|
||||||
|
go test -run '^$' -fuzz '^FuzzWriteURLPolicy$' -fuzztime=15s -parallel=1
|
||||||
|
)
|
||||||
)
|
)
|
||||||
go run golang.org/x/vuln/cmd/govulncheck@v1.6.0 ./...
|
go run golang.org/x/vuln/cmd/govulncheck@v1.6.0 ./...
|
||||||
(
|
(
|
||||||
|
|||||||
@@ -72,6 +72,9 @@ snapshot_validate_export_tree() {
|
|||||||
local provider_token='AKIA[0-9A-Z]{16}|(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}|glpat-[A-Za-z0-9_-]{20,}|xox[baprs]-[A-Za-z0-9-]{20,}'
|
local provider_token='AKIA[0-9A-Z]{16}|(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}|glpat-[A-Za-z0-9_-]{20,}|xox[baprs]-[A-Za-z0-9-]{20,}'
|
||||||
local private_commit_id='(private development (source|baseline)|private (development )?(commit|source))[^[:cntrl:]]*[0-9a-f]{12,64}'
|
local private_commit_id='(private development (source|baseline)|private (development )?(commit|source))[^[:cntrl:]]*[0-9a-f]{12,64}'
|
||||||
local private_repository='sandwich-hime-''dev'
|
local private_repository='sandwich-hime-''dev'
|
||||||
|
# Known excluded documentation roots, not ordinary prose about private work.
|
||||||
|
# Scope this to Markdown: exported scanner code legitimately names its policy.
|
||||||
|
local private_markdown_ref='(^|[^[:alnum:]_./%-])([.]{1,2}/)*(private|history)/'
|
||||||
|
|
||||||
if find "$root" -type l -print -quit | grep -q .; then
|
if find "$root" -type l -print -quit | grep -q .; then
|
||||||
echo "public snapshot: symbolic links are forbidden" >&2
|
echo "public snapshot: symbolic links are forbidden" >&2
|
||||||
@@ -117,5 +120,13 @@ snapshot_validate_export_tree() {
|
|||||||
echo "public snapshot: private repository indicator in $rel" >&2
|
echo "public snapshot: private repository indicator in $rel" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
case $rel in
|
||||||
|
*.[mM][dD] | *.[mM][aA][rR][kK][dD][oO][wW][nN])
|
||||||
|
if LC_ALL=C grep -Eiq -- "$private_markdown_ref" "$file"; then
|
||||||
|
echo "public snapshot: excluded documentation reference in $rel" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
done < <(find "$root" -type f -print0 | LC_ALL=C sort -z)
|
done < <(find "$root" -type f -print0 | LC_ALL=C sort -z)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ SECURITY.md
|
|||||||
SPEC.md
|
SPEC.md
|
||||||
TRADEMARKS.md
|
TRADEMARKS.md
|
||||||
cmd/himesan/contract_test.go
|
cmd/himesan/contract_test.go
|
||||||
|
cmd/himesan/doc.go
|
||||||
cmd/himesan/main.go
|
cmd/himesan/main.go
|
||||||
cmd/himesan/main_test.go
|
cmd/himesan/main_test.go
|
||||||
cmd/himesan-release/main.go
|
cmd/himesan-release/main.go
|
||||||
@@ -35,11 +36,13 @@ contracts/himesan-operation-output-v1.schema.json
|
|||||||
contracts/himesan-version-output-v1.schema.json
|
contracts/himesan-version-output-v1.schema.json
|
||||||
docs/ARCHITECTURE.md
|
docs/ARCHITECTURE.md
|
||||||
docs/BENCHMARKS.md
|
docs/BENCHMARKS.md
|
||||||
|
docs/BENCHMARK_RESULTS.md
|
||||||
docs/BRAND.md
|
docs/BRAND.md
|
||||||
docs/COMPATIBILITY.md
|
docs/COMPATIBILITY.md
|
||||||
docs/DEVELOPMENT_SERVER.md
|
docs/DEVELOPMENT_SERVER.md
|
||||||
docs/DIAGNOSTICS.md
|
docs/DIAGNOSTICS.md
|
||||||
docs/LANGUAGE_SERVER.md
|
docs/LANGUAGE_SERVER.md
|
||||||
|
docs/LICENSING_INTENT.md
|
||||||
docs/SECURITY_EVIDENCE.md
|
docs/SECURITY_EVIDENCE.md
|
||||||
docs/THREAT_MODEL.md
|
docs/THREAT_MODEL.md
|
||||||
docs/V1_RELEASE_PLAN.md
|
docs/V1_RELEASE_PLAN.md
|
||||||
|
|||||||
@@ -245,13 +245,17 @@ done
|
|||||||
HIMESAN_RACE=1 ./scripts/verify.sh
|
HIMESAN_RACE=1 ./scripts/verify.sh
|
||||||
|
|
||||||
printf '\n==> bounded compiler fuzz gates\n'
|
printf '\n==> bounded compiler fuzz gates\n'
|
||||||
go test ./internal/compiler -run '^$' -fuzz '^FuzzCompileNeverPanics$' -fuzztime=20s
|
|
||||||
go test ./internal/compiler -run '^$' -fuzz '^FuzzGoDelimiterNeverPanics$' -fuzztime=20s
|
|
||||||
go test ./internal/lsp -run '^$' -fuzz '^FuzzFrameReaderNeverPanics$' -fuzztime=20s
|
|
||||||
go test ./internal/lsp -run '^$' -fuzz '^FuzzDocumentPositionNeverPanics$' -fuzztime=20s
|
|
||||||
(
|
(
|
||||||
cd sando
|
export GOCACHE="$artifact_dir/fuzz-go-build-cache"
|
||||||
go test -run '^$' -fuzz '^FuzzWriteURLPolicy$' -fuzztime=20s
|
mkdir -p "$GOCACHE"
|
||||||
|
go test ./internal/compiler -run '^$' -fuzz '^FuzzCompileNeverPanics$' -fuzztime=20s -parallel=1
|
||||||
|
go test ./internal/compiler -run '^$' -fuzz '^FuzzGoDelimiterNeverPanics$' -fuzztime=20s -parallel=1
|
||||||
|
go test ./internal/lsp -run '^$' -fuzz '^FuzzFrameReaderNeverPanics$' -fuzztime=20s -parallel=1
|
||||||
|
go test ./internal/lsp -run '^$' -fuzz '^FuzzDocumentPositionNeverPanics$' -fuzztime=20s -parallel=1
|
||||||
|
(
|
||||||
|
cd sando
|
||||||
|
go test -run '^$' -fuzz '^FuzzWriteURLPolicy$' -fuzztime=20s -parallel=1
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
printf '\n==> vulnerability scan (pinned golang.org/x/vuln v1.6.0)\n'
|
printf '\n==> vulnerability scan (pinned golang.org/x/vuln v1.6.0)\n'
|
||||||
|
|||||||
@@ -77,6 +77,33 @@ mkdir -p "$safe_tree"
|
|||||||
printf 'ordinary reviewed source\n' >"$safe_tree/source.go"
|
printf 'ordinary reviewed source\n' >"$safe_tree/source.go"
|
||||||
snapshot_validate_export_tree "$safe_tree"
|
snapshot_validate_export_tree "$safe_tree"
|
||||||
|
|
||||||
|
# Public prose and ordinary public links are allowed. Source-code policy
|
||||||
|
# fixtures may name excluded roots without becoming documentation links.
|
||||||
|
printf '%s\n' 'Private development records remain separate.' \
|
||||||
|
'[Releases](docs/releases.md)' '[History](https://example.invalid/history/releases)' \
|
||||||
|
'[Design](private-design.md)' >"$safe_tree/README.md"
|
||||||
|
printf '%s\n' '// Reject private/notes.md in an export policy.' >"$safe_tree/scanner_test.go"
|
||||||
|
snapshot_validate_export_tree "$safe_tree"
|
||||||
|
|
||||||
|
markdown_tree=$temporary/markdown
|
||||||
|
mkdir -p "$markdown_tree"
|
||||||
|
for reference in '[Audit](private/audit.md)' '[Audit](./private/audit.md#resume)' \
|
||||||
|
'[Audit](../../private/audit.md)' '[audit]: ../private/audit.md' '[audit]:private/audit.md' \
|
||||||
|
'`private/audit.md`' '<a href="private/audit.md">Audit</a>' \
|
||||||
|
'[Archive](history/story.md)' '[Audit](PRIVATE/AUDIT.md)'; do
|
||||||
|
printf '%s\n' "$reference" >"$markdown_tree/README.Md"
|
||||||
|
if snapshot_validate_export_tree "$markdown_tree" >"$temporary/markdown.log" 2>&1; then
|
||||||
|
echo "excluded documentation reference was accepted: $reference" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
grep -q 'excluded documentation reference in README.Md' "$temporary/markdown.log"
|
||||||
|
done
|
||||||
|
mv "$markdown_tree/README.Md" "$markdown_tree/notes.markdown"
|
||||||
|
if snapshot_validate_export_tree "$markdown_tree" >/dev/null 2>&1; then
|
||||||
|
echo "excluded reference in .markdown documentation was accepted" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
empty_tree=$temporary/empty
|
empty_tree=$temporary/empty
|
||||||
mkdir -p "$empty_tree"
|
mkdir -p "$empty_tree"
|
||||||
: >"$empty_tree/empty.txt"
|
: >"$empty_tree/empty.txt"
|
||||||
|
|||||||
Reference in New Issue
Block a user