<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Eliezer Enrique Rangel</title>
    <description>The latest articles on Forem by Eliezer Enrique Rangel (@eliezer_enriquerangel).</description>
    <link>https://forem.com/eliezer_enriquerangel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3540094%2Fad43032b-8703-4de5-8bdb-71b787525478.jpg</url>
      <title>Forem: Eliezer Enrique Rangel</title>
      <link>https://forem.com/eliezer_enriquerangel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/eliezer_enriquerangel"/>
    <language>en</language>
    <item>
      <title>GitHub Copilot + Archivos de Instrucciones: La forma profesional de automatizar commits en VS Code</title>
      <dc:creator>Eliezer Enrique Rangel</dc:creator>
      <pubDate>Tue, 30 Sep 2025 16:25:31 +0000</pubDate>
      <link>https://forem.com/eliezer_enriquerangel/github-copilot-archivos-de-instrucciones-la-forma-profesional-de-automatizar-commits-en-vs-code-5dm5</link>
      <guid>https://forem.com/eliezer_enriquerangel/github-copilot-archivos-de-instrucciones-la-forma-profesional-de-automatizar-commits-en-vs-code-5dm5</guid>
      <description>&lt;h2&gt;
  
  
  Problema
&lt;/h2&gt;

&lt;p&gt;Las configuraciones inline en JSON se vuelven largas, difíciles de mantener, poco compartibles y limitadas en formato.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solución
&lt;/h2&gt;

&lt;p&gt;Usar &lt;strong&gt;archivos de instrucciones Markdown externos&lt;/strong&gt; y referenciarlos desde la configuración de VS Code. Esta función permite definir reglas de generación de mensajes y versionarlas junto al código.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fskp3qlveo4rqtlw8pw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fskp3qlveo4rqtlw8pw.jpg" alt=" " width="672" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementación
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Apunta VS Code a tu archivo de instrucciones
&lt;/h3&gt;

&lt;p&gt;Edita &lt;code&gt;.vscode/settings.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"github.copilot.chat.commitMessageGeneration.instructions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"file"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".github/instructions/commit-messages.instructions.md"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta clave carga instrucciones desde archivo y las adjunta al prompt que Copilot usa para generar el commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Crea el archivo &lt;code&gt;.github/instructions/commit-messages.instructions.md&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Usa &lt;em&gt;frontmatter&lt;/em&gt; &lt;code&gt;applyTo&lt;/code&gt; para controlar el ámbito. Ejemplo global:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;applyTo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;**'&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Git Commit Message Generator&lt;/span&gt;

Generate a conventional commit message in English following this exact format:

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;type(scope): message

Detailed description of changes made, including context,
reason for changes, and any important implementation details.
This can be multiple lines and much more comprehensive.

Files modified:
- path/to/file1.ext
- path/to/file2.ext
- path/to/file3.ext
&lt;span class="p"&gt;```&lt;/span&gt;

&lt;span class="gu"&gt;## Requirements:&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Types**&lt;/span&gt;: feat, fix, docs, style, refactor, perf, test, chore
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Scopes**&lt;/span&gt;: core, operations, shared
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Message**&lt;/span&gt;: imperative mood, lowercase, no period, &lt;span class="gs"&gt;**max 48 chars**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Description**&lt;/span&gt;: detailed explanation of changes, context, and reasoning
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Files**&lt;/span&gt;: bulleted list of modified files with relative paths
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Language**&lt;/span&gt;: English only

&lt;span class="gu"&gt;## Examples:&lt;/span&gt;
&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;feat(core): add user authentication

Implemented JWT-based authentication system with login,
logout, and token refresh functionality. Added middleware
for route protection and user session management.

Files modified:
- apps/core/src/auth/auth.service.ts
- apps/core/src/auth/auth.controller.ts
- apps/core/src/middleware/auth.middleware.ts
&lt;span class="p"&gt;```&lt;/span&gt;
&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;fix(operations): resolve invoice calculation bug

Fixed rounding error in tax calculation that caused
discrepancies in invoice totals. Updated calculation
logic to use proper decimal precision.

Files modified:
- apps/operations/src/invoices/invoice.service.ts
- apps/operations/src/invoices/invoice.test.ts
&lt;span class="p"&gt;```&lt;/span&gt;
Analyze the staged changes and generate ONE commit message following these rules exactly.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3) Estructura recomendada
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.github/
└── instructions/
    ├── commit-messages.instructions.md
    ├── pr-review.instructions.md
    └── code-review.instructions.md
.vscode/
└── settings.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Uso en el flujo de trabajo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Desde Source Control (UI):&lt;/strong&gt; en el campo del mensaje, pulsa el ícono ✨ &lt;em&gt;Generate Commit Message with Copilot&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Desde la paleta de comandos:&lt;/strong&gt; ejecuta “Generate Commit Message with Copilot”.&lt;br&gt;&lt;br&gt;
Para crear un atajo de teclado, añade en &lt;code&gt;keybindings.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+alt+m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"github.copilot.git.generateCommitMessage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"scmProvider == 'git'"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Ejemplo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cambios:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ajustes en autenticación JWT&lt;/li&gt;
&lt;li&gt;Actualización de tests&lt;/li&gt;
&lt;li&gt;Documentación&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Commit generado:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat(auth): implement JWT token refresh

Added automatic token refresh mechanism to prevent
session expiration. Implemented refresh token rotation
and secure storage. Updated authentication middleware
to handle token refresh transparently.

Files modified:
- apps/core/src/auth/auth.service.ts
- apps/core/src/auth/jwt.middleware.ts
- apps/core/src/auth/auth.test.ts
- docs/authentication.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Integración con control de calidad
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Commitlint
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// commitlint.config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@commitlint/config-conventional&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scope-enum&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;always&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;operations&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shared&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;subject-max-length&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;always&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Husky (hook &lt;code&gt;commit-msg&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# husky v9&lt;/span&gt;
npm i &lt;span class="nt"&gt;-D&lt;/span&gt; @commitlint/cli @commitlint/config-conventional husky
npx husky init
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"npx --no -- commitlint --edit &lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .husky/commit-msg
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x .husky/commit-msg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Buenas prácticas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Versiona y revisa los &lt;code&gt;.instructions.md&lt;/code&gt; por PR.&lt;/li&gt;
&lt;li&gt;Mantén ejemplos mínimos y reales.&lt;/li&gt;
&lt;li&gt;Si el resultado es inconsistente, endurece las reglas y añade ejemplos concretos.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No aplica instrucciones:&lt;/strong&gt; confirma la ruta del archivo en &lt;code&gt;settings.json&lt;/code&gt; y que Copilot Chat esté actualizado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No aparece/genera el mensaje:&lt;/strong&gt; usa el botón ✨ en Source Control o la paleta; comprueba que hay cambios &lt;em&gt;staged&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comportamientos erráticos:&lt;/strong&gt; revisa issues abiertos del repositorio de la extensión de Copilot en VS Code.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Recursos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prompt files de VS Code: &lt;a href="https://code.visualstudio.com/docs/copilot/customization/prompt-files" rel="noopener noreferrer"&gt;https://code.visualstudio.com/docs/copilot/customization/prompt-files&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Smart Actions (generar commit y PR): &lt;a href="https://code.visualstudio.com/docs/copilot/copilot-smart-actions#_generate-a-commit-message-and-pr-information" rel="noopener noreferrer"&gt;https://code.visualstudio.com/docs/copilot/copilot-smart-actions#_generate-a-commit-message-and-pr-information&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Conventional Commits: &lt;a href="https://www.conventionalcommits.org/" rel="noopener noreferrer"&gt;https://www.conventionalcommits.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Commitlint: &lt;a href="https://commitlint.js.org/#/reference-rules" rel="noopener noreferrer"&gt;https://commitlint.js.org/#/reference-rules&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>githubcopilot</category>
      <category>vscode</category>
      <category>git</category>
      <category>github</category>
    </item>
  </channel>
</rss>
