# Kopioitava tehtävänanto sovellusavustajalle

Kopioi koko alla oleva lohko avustajalle. Täytä lähtötilanne, sovelluksen tiedot
ja vaatimus. Tämä sisältää tarvittavan julkaisusopimuksen myös silloin, kun
avustajalla ei ole pääsyä Yrttiserver-projektiin tai kotiverkkoon.
Laajemmat perustelut ja esimerkit: [julkaisuohje](./application-publishing.md).
Sopimus tarkistettu 5.11.2026.

Julkinen, AI:n luettavissa oleva osoite on
<https://ohjeet.yrttitarha.giize.com/help/app-generation-prompt.md>.

```text
Tee web-sovellus suoraan Yrttiserverin nykyisen julkaisuwizardin hyväksymään muotoon.

LÄHTÖTIEDOT (täytä ennen tehtävän antamista)
- Lähtötilanne: UUSI sovellus / OLEMASSA OLEVA projekti (valitse toinen)
- Projektin sijainti tai repo:
- Sovelluksen pysyvä id:
- Näyttönimi:
- Uuden sovelluksen toiminnalliset vaatimukset / nykyisestä säilytettävät toiminnot:
- Tunnetut tietokanta-, API-, runtime- ja datavaatimukset:

TYÖTAPA
UUSI: valitse vaatimuksiin sopiva toteutus; suosi static-mallia, jos omaa palvelinta
ei tarvita. OLEMASSA OLEVA: kartoita nykyinen rakenne ja tee pienimmät tarvittavat
julkaisumuutokset. Säilytä toimiva kehityskäyttö. Älä lisää pelihuoneita,
kirjautumista tai muita uusia toimintoja pelkästään julkaisun vuoksi.

JULKAISUSOPIMUS v1
1. Tuota valmis ZIP. Wizard ei rakenna lähdekoodia, asenna riippuvuuksia/runtimeja,
   aja asennus-/migraatioskriptejä eikä julkaise kontteja/Compose-kokonaisuuksia.
   Nykyinen process-malli tukee yhtä pääpalvelinprosessia ja yhtä HTTP-porttia.
   Jos tämä ei riitä, raportoi rajoitus; älä kierrä sitä shell-käynnistimellä.
2. ZIPin juuressa on yrtti.json ilman projektin nimistä ylimääräistä kansiota.
   Ainoat sallitut ylätason kentät ovat schemaVersion, id, displayName, runtime,
   healthPath ja publicDirectory. Runtime-kentät ovat kind, command ja image;
   image ei kuulu tuettuun static/process-julkaisuun. Älä lisää version-, env-,
   build-, scripts-, ports-, volumes- tai resources-kenttiä. Ei JSON-kommentteja.
3. schemaVersion=1. id vastaa regexiä ^[a-z][a-z0-9-]{1,30}$;
   admin, deploy ja skillbuster ovat varattuja. displayName ei tyhjä, max 100 merkkiä.
   id säilyy päivityksissä ja määrittää https://<id>.yrttitarha.giize.com/-osoitteen.
   healthPath oletus /, alkaa yhdellä /:llä, max 256 merkkiä, ei ohjausmerkkejä.
4. STATIC-kuvaus:
   {"schemaVersion":1,"id":"oma-peli","displayName":"Oma peli",
    "runtime":{"kind":"static"},"healthPath":"/","publicDirectory":"public"}
   Pakkaa tuotantobuild public/-hakemistoon, jossa on index.html. Ei backendia.
   publicDirectory on suhteellinen hakemisto (merkit A-Z, a-z, 0-9, _, ., /, -).
   Ei command- tai image-kenttää. History-fallbackia ei ole: käytä hash-reititystä,
   oikeita HTML-polkuja tai tarvittaessa process-mallia. Kaikki public-sisältö on julkista.
5. PROCESS-kuvaus (Node-esimerkki):
   {"schemaVersion":1,"id":"oma-palvelu","displayName":"Oma palvelu",
    "runtime":{"kind":"process","command":["/usr/bin/node","server.js"]},
    "healthPath":"/health"}
   Pakkaa valmis tuotantopalvelin, frontend ja kaikki Linux x64 -tuotantoriippuvuudet.
   Työhakemisto on julkaisun juuri. command on ohjelma ja argumentit (1–32,
   jokainen ei-tyhjä, max 2048 merkkiä, ei ohjausmerkkejä), ei shell-lause eikä
   ympäristömuuttujien korvaus. Käytä /usr/bin- tai /bin-tulkkia tai omaa suhteellista
   Linux-binääriä. Oma suoraan ajettava binääri tarvitsee ZIPin Unix-executable-bitit.
6. Palvelin lukee HOST- ja PORT-ympäristömuuttujat ja palvelee HTTP:tä yhdessä
   osoitteessa. HOST=127.0.0.1, PORT annetaan dynaamisesti. Nginx hoitaa HTTPS:n.
   Tarjoa frontend, API ja mahdollinen WebSocket samassa portissa, omat moduulit
   säilyttäen. Ei dev-/preview-palvelinta tai rakentamista käynnistyksen aikana.
   /health palauttaa nopeasti HTTP 200 ilman kirjautumista/ohjausta, kun palvelu
   on valmis. Pidä pääprosessi käynnissä, lokita stdout/stderr, käsittele SIGTERM.
7. Käytä selaimessa saman originin suhteellisia API-osoitteita ja sivun protokollasta
   johdettua ws/wss-osoitetta. Ei localhostia, LAN-IP:tä tai sisäisiä portteja bundleen.
   SPA-fallback process-mallissa on sovelluksen vastuulla. Luota proxyotsakkeisiin
   vain loopback-proxylta. Pitkäikäisen WS:n heartbeat huomioi 300 s lukuaikarajan.
8. Julkaisuhakemisto on vain luettava. Kaikki pysyvä muuttuva data DATA_DIRiin.
   HOST, PORT, ASPNETCORE_URLS ja DATA_DIR tulevat wizardilta; älä ohita niitä.
   Muut ympäristöasetukset ja salaisuudet syötetään erikseen wizardissa. NODE_ENV
   ja PUBLIC_ORIGIN eivät tule automaattisesti. Asetusnimi ^[A-Z][A-Z0-9_]{0,63}$,
   max 100 asetusta, arvo max 8192 merkkiä, ei ohjausmerkkejä. Selainbuildin
   asetukset ovat julkisia eikä wizard muuta rakennettua bundlea jälkikäteen.
9. Palvelin on Debian Linux x64; dokumentoitu havainto 5.11.2026: Node 20.19.2,
   .NET/ASP.NET Core 10.0.12 ja Python 3. Varmista tarvittava yhteensopivuus.
   Älä oleta lisäruntimea tai pakkaa Windows-node_modules/venv/EXE-tiedostoja.
   .NETissä käytä valmista linux-x64-julkaisua ja /usr/bin/dotnet + DLL-käynnistystä.
   Pelkkä package.json/requirements.txt ei korvaa asennettuja riippuvuuksia.
   Native-riippuvuudet on rakennettava kohteen Linux/arkkitehtuuri/runtime-versiolle.
10. Nykyinen prosessiraja: 384 MiB muistia, CPUQuota 75 %, TasksMax 128; ei rootia.
    Wizard ei luo tietokantoja tai hoida datavarmistuksia. SQLite DATA_DIRissä on
    mahdollinen. Koodin palautus ei peru data- tai tietokantamuutoksia.
11. ZIP max 250 MiB, purettuna max 1 GiB, max 10000 entryä, yrtti.json max 64 KiB.
    Poluissa /-erottimet, ei linkkejä/erikoistiedostoja, absoluuttisia polkuja,
    tyhjiä/./..-osia, kaksoiskappaleita (myös kirjainkoosta riippumatta), \- tai
    :-merkkiä tai ohjausmerkkejä. Linuxissa kirjainkoko ratkaisee.
    Pakkaa vain tarvittava tuotantosisältö; ei .git-, .env-/ .env.*-tiedostoja,
    avaimia, tunnuksia, käyttäjädataa tai kehitysympäristöä.

LUOVUTETTAVAT TULOKSET
- Sovellus ja oikea yrtti.json; säilytä alkuperäisen projektin toiminta.
- Toistettava, virheeseen pysähtyvä paketointikomento/-skripti: uusi puhdas
  julkaisuhakemisto, tuotantobuild ja riippuvuudet, rajattu sisältö, lopullinen ZIP.
- Sovelluksen READMEhen täsmälliset build-, testaus- ja paketointikomennot,
  tarvittava runtime, wizard-asetusten nimet/merkitykset ilman salaisia arvoja,
  data/migraatio/päivitysvaikutukset ja ZIPin sijainti.
- Aja olennaiset testit ja tuotantobuild. Testaa purettu paketti erillään
  lähdepuusta Linuxissa: prosessin ympäristömuuttujat, health, data ja resurssit.
  Testaa selaimessa reititys, assetit, API ja mahdollinen WSS. Jos Linuxia,
  palvelinta tai julkista HTTPS:ää ei ole käytettävissä, merkitse koe tekemättömäksi.
- Raportoi ZIPin absoluuttinen polku, koko, SHA-256, muutosten perusteet ja
  varmennuksen tulokset. Älä kutsu lähdekoodiarkistoa valmiiksi julkaisupaketiksi.
- Älä julkaise palvelimelle tai muuta palvelinta tämän generointitehtävän perusteella.
```
